Files
iroh-gossip-rendezvous/Cargo.toml
T

170 lines
5.0 KiB
TOML

[package]
name = "iroh-gossip-rendezvous"
version = "0.2.0"
edition = "2024"
rust-version = "1.93.0"
authors = ["Stephen Waits <steve@waits.net>"]
license = "MIT"
description = "Passphrase-based rendezvous for iroh-gossip swarms via Mainline DHT"
repository = "https://github.com/swaits/iroh-gossip-rendezvous"
homepage = "https://github.com/swaits/iroh-gossip-rendezvous"
keywords = ["iroh", "gossip", "dht", "mainline", "rendezvous"]
categories = ["network-programming"]
readme = "README.md"
exclude = [
# Dev workflow / local tooling — never ship to crates.io.
".jj/",
".github/",
".cargo/",
".config/",
".claude/",
"deny.toml",
"justfile",
"CODEOWNERS",
# cargo-mutants output (gitignored but guard against leakage).
"mutants.out",
"mutants.out/**",
"mutants.out.old",
"mutants.out.old/**",
# cargo-fuzz workspace is a separate crate; corpus/artifacts are huge.
"fuzz/corpus",
"fuzz/corpus/**",
"fuzz/artifacts",
"fuzz/artifacts/**",
"fuzz/target",
"fuzz/target/**",
# Coverage output.
"lcov.info",
"*.profraw",
"*.profdata",
]
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[features]
# Discrete-event simulator + test-support hooks that expose `pub(crate)`
# internals (InMemoryDht, DhtSlots, ProtoState, merge / wire helpers).
# Not part of the stable public API; may shift between 0.x releases.
sim = []
# Enables Kani bounded-model-checking proof harnesses (src/kani_proofs.rs).
# Off-by-default; only set when running `cargo kani`.
kani = []
# Makes Miri-incompatible tests (anything touching tokio I/O, the real
# Mainline DHT, or std::time::Instant-from-the-clock) opt-in. Enable with
# `cargo +nightly miri test --lib --features miri-compat`.
miri-compat = []
# Opt-in live tests against the real Mainline DHT. Flaky, network-dependent.
# Used by the nightly `mainline-live` CI lane only.
mainline-live = []
# Extension of the public Builder that accepts an injected DhtSlots trait
# object for integration tests. Off-by-default so the public API stays tight;
# tests re-enable it via `dev-dependencies`.
test-support = ["sim"]
[[example]]
name = "simulator"
required-features = ["sim"]
[[bench]]
name = "merge"
harness = false
[[bench]]
name = "crypto"
harness = false
[[bench]]
name = "wire"
harness = false
[[bench]]
name = "keys"
harness = false
[dependencies]
iroh = "=1.0.0-rc.0"
iroh-gossip = "0.99"
mainline = { version = "6", features = ["async"] }
# Crypto stack — several deps are pinned by transitive constraints. See
# `UPGRADING.md` or the release notes on any bump.
#
# * `ed25519-dalek = "=3.0.0-pre.7"`: matched to iroh 1.0.0-rc.0 / iroh-base 1.0.0-rc.0.
# * `chacha20poly1305 = 0.10`: 0.11 is `rc`. Same story.
# * `hkdf = 0.13`: works as of mainline 6.1.2, which loosened its `digest`
# pin to `0.11`. The HKDF-SHA256 KAT covers compatibility — bump only if
# it still passes byte-for-byte.
# * `rand = 0.9`: 0.10 is coordinated with iroh + bridge; hold until iroh bumps.
ed25519-dalek = "=3.0.0-pre.7"
chacha20poly1305 = "0.10"
hkdf = "0.13"
sha2 = "0.11"
blake3 = "1"
zeroize = { version = "1", features = ["derive"] }
rand = "0.9"
bytes = "1"
tokio = { version = "1", features = ["time", "sync", "rt", "macros"] }
tokio-util = { version = "0.7", features = ["rt"] }
futures-lite = "2"
tracing = "0.1"
thiserror = "2"
async-trait = "0.1"
# Provides the `#[mutants::skip]` attribute for targeted cargo-mutants
# exclusions on code paths that are fundamentally async + network-bound.
mutants = "0.0.4"
[dev-dependencies]
proptest = "1"
tokio = { version = "1", features = ["full", "test-util"] }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
anyhow = "1"
clap = { version = "4", features = ["derive"] }
hex = "0.4"
criterion = { version = "0.8", features = ["html_reports"] }
arbitrary = { version = "1", features = ["derive"] }
hex-literal = "1"
stateright = "0.31"
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(kani)'] }
[lints.clippy]
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
unwrap_used = "deny"
expect_used = "deny"
panic = "deny"
# Stylistic lints we don't want to fight:
similar_names = "allow"
module_name_repetitions = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
cast_possible_truncation = "allow"
cast_sign_loss = "allow"
cast_precision_loss = "allow"
cast_possible_wrap = "allow"
redundant_pub_crate = "allow"
multiple_crate_versions = "allow"
doc_markdown = "allow"
collapsible_if = "allow"
if_not_else = "allow"
map_unwrap_or = "allow"
missing_const_for_fn = "allow"
needless_pass_by_value = "allow"
redundant_clone = "allow"
significant_drop_tightening = "allow"
single_match_else = "allow"
struct_field_names = "allow"
too_many_lines = "allow"
must_use_candidate = "allow"
# Fires on Rust 1.95+ suggesting `Duration::from_mins(5)`, but `from_mins`
# was only stabilized in 1.95 — using it would break our 1.93.0 MSRV.
# Allow crate-wide until MSRV reaches 1.95.
duration_suboptimal_units = "allow"
too_long_first_doc_paragraph = "allow"