diff --git a/.busbar-ref b/.busbar-ref index 9e85a74..b060b1a 100644 --- a/.busbar-ref +++ b/.busbar-ref @@ -1 +1 @@ -7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 1.6.0 +276a156148703ed720f133ec8791df317a9c44dd 1.6.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df72cf1..2a60b0c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ permissions: jobs: ci: - uses: GetBusbar/busbar/.github/workflows/plugin-ci.yml@7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 + uses: GetBusbar/busbar/.github/workflows/plugin-ci.yml@276a156148703ed720f133ec8791df317a9c44dd with: service: none busbar_checkout: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f3185aa..a7dbd83 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: secrets: inherit release: needs: ci - uses: GetBusbar/busbar/.github/workflows/plugin-release.yml@7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 + uses: GetBusbar/busbar/.github/workflows/plugin-release.yml@276a156148703ed720f133ec8791df317a9c44dd with: plugin_crate: busbar-export-webhook-plugin manifest_name: busbar-export-webhook @@ -41,7 +41,7 @@ jobs: consumer-verify: needs: release if: ${{ !cancelled() }} - uses: GetBusbar/busbar/.github/workflows/plugin-consumer-verify.yml@7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 + uses: GetBusbar/busbar/.github/workflows/plugin-consumer-verify.yml@276a156148703ed720f133ec8791df317a9c44dd with: version: ${{ github.ref_name }} asset_prefix: busbar-export-webhook diff --git a/.github/workflows/repin.yml b/.github/workflows/repin.yml index 40a7db8..e785e5a 100644 --- a/.github/workflows/repin.yml +++ b/.github/workflows/repin.yml @@ -28,7 +28,7 @@ permissions: jobs: repin: - uses: GetBusbar/busbar/.github/workflows/plugin-repin.yml@7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 + uses: GetBusbar/busbar/.github/workflows/plugin-repin.yml@276a156148703ed720f133ec8791df317a9c44dd with: busbar_sha: ${{ github.event.client_payload.sha || inputs.busbar_sha }} busbar_version: ${{ github.event.client_payload.version || inputs.busbar_version }} diff --git a/Cargo.lock b/Cargo.lock index e277d32..6b86d84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -201,7 +201,7 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "busbar-contract" version = "1.6.0" -source = "git+https://www.github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://www.github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "async-trait", "base64 0.22.1", @@ -224,10 +224,11 @@ dependencies = [ [[package]] name = "busbar-core-connector" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "busbar-kernel", + "busbar-kernel-egress", "crc32fast", "dimpl", "futures", @@ -273,7 +274,7 @@ dependencies = [ [[package]] name = "busbar-kernel" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "arc-swap", "async-trait", @@ -311,7 +312,6 @@ dependencies = [ "serde_yaml_ng", "sonic-rs", "tokio", - "tokio-util", "tower", "tracing", "tracing-log", @@ -323,7 +323,7 @@ dependencies = [ [[package]] name = "busbar-kernel-audit" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "ed25519-dalek", @@ -334,7 +334,7 @@ dependencies = [ [[package]] name = "busbar-kernel-breaker" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "httpdate", @@ -343,7 +343,7 @@ dependencies = [ [[package]] name = "busbar-kernel-egress" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "bytes", @@ -353,19 +353,17 @@ dependencies = [ [[package]] name = "busbar-kernel-identity" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "hex", "ring", - "serde", - "tracing", ] [[package]] name = "busbar-kernel-ledger" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "ring", @@ -375,7 +373,7 @@ dependencies = [ [[package]] name = "busbar-kernel-scope" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", ] @@ -383,7 +381,7 @@ dependencies = [ [[package]] name = "busbar-kernel-wal" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", "ring", @@ -392,11 +390,9 @@ dependencies = [ [[package]] name = "busbar-plugin-loader" version = "1.5.0" -source = "git+https://github.com/GetBusbar/busbar?rev=7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4#7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" +source = "git+https://github.com/GetBusbar/busbar?rev=276a156148703ed720f133ec8791df317a9c44dd#276a156148703ed720f133ec8791df317a9c44dd" dependencies = [ "busbar-contract", - "busbar-kernel-ledger", - "busbar-kernel-wal", "ed25519-dalek", "flate2", "futures", @@ -414,7 +410,7 @@ dependencies = [ [[package]] name = "busbar-transport-http" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar-transport-http?rev=9e0d6fee15e14d9a4b6af1f0e1b9f0e95655f03a#9e0d6fee15e14d9a4b6af1f0e1b9f0e95655f03a" +source = "git+https://github.com/GetBusbar/busbar-transport-http?rev=a715d1ab57dcec469930563da0c0509a4fb75289#a715d1ab57dcec469930563da0c0509a4fb75289" dependencies = [ "busbar-contract", "bytes", @@ -432,7 +428,7 @@ dependencies = [ [[package]] name = "busbar-transport-tcp" version = "1.6.0" -source = "git+https://github.com/GetBusbar/busbar-transport-tcp?rev=89d08ebcb91e5b2d4001b667fba151d9bc09d22d#89d08ebcb91e5b2d4001b667fba151d9bc09d22d" +source = "git+https://github.com/GetBusbar/busbar-transport-tcp?rev=eb334dd6e9d3dcd62ae1616f77a5ed56311b255a#eb334dd6e9d3dcd62ae1616f77a5ed56311b255a" dependencies = [ "busbar-contract", ] @@ -644,7 +640,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ef1e2f9..426b60f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,8 @@ # `.busbar-ref`; no sibling-checkout path dependency ships in any manifest. # # THIRD-PARTY VERSIONS ARE THE FLEET'S, NOT THIS REPO'S. The table below is busbar's own root -# `[workspace.dependencies]` (third-party rows) at busbar 7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4, followed by the plugin-only rows -# of busbar's `.github/fleet/deps.toml` at 7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4. A member takes a crate with +# `[workspace.dependencies]` (third-party rows) at busbar 276a156148703ed720f133ec8791df317a9c44dd, followed by the plugin-only rows +# of busbar's `.github/fleet/deps.toml` at 276a156148703ed720f133ec8791df317a9c44dd. A member takes a crate with # `{ workspace = true }` (adding features if it needs them); a crate in neither table is a new # `deps.toml` row in busbar first. CI holds this repo's Cargo.lock to busbar's lock at the pin. [workspace] @@ -29,17 +29,18 @@ publish = false repository = "https://github.com/GetBusbar/busbar-export-webhook" [workspace.dependencies] -busbar-contract = { git = "https://github.com/GetBusbar/busbar", rev = "7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" } -busbar-plugin-loader = { git = "https://github.com/GetBusbar/busbar", rev = "7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" } +busbar-contract = { git = "https://github.com/GetBusbar/busbar", rev = "276a156148703ed720f133ec8791df317a9c44dd" } +busbar-plugin-loader = { git = "https://github.com/GetBusbar/busbar", rev = "276a156148703ed720f133ec8791df317a9c44dd" } # THE SUITE'S HOST CONNECTOR (dev-only; export-webhook-plugin/tests/support/conformance_host.rs, # rendered because the declares file states network needs): busbar's connector and its TLS # test kit at the pin, and the transport framers those needs name, at the revs busbar links. -busbar-core-connector = { git = "https://github.com/GetBusbar/busbar", rev = "7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4", features = ["test-support"] } -busbar-transport-http = { git = "https://github.com/GetBusbar/busbar-transport-http", rev = "9e0d6fee15e14d9a4b6af1f0e1b9f0e95655f03a" } -busbar-transport-tcp = { git = "https://github.com/GetBusbar/busbar-transport-tcp", rev = "89d08ebcb91e5b2d4001b667fba151d9bc09d22d" } -# busbar's root [workspace.dependencies], third-party rows, at 7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 +busbar-core-connector = { git = "https://github.com/GetBusbar/busbar", rev = "276a156148703ed720f133ec8791df317a9c44dd", features = ["test-support"] } +busbar-transport-http = { git = "https://github.com/GetBusbar/busbar-transport-http", rev = "a715d1ab57dcec469930563da0c0509a4fb75289" } +busbar-transport-tcp = { git = "https://github.com/GetBusbar/busbar-transport-tcp", rev = "eb334dd6e9d3dcd62ae1616f77a5ed56311b255a" } +# busbar's root [workspace.dependencies], third-party rows, at 276a156148703ed720f133ec8791df317a9c44dd a2a-lf = "0.3.0" a2a-pb = "0.2.0" +aes = { version = "0.8", default-features = false } arc-swap = "1" async-trait = "0.1" axum = "0.8" @@ -81,7 +82,6 @@ prost = { version = "0.14", default-features = false, features = ["std"] } rcgen = { version = "0.14", default-features = false, features = ["crypto", "ring"] } reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream"] } ring = "0.17" -rmcp = { version = "3.1.2", default-features = false } rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] } rustls-pki-types = { version = "1", default-features = false, features = ["std"] } schemars = "1" @@ -93,6 +93,7 @@ sha2 = "0.10" smallvec = "1" socket2 = { version = "0.6", features = ["all"] } sonic-rs = "0.5" +str0m = { version = "=0.24.1", default-features = false } syn = { version = "2", features = ["full", "visit", "parsing", "printing"] } tar = { version = "0.4", default-features = false } tikv-jemalloc-ctl = "0.6" @@ -113,12 +114,15 @@ url = "2" webpki = { package = "rustls-webpki", version = "0.103", default-features = false, features = ["std", "ring"] } webpki-roots = "1" zeroize = "1" -# busbar .github/fleet/deps.toml [plugin-deps], at 7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4 +# busbar .github/fleet/deps.toml [plugin-deps], at 276a156148703ed720f133ec8791df317a9c44dd +fallible-iterator = "0.2" ldap3 = { version = "0.12", default-features = false, features = ["sync"] } mysql = { version = "28", default-features = false, features = ["minimal-rust"] } mysql_common = { version = "0.35", default-features = false } percent-encoding = "2" postgres = "0.19" +postgres-protocol = "0.6.11" +postgres-types = "0.2" redis = { version = "1", default-features = false, features = ["script"] } rusqlite = { version = "0.40", features = ["bundled"] } ulid = "1" @@ -128,4 +132,4 @@ ulid = "1" # patches them to its own tree. The source is busbar spelled through www.github.com: Cargo # refuses a patch that names the source it patches. [patch."https://github.com/GetBusbar/busbar"] -busbar-contract = { git = "https://www.github.com/GetBusbar/busbar", rev = "7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4" } +busbar-contract = { git = "https://www.github.com/GetBusbar/busbar", rev = "276a156148703ed720f133ec8791df317a9c44dd" } diff --git a/deny.toml b/deny.toml index 4bd0b6b..10c7528 100644 --- a/deny.toml +++ b/deny.toml @@ -1,5 +1,5 @@ # RENDERED by `busbar-release plugin heal` from GetBusbar/busbar-release template/ and busbar's -# `.github/fleet/deps.toml` at 7356bbfb6baeb0e9245a59dc74f8b4bfadb2c5a4; a hand edit is overwritten by the next sync. CI runs +# `.github/fleet/deps.toml` at 276a156148703ed720f133ec8791df317a9c44dd; a hand edit is overwritten by the next sync. CI runs # `cargo deny check` on it (busbar's plugin-ci.yml at the pin). The license allowlist is busbar's own; # the one reviewed git source is busbar itself, at the pin. [graph] @@ -65,6 +65,8 @@ deny = [ { crate = "a2a-lf:>=0.4.0", reason = "busbar resolves a2a-lf to 0.3.0; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "a2a-pb:<0.2.0", reason = "busbar resolves a2a-pb to 0.2.0; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "a2a-pb:>=0.3.0", reason = "busbar resolves a2a-pb to 0.2.0; a plugin may not pull a second version (OWNER 2026-10-02)" }, + { crate = "aes:<0.8.0", reason = "busbar resolves aes to 0.8.4; a plugin may not pull a second version (OWNER 2026-10-02)" }, + { crate = "aes:>=0.9.0", reason = "busbar resolves aes to 0.8.4; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "arc-swap:<1.0.0", reason = "busbar resolves arc-swap to 1.9.2; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "arc-swap:>=2.0.0", reason = "busbar resolves arc-swap to 1.9.2; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "async-trait:<0.1.0", reason = "busbar resolves async-trait to 0.1.92; a plugin may not pull a second version (OWNER 2026-10-02)" }, @@ -147,8 +149,6 @@ deny = [ { crate = "reqwest:>=0.13.0", reason = "busbar resolves reqwest to 0.12.28; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "ring:<0.17.0", reason = "busbar resolves ring to 0.17.14; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "ring:>=0.18.0", reason = "busbar resolves ring to 0.17.14; a plugin may not pull a second version (OWNER 2026-10-02)" }, - { crate = "rmcp:<3.0.0", reason = "busbar resolves rmcp to 3.1.2; a plugin may not pull a second version (OWNER 2026-10-02)" }, - { crate = "rmcp:>=4.0.0", reason = "busbar resolves rmcp to 3.1.2; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "rustls:<0.23.0", reason = "busbar resolves rustls to 0.23.45; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "rustls:>=0.24.0", reason = "busbar resolves rustls to 0.23.45; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "rustls-pki-types:<1.0.0", reason = "busbar resolves rustls-pki-types to 1.15.1; a plugin may not pull a second version (OWNER 2026-10-02)" }, @@ -171,6 +171,8 @@ deny = [ { crate = "socket2:>=0.7.0", reason = "busbar resolves socket2 to 0.6.4; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "sonic-rs:<0.5.0", reason = "busbar resolves sonic-rs to 0.5.10; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "sonic-rs:>=0.6.0", reason = "busbar resolves sonic-rs to 0.5.10; a plugin may not pull a second version (OWNER 2026-10-02)" }, + { crate = "str0m:<0.24.0", reason = "busbar resolves str0m to 0.24.1; a plugin may not pull a second version (OWNER 2026-10-02)" }, + { crate = "str0m:>=0.25.0", reason = "busbar resolves str0m to 0.24.1; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "syn:<2.0.0", reason = "busbar resolves syn to 2.0.117, 3.0.3; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "syn:>=4.0.0", reason = "busbar resolves syn to 2.0.117, 3.0.3; a plugin may not pull a second version (OWNER 2026-10-02)" }, { crate = "tar:<0.4.0", reason = "busbar resolves tar to 0.4.46; a plugin may not pull a second version (OWNER 2026-10-02)" }, diff --git a/export-webhook-plugin/tests/support/conformance_host.rs b/export-webhook-plugin/tests/support/conformance_host.rs index 62fe7fd..0d605c9 100644 --- a/export-webhook-plugin/tests/support/conformance_host.rs +++ b/export-webhook-plugin/tests/support/conformance_host.rs @@ -164,10 +164,17 @@ fn pem_certs(pem: &str) -> Vec> { certs } -/// The dispatcher the host's transport doors are adopted by. +/// The dispatcher the host's transport doors are adopted by. As the root's: its workers run inside +/// the connector's I/O runtime, and a CARRIER door moves its bytes over the process's one host I/O +/// (`io.*`, `busbar_core_connector::hostio::process`), the connector's. fn transport_dispatcher() -> &'static Dispatcher { static ONE: OnceLock = OnceLock::new(); - ONE.get_or_init(|| Dispatcher::new(DispatchConfig::default())) + ONE.get_or_init(|| { + let d = Dispatcher::new(DispatchConfig::default()); + d.install_runtime(io_reactor()); + d.install_io(busbar_core_connector::hostio::process()); + d + }) } /// The framer entries: each door loaded through the one loader and opened with no settings, as @@ -227,8 +234,16 @@ impl Opened { let facts = DoorFacts { name: plugin.name().to_owned(), claims: stated.claims, + role: stated.role, composes_over: stated.composes_over, + ported: stated.ported, status_rows: stated.status_rows, + duplex: stated + .upgrades + .iter() + .chain(&stated.sessions) + .copied() + .collect(), }; Self { plugin, facts } } @@ -246,11 +261,76 @@ fn go(p: &Plugin, s: u32, i: &mut I, o: &mut } } +/// One side of a carried connection: an inline ticket of the transport dispatcher, the one every +/// transport door is adopted by (its wakes route there), as the root's. +struct InlineSide(busbar_plugin_loader::dispatch::InlineTicket); + +impl busbar_core_connector::carrier::Side for InlineSide { + fn ticket(&self) -> busbar_contract::abi::mechanism::ticket::Ticket { + self.0.ticket() + } + + fn register(&self, waker: &std::task::Waker) { + self.0.register(waker); + } +} + +/// One INLINE crossing on `ticket` (a RESUME when `resume`): the host's `in`/`out` copied in, the +/// answer copied back. +fn go_inline( + p: &Plugin, + ticket: busbar_contract::abi::mechanism::ticket::Ticket, + resume: bool, + s: u32, + i: &mut I, + o: &mut O, +) -> Crossed { + let mut f = Frame::new(*i, *o); + let c = p.call_inline(ticket, resume, s, &mut f); + *i = f.input; + *o = f.out; + Crossed { + outcome: c.outcome, + error: c.error, + } +} + impl FramerDoor for Opened { fn facts(&self) -> &DoorFacts { &self.facts } + fn side(&self) -> Option> { + if self.facts.role != busbar_contract::abi::transport::ROLE_CARRIER { + return None; + } + transport_dispatcher() + .inline_ticket() + .map(|t| Box::new(InlineSide(t)) as Box) + } + + fn carry( + &self, + side: &dyn busbar_core_connector::carrier::Side, + resume: bool, + call: busbar_core_connector::carrier::Carry<'_>, + ) -> Crossed { + use busbar_core_connector::carrier::Carry; + let (p, t) = (&self.plugin, side.ticket()); + match call { + Carry::Listen(i, o) => go_inline(p, t, resume, slot::LISTEN, i, o), + Carry::Accept(i, o) => go_inline(p, t, resume, slot::ACCEPT, i, o), + Carry::Dial(i, o) => go_inline(p, t, resume, slot::DIAL, i, o), + Carry::Read(i, o) => go_inline(p, t, resume, slot::READ, i, o), + Carry::Write(i, o) => go_inline(p, t, resume, slot::WRITE, i, o), + Carry::Flush(i, o) => go_inline(p, t, resume, slot::FLUSH, i, o), + Carry::Shut(i, o) => go_inline(p, t, resume, slot::SHUT, i, o), + Carry::Arrival(i, o) => go_inline(p, t, resume, slot::ARRIVAL, i, o), + // `cancel` is made on no ticket: the ticket it cancels rides its `in`. + Carry::Cancel(i, o) => go(p, life::CANCEL, i, o), + } + } + fn cross(&self, call: Call<'_>) -> Crossed { let p = &self.plugin; match call {