ADR-0007 lands in code: - Rename crates/rutster-signaling-sip → crates/rutster-trunk. The crate was a stub anyway (lib.rs with a doc-comment + crate_compiles() test); the rename locks the new boundary shape — the future rented-transport ingress (CPaaS media-leg fork / out-of-tree SBC glue, **no SIP stack**) lands here at spearhead step 5. - rutster-trunk/src/lib.rs doc-comment now describes the ADR-0007 split: CPaaS media-leg adapter as primary, out-of-tree SBC for on-prem graduation. Cross-refs ADR-0007 + ADR-0008 (FOB vs. green zone: trunk is green zone; SIP lives outside the trust boundary). - rutster-spend/src/lib.rs doc-comment updated to quote ADR-0007's 'rutster mediates both the provider call-control API and the brain tap' framing — the spend gate sits in that boundary, structurally preventing a runaway brain from exceeding spend/pacing. Pulling spend out into a service re-introduces the 3-vendor structural hole. Cargo bumps: - edition = '2024' (slice-1's pinned Rust 1.85 + edition-2024 floor already requires this; rutster-media's let-else pattern in OpusDecoder::decode · Slice-2's let-else in AcceptOffer's Uuid parse_str · all rely on edition 2024's stabilized let-chains / let-else). - repository = 'https://git.adlee.work/alee/rutster' (the self-hosted Gitea remote — matches 'git remote -v' origin). The github.com/anomalyco URL was stale from the pre-pivot copy. - Cargo.lock regenerated by cargo for the rename. No behavioral code changes — the trunk crate's body is still the stub crate_compiles() test. FOB membership (per ADR-0008) is unchanged: rutster-trunk will be FOB-internal at step 5 because it's the media-leg ingress (hot path); spend-spend stays FOB because spend is security-constitutive.
54 lines
2.0 KiB
TOML
54 lines
2.0 KiB
TOML
# Cargo.toml — rutster workspace root.
|
|
# Spec ref: slice-1 §2. The workspace pins shared dep versions here so
|
|
# member crates can't drift (§2.1). Each member references with
|
|
# `dep.workspace = true`.
|
|
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/rutster",
|
|
"crates/rutster-call-model",
|
|
"crates/rutster-media",
|
|
"crates/rutster-trunk",
|
|
"crates/rutster-tap",
|
|
"crates/rutster-tap-echo",
|
|
"crates/rutster-spend",
|
|
]
|
|
|
|
[workspace.package]
|
|
license = "GPL-3.0-or-later"
|
|
edition = "2024"
|
|
repository = "https://git.adlee.work/alee/rutster"
|
|
|
|
# Pinned versions for all member crates. References are `foo.workspace = true`
|
|
# in the member manifest. Keeps the dep tree unified (§2.1).
|
|
[workspace.dependencies]
|
|
# str0m 0.21: sans-IO WebRTC. Frame API (Event::MediaData + Writer::write).
|
|
str0m = "0.21"
|
|
# opus 0.3.1: libopus FFI (system libopus required — see README).
|
|
opus = "0.3"
|
|
# axum 0.7: HTTP signaling surface.
|
|
axum = { version = "0.7", features = ["macros"] }
|
|
# tokio 1: runtime driving the str0m poll loop (slice-1 deviation per §3.4).
|
|
tokio = { version = "1", features = ["full"] }
|
|
# dashmap 6: in-process session store.
|
|
dashmap = "6"
|
|
# uuid 1: ChannelId newtype backing.
|
|
uuid = { version = "1", features = ["v4"] }
|
|
thiserror = "1"
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
# tower: used by the binary crate's integration tests (ServiceExt::oneshot
|
|
# on the axum Router). Axum re-exports parts of tower but the integration test
|
|
# uses `tower::ServiceExt` directly, so it needs to be a workspace dep.
|
|
tower = { version = "0.5", features = ["util"] }
|
|
# tokio-tungstenite 0.24: WS client + server (slice-2 tap transport).
|
|
tokio-tungstenite = { version = "0.24", features = ["connect"] }
|
|
# futures-util 0.3: Sink/Stream traits for WebSocketStream.
|
|
futures-util = "0.3"
|
|
# url 2: tap URL parsing + host validation (spec §4.4).
|
|
url = "2"
|
|
# base64 0.22: PCM <-> base64 codec for the v1 wire format (spec §3).
|
|
base64 = "0.22"
|