Files
firezone/rust/relay/server/Cargo.toml
Thomas Eizinger bcf4ccf817 fix(rust): introduce dedicated downcast functions for anyhow (#10966)
The downcasting abilities of `anyhow` are pretty powerful.
Unfortunately, they can also be a bit tricky to get right. Whilst `is`
and `downcast` work fine for any errors that are within the `anyhow`
error chain, they don't check the chain of errors prior to that. In
other words, if we already have a nested `std::error::Error` with
several causes, `anyhow` cannot downcast to these causes directly.

In order to avoid this footgun, we create a thin-layer on top of the
`anyhow` crate with some downcasting functions that always try to do the
right thing.
2025-11-25 04:14:17 +00:00

73 lines
2.5 KiB
TOML

[package]
name = "firezone-relay"
version = "0.1.0"
edition = { workspace = true }
license = { workspace = true }
[package.metadata.cargo-udeps.ignore]
development = ["difference"]
[dependencies]
anyhow = { workspace = true }
axum = { workspace = true, features = ["http1", "tokio", "query"] }
backoff = { workspace = true }
base64 = { workspace = true }
bytecodec = { workspace = true }
bytes = { workspace = true }
clap = { workspace = true, features = ["derive", "env"] }
derive_more = { workspace = true, features = ["from"] }
firezone-bin-shared = { workspace = true }
firezone-logging = { workspace = true }
firezone-telemetry = { workspace = true }
futures = { workspace = true }
hex = { workspace = true }
hex-display = { workspace = true }
mio = { workspace = true, features = ["net"] }
once_cell = { workspace = true }
opentelemetry = { workspace = true, features = ["metrics"] }
opentelemetry-otlp = { workspace = true, features = ["metrics", "grpc-tonic"] }
opentelemetry_sdk = { workspace = true }
phoenix-channel = { workspace = true }
proptest = { workspace = true, optional = true }
rand = { workspace = true }
rustls = { workspace = true }
secrecy = { workspace = true }
serde = { workspace = true, features = ["derive"] }
sha2 = { workspace = true }
smallvec = { workspace = true }
socket-factory = { workspace = true }
socket2 = { workspace = true }
stun_codec = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["macros", "rt-multi-thread", "net", "time", "signal"] }
tracing = { workspace = true, features = ["log"] }
tracing-core = { workspace = true }
tracing-opentelemetry = { workspace = true }
tracing-stackdriver = { workspace = true, features = ["opentelemetry"] }
tracing-subscriber = { workspace = true, features = ["env-filter", "json", "fmt"] }
trackable = { workspace = true }
url = { workspace = true }
uuid = { workspace = true, features = ["v4"] }
[target.'cfg(target_os = "linux")'.dependencies]
aya = { workspace = true }
aya-log = { workspace = true }
ebpf-shared = { workspace = true, features = ["std"] }
[target.'cfg(target_os = "linux")'.build-dependencies]
anyhow = { workspace = true }
aya-build = { workspace = true }
[dev-dependencies]
difference = { workspace = true }
opentelemetry_sdk = { workspace = true, features = ["testing", "metrics"] }
test-strategy = { workspace = true }
tokio = { workspace = true, features = ["process", "macros", "net"] }
[[test]]
name = "regression"
required-features = ["proptest"]
[lints]
workspace = true