From bbe0239ab97b08faccfd5adf4ada851d5b61d822 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Tue, 7 Apr 2026 14:57:17 -0600 Subject: [PATCH] replace repo contents with redirect to donglora org --- .cargo/mutants.toml | 55 - .github/workflows/ci.yml | 41 - .gitignore | 11 - CHANGELOG.md | 41 - Cargo.lock | 5539 ----------------- Cargo.toml | 54 - LICENSE | 21 - README.md | 306 +- deny.toml | 39 - fuzz/Cargo.toml | 26 - fuzz/fuzz_targets/fuzz_decode_peer_list.rs | 7 - fuzz/fuzz_targets/fuzz_gossip_frame_decode.rs | 7 - justfile | 69 - mise.toml | 3 - rustfmt.toml | 3 - screenshot.png | Bin 191678 -> 0 bytes src/config.rs | 434 -- src/gossip.rs | 769 --- src/lib.rs | 18 - src/main.rs | 210 - src/packet.rs | 258 - src/radio.rs | 444 -- src/rate_limit.rs | 343 - src/router.rs | 424 -- src/setup.rs | 194 - src/tui.rs | 1153 ---- 26 files changed, 19 insertions(+), 10450 deletions(-) delete mode 100644 .cargo/mutants.toml delete mode 100644 .github/workflows/ci.yml delete mode 100644 .gitignore delete mode 100644 CHANGELOG.md delete mode 100644 Cargo.lock delete mode 100644 Cargo.toml delete mode 100644 LICENSE delete mode 100644 deny.toml delete mode 100644 fuzz/Cargo.toml delete mode 100644 fuzz/fuzz_targets/fuzz_decode_peer_list.rs delete mode 100644 fuzz/fuzz_targets/fuzz_gossip_frame_decode.rs delete mode 100644 justfile delete mode 100644 mise.toml delete mode 100644 rustfmt.toml delete mode 100644 screenshot.png delete mode 100644 src/config.rs delete mode 100644 src/gossip.rs delete mode 100644 src/lib.rs delete mode 100644 src/main.rs delete mode 100644 src/packet.rs delete mode 100644 src/radio.rs delete mode 100644 src/rate_limit.rs delete mode 100644 src/router.rs delete mode 100644 src/setup.rs delete mode 100644 src/tui.rs diff --git a/.cargo/mutants.toml b/.cargo/mutants.toml deleted file mode 100644 index e43c07a..0000000 --- a/.cargo/mutants.toml +++ /dev/null @@ -1,55 +0,0 @@ -# cargo-mutants configuration -# Run with: cargo mutants -# Install with: cargo install cargo-mutants - -# Exclude entire files that are untestable (main requires full app, setup requires interactive stdin) -exclude_globs = [ - "src/main.rs", - "src/setup.rs", -] - -# Exclude specific functions that require hardware, network, terminal, or full async infrastructure -exclude_re = [ - # Equivalent mutants: Instant arithmetic never produces exact equality, - # so `< ttl` and `<= ttl` behave identically in practice. - "replace < with <= in DedupCache", - "replace < with <= in decode_peer_list", - # rate_limit.rs: equivalent mutant (secs is always > 0 from lora_air_time) - "replace > with >= in RateLimiter::from_radio_config", - # radio.rs: hardware-dependent functions - "radio_loop", - "connect_and_run", - # gossip.rs: async network functions - "Gossip::new", - "Gossip::shutdown", - "spawn_accept_loop", - "handle_incoming", - "spawn_receiver", - "spawn_broadcaster", - "spawn_dht_heartbeat", - "dht_read_and_join", - "dht_publish", - "dht_get_peers", - # router.rs: async event loop - "^src/router\\.rs:.* replace run ", - "^src/router\\.rs:.* in run$", - # tui.rs: terminal rendering functions - "tui::run", - "tui_loop", - "restore_terminal", - "draw_ui", - "draw_header", - "draw_network", - "draw_radio", - "draw_stats", - "draw_log", - "draw_activity", - "draw_sparkline_section", - "draw_shutdown_overlay", - "panel_block", - "status_pill", - "kv_line", -] - -# Timeout per mutant test (seconds) -timeout_multiplier = 3.0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index bdef620..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: CI - -on: - push: - branches: [main] - pull_request: - branches: [main] - -env: - CARGO_TERM_COLOR: always - -jobs: - check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y libudev-dev - - - uses: dtolnay/rust-toolchain@master - with: - toolchain: "1.94.1" - components: rustfmt, clippy - - - uses: Swatinem/rust-cache@v2 - - - name: Format check - run: cargo fmt --check - - - name: Clippy - run: cargo clippy --all-targets -- -D warnings - - - name: Test - run: cargo test - - - name: Install cargo-deny - run: cargo install cargo-deny --locked - - - name: Audit (advisories + licenses) - run: cargo deny check diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f843f2d..0000000 --- a/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -/target -/fuzz/target -/fuzz/corpus -/fuzz/Cargo.lock -/mutants.out -/mutants.out.old -.jj/ -*.swp -*.swo -*~ -.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 7ddbac6..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -# Changelog - -## [0.2.3] - 2026-04-06 - -### Changed - -- README: clarify that the bridge relays raw LoRa packets and works with any - protocol (Meshtastic, MeshCore, etc.) simultaneously. - -## [0.2.2] - 2026-04-06 - -### Fixed - -- TUI now fits in 80-column terminals (was 86). - -## [0.2.1] - 2026-04-06 - -### Fixed - -- CI: removed stale sibling-clone step, added `libudev-dev` dependency, - upgraded `actions/checkout` to v5 (Node.js 24). - -## [0.2.0] - 2026-04-06 - -### Added - -- Auto-detect connection mode: when no `port` is configured, the bridge now - tries the mux daemon first and falls back to direct USB serial - (`find_port()`) if the mux is unavailable. Previously it would retry the mux - forever. - -### Changed - -- Config negotiation on direct serial connections now pushes `SetConfig` with - the desired radio config when it differs from the dongle's current config. - On mux connections, the existing behavior (accept the mux's config) is - unchanged. - -## [0.1.0] - 2026-04-06 - -Initial release. diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 263c12e..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,5539 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common 0.1.7", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures 0.2.17", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "anstyle-parse" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - -[[package]] -name = "anyhow" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version", -] - -[[package]] -name = "atomic" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "attohttpc" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" -dependencies = [ - "base64", - "http", - "log", - "url", -] - -[[package]] -name = "autocfg" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - -[[package]] -name = "backon" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" -dependencies = [ - "fastrand", - "gloo-timers", - "tokio", -] - -[[package]] -name = "base32" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec 0.6.3", -] - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec 0.8.0", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" - -[[package]] -name = "blake3" -version = "1.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures 0.3.0", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-buffer" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96eb4cdd6cf1b31d671e9efe75c5d1ec614776856cefbe109ca373554a6d514f" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - -[[package]] -name = "bumpalo" -version = "3.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" - -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -dependencies = [ - "serde", -] - -[[package]] -name = "castaway" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" -dependencies = [ - "rustversion", -] - -[[package]] -name = "cc" -version = "1.2.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "chrono" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" -dependencies = [ - "iana-time-zone", - "num-traits", - "serde", - "windows-link", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common 0.1.7", - "inout", -] - -[[package]] -name = "clap" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - -[[package]] -name = "cobs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" -dependencies = [ - "thiserror 2.0.18", -] - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - -[[package]] -name = "compact_str" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "rustversion", - "ryu", - "static_assertions", -] - -[[package]] -name = "const-oid" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" - -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - -[[package]] -name = "convert_case" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "cordyceps" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" -dependencies = [ - "loom", - "tracing", -] - -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "crossbeam-channel" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crossterm" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" -dependencies = [ - "bitflags 2.11.0", - "crossterm_winapi", - "derive_more", - "document-features", - "mio", - "parking_lot", - "rustix", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "crypto-common" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "csscolorparser" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" -dependencies = [ - "lab", - "phf", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "curve25519-dalek" -version = "5.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f9200d1d13637f15a6acb71e758f64624048d85b31a5fdbfd8eca1e2687d0b7" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "curve25519-dalek-derive", - "digest 0.11.0-rc.10", - "fiat-crypto", - "rand_core 0.9.5", - "rustc_version", - "serde", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" -dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.117", -] - -[[package]] -name = "darling_core" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" -dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.117", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "darling_macro" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" -dependencies = [ - "darling_core 0.23.0", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "data-encoding" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" - -[[package]] -name = "deltae" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" - -[[package]] -name = "der" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.117", -] - -[[package]] -name = "derive_more" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 2.0.117", - "unicode-xid", -] - -[[package]] -name = "diatomic-waker" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common 0.1.7", -] - -[[package]] -name = "digest" -version = "0.11.0-rc.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa94b64bfc6549e6e4b5a3216f22593224174083da7a90db47e951c4fb31725" -dependencies = [ - "block-buffer 0.11.0", - "const-oid", - "crypto-common 0.2.1", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", -] - -[[package]] -name = "dispatch2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" -dependencies = [ - "bitflags 2.11.0", - "block2", - "libc", - "objc2", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "dlopen2" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" -dependencies = [ - "libc", - "once_cell", - "winapi", -] - -[[package]] -name = "document-features" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" -dependencies = [ - "litrs", -] - -[[package]] -name = "donglora-bridge" -version = "0.2.3" -dependencies = [ - "anyhow", - "blake3", - "bytes", - "clap", - "crossterm", - "dirs", - "donglora-client", - "futures-lite", - "hex", - "iroh", - "iroh-gossip", - "jiff", - "mainline", - "proptest", - "rand 0.9.2", - "ratatui", - "serde", - "sha2 0.10.9", - "tempfile", - "tokio", - "tokio-util", - "toml", - "tracing", - "tracing-appender", - "tracing-subscriber", - "zeroize", -] - -[[package]] -name = "donglora-client" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162468289ac189a798c4ecd961ed92c5dde2d9c5709d779ae324e0bb9a5ac4dc" -dependencies = [ - "anyhow", - "serialport", - "tracing", - "ucobs", -] - -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "ed25519" -version = "3.0.0-rc.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e914c7c52decb085cea910552e24c63ac019e3ab8bf001ff736da9a9d9d890" -dependencies = [ - "pkcs8", - "serde", - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "3.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad207ed88a133091f83224265eac21109930db09bedcad05d5252f2af2de20a1" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand_core 0.9.5", - "serde", - "sha2 0.11.0-rc.2", - "signature", - "subtle", - "zeroize", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - -[[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" - -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "enum-assoc" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed8956bd5c1f0415200516e78ff07ec9e16415ade83c056c230d7b7ea0d55b7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "euclid" -version = "0.22.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" -dependencies = [ - "num-traits", -] - -[[package]] -name = "fancy-regex" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" -dependencies = [ - "bit-set 0.5.3", - "regex", -] - -[[package]] -name = "fastbloom" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" -dependencies = [ - "getrandom 0.3.4", - "libm", - "rand 0.9.2", - "siphasher", -] - -[[package]] -name = "fastrand" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a043dc74da1e37d6afe657061213aa6f425f855399a11d3463c6ecccc4dfda1f" - -[[package]] -name = "fiat-crypto" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" - -[[package]] -name = "filedescriptor" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" -dependencies = [ - "libc", - "thiserror 1.0.69", - "winapi", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "finl_unicode" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "fixedbitset" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "futures-core", - "futures-sink", - "spin 0.9.8", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-buffered" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4421cb78ee172b6b06080093479d3c50f058e7c81b7d577bbb8d118d551d4cd5" -dependencies = [ - "cordyceps", - "diatomic-waker", - "futures-core", - "pin-project-lite", - "spin 0.10.0", -] - -[[package]] -name = "futures-channel" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-concurrency" -version = "7.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175cd8cca9e1d45b87f18ffa75088f2099e3c4fe5e2f83e42de112560bea8ea6" -dependencies = [ - "fixedbitset 0.5.7", - "futures-core", - "futures-lite", - "pin-project", - "smallvec", -] - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" - -[[package]] -name = "futures-lite" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - -[[package]] -name = "futures-macro" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "futures-sink" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", -] - -[[package]] -name = "generator" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" -dependencies = [ - "cc", - "cfg-if", - "libc", - "log", - "rustversion", - "windows-link", - "windows-result", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 5.3.0", - "wasip2", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "r-efi 6.0.0", - "wasip2", - "wasip3", - "wasm-bindgen", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "h2" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hash32" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.2.0", -] - -[[package]] -name = "heapless" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" -dependencies = [ - "atomic-polyfill", - "hash32", - "rustc_version", - "serde", - "spin 0.9.8", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "h2", - "http", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", - "rustls", - "thiserror 2.0.18", - "tinyvec", - "tokio", - "tokio-rustls", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "moka", - "once_cell", - "parking_lot", - "rand 0.9.2", - "resolv-conf", - "rustls", - "smallvec", - "thiserror 2.0.18", - "tokio", - "tokio-rustls", - "tracing", -] - -[[package]] -name = "http" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hybrid-array" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" -dependencies = [ - "typenum", -] - -[[package]] -name = "hyper" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", - "webpki-roots", -] - -[[package]] -name = "hyper-util" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" -dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" -dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" - -[[package]] -name = "icu_properties" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" - -[[package]] -name = "icu_provider" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "identity-hash" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfdd7caa900436d8f13b2346fe10257e0c05c1f1f9e351f4f5d57c03bd5f45da" - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "igd-next" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" -dependencies = [ - "async-trait", - "attohttpc", - "bytes", - "futures", - "http", - "http-body-util", - "hyper", - "hyper-util", - "log", - "rand 0.9.2", - "tokio", - "url", - "xmltree", -] - -[[package]] -name = "indexmap" -version = "2.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" -dependencies = [ - "equivalent", - "hashbrown 0.16.1", - "serde", - "serde_core", -] - -[[package]] -name = "indoc" -version = "2.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" -dependencies = [ - "rustversion", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instability" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb2d60ef19920a3a9193c3e371f726ec1dafc045dac788d0fb3704272458971" -dependencies = [ - "darling 0.23.0", - "indoc", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "io-kit-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b" -dependencies = [ - "core-foundation-sys", - "mach2", -] - -[[package]] -name = "ipconfig" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" -dependencies = [ - "socket2", - "widestring", - "windows-registry", - "windows-result", - "windows-sys 0.61.2", -] - -[[package]] -name = "ipnet" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" - -[[package]] -name = "iri-string" -version = "0.7.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "iroh" -version = "0.97.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb56e7e4b0ec7fba7efa6a236b016a52b5d927d50244aceb9e20566159b1a32" -dependencies = [ - "backon", - "bytes", - "cfg_aliases", - "data-encoding", - "derive_more", - "ed25519-dalek", - "futures-util", - "getrandom 0.3.4", - "hickory-resolver", - "http", - "ipnet", - "iroh-base", - "iroh-metrics", - "iroh-relay", - "n0-error", - "n0-future", - "n0-watcher", - "netwatch", - "noq", - "noq-proto", - "noq-udp", - "papaya", - "pin-project", - "pkarr", - "pkcs8", - "portable-atomic", - "portmapper", - "rand 0.9.2", - "reqwest", - "rustc-hash", - "rustls", - "rustls-pki-types", - "rustls-webpki", - "serde", - "smallvec", - "strum 0.28.0", - "sync_wrapper", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tracing", - "url", - "wasm-bindgen-futures", - "webpki-roots", -] - -[[package]] -name = "iroh-base" -version = "0.97.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55a354e3396b62c14717ee807dfee9a7f43f6dad47e4ac0fd1d49f1ffad14ef0" -dependencies = [ - "curve25519-dalek", - "data-encoding", - "derive_more", - "digest 0.11.0-rc.10", - "ed25519-dalek", - "n0-error", - "rand_core 0.9.5", - "serde", - "sha2 0.11.0-rc.2", - "url", - "zeroize", - "zeroize_derive", -] - -[[package]] -name = "iroh-gossip" -version = "0.97.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4db5b64f3cb0a0c8b68b57888acd4cefcd2f0774f1a132d2a498cbb2a92fbc55" -dependencies = [ - "blake3", - "bytes", - "data-encoding", - "derive_more", - "ed25519-dalek", - "futures-concurrency", - "futures-lite", - "futures-util", - "hex", - "indexmap", - "iroh", - "iroh-base", - "iroh-metrics", - "irpc", - "n0-error", - "n0-future", - "postcard", - "rand 0.9.2", - "serde", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "iroh-metrics" -version = "0.38.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761b45ba046134b11eb3e432fa501616b45c4bf3a30c21717578bc07aa6461dd" -dependencies = [ - "iroh-metrics-derive", - "itoa", - "n0-error", - "portable-atomic", - "postcard", - "ryu", - "serde", - "tracing", -] - -[[package]] -name = "iroh-metrics-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab063c2bfd6c3d5a33a913d4fdb5252f140db29ec67c704f20f3da7e8f92dbf" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "iroh-relay" -version = "0.97.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d786b260cadfe82ae0b6a9e372e8c78949096a06c857d1c3521355cefced0f55" -dependencies = [ - "blake3", - "bytes", - "cfg_aliases", - "data-encoding", - "derive_more", - "getrandom 0.3.4", - "hickory-resolver", - "http", - "http-body-util", - "hyper", - "hyper-util", - "iroh-base", - "iroh-metrics", - "lru", - "n0-error", - "n0-future", - "noq", - "noq-proto", - "num_enum", - "pin-project", - "pkarr", - "postcard", - "rand 0.9.2", - "reqwest", - "rustls", - "rustls-pki-types", - "serde", - "serde_bytes", - "strum 0.28.0", - "tokio", - "tokio-rustls", - "tokio-util", - "tokio-websockets", - "tracing", - "url", - "vergen-gitcl", - "webpki-roots", - "ws_stream_wasm", - "z32", -] - -[[package]] -name = "irpc" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f47b7c52662d673df377b5ac40c121c7ff56eb764e520fae6543686132f7957" -dependencies = [ - "futures-util", - "irpc-derive", - "n0-error", - "n0-future", - "serde", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "irpc-derive" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c1a4b460634aeed6dc01236a0047867de70e30562d91a0ad031dcb3ac33fb4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "jiff" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" -dependencies = [ - "jiff-static", - "jiff-tzdb-platform", - "log", - "portable-atomic", - "portable-atomic-util", - "serde_core", - "windows-sys 0.61.2", -] - -[[package]] -name = "jiff-static" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "jiff-tzdb" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" - -[[package]] -name = "jiff-tzdb-platform" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" -dependencies = [ - "jiff-tzdb", -] - -[[package]] -name = "js-sys" -version = "0.3.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" -dependencies = [ - "cfg-if", - "futures-util", - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "kasuari" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" -dependencies = [ - "hashbrown 0.16.1", - "portable-atomic", - "thiserror 2.0.18", -] - -[[package]] -name = "lab" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - -[[package]] -name = "libc" -version = "0.2.184" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[package]] -name = "libredox" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" -dependencies = [ - "libc", -] - -[[package]] -name = "libudev" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0" -dependencies = [ - "libc", - "libudev-sys", -] - -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "line-clipping" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8" -dependencies = [ - "bitflags 2.11.0", -] - -[[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - -[[package]] -name = "litemap" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" - -[[package]] -name = "litrs" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "loom" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "lru" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" -dependencies = [ - "hashbrown 0.16.1", -] - -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - -[[package]] -name = "mac-addr" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d25b0e0b648a86960ac23b7ad4abb9717601dec6f66c165f5b037f3f03065f" - -[[package]] -name = "mac_address" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" -dependencies = [ - "nix 0.29.0", - "winapi", -] - -[[package]] -name = "mach2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" -dependencies = [ - "libc", -] - -[[package]] -name = "mainline" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff27d378ca495eaf3be8616d5d7319c1c18e93fd60e13698fcdc7e19448f1a4" -dependencies = [ - "crc", - "document-features", - "dyn-clone", - "ed25519-dalek", - "flume", - "futures-lite", - "getrandom 0.3.4", - "lru", - "serde", - "serde_bencode", - "serde_bytes", - "sha1_smol", - "thiserror 2.0.18", - "tracing", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "memmem" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "mio" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "moka" -version = "0.12.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" -dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "parking_lot", - "portable-atomic", - "smallvec", - "tagptr", - "uuid", -] - -[[package]] -name = "n0-error" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4782b4baf92d686d161c15460c83d16ebcfd215918763903e9619842665cae" -dependencies = [ - "anyhow", - "n0-error-macros", - "spez", -] - -[[package]] -name = "n0-error-macros" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03755949235714b2b307e5ae89dd8c1c2531fb127d9b8b7b4adf9c876cd3ed18" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "n0-future" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ab99dfb861450e68853d34ae665243a88b8c493d01ba957321a1e9b2312bbe" -dependencies = [ - "cfg_aliases", - "derive_more", - "futures-buffered", - "futures-lite", - "futures-util", - "js-sys", - "pin-project", - "send_wrapper", - "tokio", - "tokio-util", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-time", -] - -[[package]] -name = "n0-watcher" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38795f7932e6e9d1c6e989270ef5b3ff24ebb910e2c9d4bed2d28d8bae3007dc" -dependencies = [ - "derive_more", - "n0-error", - "n0-future", -] - -[[package]] -name = "netdev" -version = "0.40.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b0a0096d9613ee878dba89bbe595f079d373e3f1960d882e4f2f78ff9c30a0a" -dependencies = [ - "block2", - "dispatch2", - "dlopen2", - "ipnet", - "libc", - "mac-addr", - "netlink-packet-core", - "netlink-packet-route", - "netlink-sys", - "objc2-core-foundation", - "objc2-system-configuration", - "once_cell", - "plist", - "windows-sys 0.59.0", -] - -[[package]] -name = "netlink-packet-core" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" -dependencies = [ - "paste", -] - -[[package]] -name = "netlink-packet-route" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9854ea6ad14e3f4698a7f03b65bce0833dd2d81d594a0e4a984170537146b6" -dependencies = [ - "bitflags 2.11.0", - "libc", - "log", - "netlink-packet-core", -] - -[[package]] -name = "netlink-proto" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror 2.0.18", -] - -[[package]] -name = "netlink-sys" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" -dependencies = [ - "bytes", - "futures-util", - "libc", - "log", - "tokio", -] - -[[package]] -name = "netwatch" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1b27babe89ef9f2237bc6c028bea24fa84163a1b6f8f17ff93573ebd7d861f" -dependencies = [ - "atomic-waker", - "bytes", - "cfg_aliases", - "derive_more", - "js-sys", - "libc", - "n0-error", - "n0-future", - "n0-watcher", - "netdev", - "netlink-packet-core", - "netlink-packet-route", - "netlink-proto", - "netlink-sys", - "noq-udp", - "objc2-core-foundation", - "objc2-system-configuration", - "pin-project-lite", - "serde", - "socket2", - "time", - "tokio", - "tokio-util", - "tracing", - "web-sys", - "windows", - "windows-result", - "wmi", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "noq" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df966fb44ac763bc86da97fa6c811c54ae82ef656575949f93c6dae0c9f09bf" -dependencies = [ - "bytes", - "cfg_aliases", - "noq-proto", - "noq-udp", - "pin-project-lite", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.18", - "tokio", - "tokio-stream", - "tracing", - "web-time", -] - -[[package]] -name = "noq-proto" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c61b72abd670eebc05b5cf720e077b04a3ef3354bc7bc19f1c3524cb424db7b" -dependencies = [ - "aes-gcm", - "bytes", - "derive_more", - "enum-assoc", - "fastbloom", - "getrandom 0.3.4", - "identity-hash", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "sorted-index-buffer", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "noq-udp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb9be4fedd6b98f3ba82ccd3506f4d0219fb723c3f97c67e12fe1494aa020e44" -dependencies = [ - "cfg_aliases", - "libc", - "socket2", - "tracing", - "windows-sys 0.61.2", -] - -[[package]] -name = "ntimestamp" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50f94c405726d3e0095e89e72f75ce7f6587b94a8bd8dc8054b73f65c0fd68c" -dependencies = [ - "base32", - "document-features", - "getrandom 0.2.17", - "httpdate", - "js-sys", - "once_cell", - "serde", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num-conv" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" - -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_enum" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "objc2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.11.0", - "block2", - "dispatch2", - "libc", - "objc2", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-security" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" -dependencies = [ - "bitflags 2.11.0", - "objc2", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-system-configuration" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" -dependencies = [ - "bitflags 2.11.0", - "dispatch2", - "libc", - "objc2", - "objc2-core-foundation", - "objc2-security", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits", -] - -[[package]] -name = "papaya" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "997ee03cd38c01469a7046643714f0ad28880bcb9e6679ff0666e24817ca19b7" -dependencies = [ - "equivalent", - "seize", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pem-rfc7468" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pest" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "pest_meta" -version = "2.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" -dependencies = [ - "pest", - "sha2 0.10.9", -] - -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "pkarr" -version = "5.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bfb9143bbba379f246211eb68074d78db9cc048e4c5701f3b0e6cb1ec67ca2" -dependencies = [ - "base32", - "bytes", - "cfg_aliases", - "document-features", - "ed25519-dalek", - "getrandom 0.4.2", - "ntimestamp", - "self_cell", - "serde", - "simple-dns", - "thiserror 2.0.18", -] - -[[package]] -name = "pkcs8" -version = "0.11.0-rc.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12922b6296c06eb741b02d7b5161e3aaa22864af38dfa025a1a3ba3f68c84577" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "plist" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" -dependencies = [ - "base64", - "indexmap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "portable-atomic" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" -dependencies = [ - "serde", -] - -[[package]] -name = "portable-atomic-util" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "portmapper" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74748bc706fa6b6aebac6bbe0bbe0de806b384cb5c557ea974f771360a4e3858" -dependencies = [ - "base64", - "bytes", - "derive_more", - "futures-lite", - "futures-util", - "hyper-util", - "igd-next", - "iroh-metrics", - "libc", - "n0-error", - "netwatch", - "num_enum", - "rand 0.9.2", - "serde", - "smallvec", - "socket2", - "time", - "tokio", - "tokio-util", - "tower-layer", - "tracing", - "url", -] - -[[package]] -name = "postcard" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" -dependencies = [ - "cobs", - "embedded-io 0.4.0", - "embedded-io 0.6.1", - "heapless", - "postcard-derive", - "serde", -] - -[[package]] -name = "postcard-derive" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "potential_utf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" -dependencies = [ - "zerovec", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - -[[package]] -name = "proc-macro-crate" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proptest" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" -dependencies = [ - "bit-set 0.8.0", - "bit-vec 0.8.0", - "bitflags 2.11.0", - "num-traits", - "rand 0.9.2", - "rand_chacha", - "rand_xorshift", - "regex-syntax", - "rusty-fork", - "tempfile", - "unarray", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", -] - -[[package]] -name = "quinn" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash", - "rustls", - "socket2", - "thiserror 2.0.18", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" -dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.2", - "ring", - "rustc-hash", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.60.2", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", -] - -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.5", -] - -[[package]] -name = "ratatui" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc" -dependencies = [ - "instability", - "ratatui-core", - "ratatui-crossterm", - "ratatui-macros", - "ratatui-termwiz", - "ratatui-widgets", -] - -[[package]] -name = "ratatui-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293" -dependencies = [ - "bitflags 2.11.0", - "compact_str", - "hashbrown 0.16.1", - "indoc", - "itertools", - "kasuari", - "lru", - "strum 0.27.2", - "thiserror 2.0.18", - "unicode-segmentation", - "unicode-truncate", - "unicode-width", -] - -[[package]] -name = "ratatui-crossterm" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3" -dependencies = [ - "cfg-if", - "crossterm", - "instability", - "ratatui-core", -] - -[[package]] -name = "ratatui-macros" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4" -dependencies = [ - "ratatui-core", - "ratatui-widgets", -] - -[[package]] -name = "ratatui-termwiz" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c" -dependencies = [ - "ratatui-core", - "termwiz", -] - -[[package]] -name = "ratatui-widgets" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db" -dependencies = [ - "bitflags 2.11.0", - "hashbrown 0.16.1", - "indoc", - "instability", - "itertools", - "line-clipping", - "ratatui-core", - "strum 0.27.2", - "time", - "unicode-segmentation", - "unicode-width", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.11.0", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 2.0.18", -] - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "reqwest" -version = "0.12.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" -dependencies = [ - "base64", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tokio-util", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", -] - -[[package]] -name = "resolv-conf" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustc-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" -dependencies = [ - "bitflags 2.11.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.23.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pki-types" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "rusty-fork" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" -dependencies = [ - "fnv", - "quick-error", - "tempfile", - "wait-timeout", -] - -[[package]] -name = "ryu" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "seize" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b55fb86dfd3a2f5f76ea78310a88f96c4ea21a3031f8d212443d56123fd0521" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "self_cell" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_bencode" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a70dfc7b7438b99896e7f8992363ab8e2c4ba26aa5ec675d32d1c3c2c33d413e" -dependencies = [ - "serde", - "serde_bytes", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_spanned" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serialport" -version = "4.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d91116f97173694f1642263b2ff837f80d933aa837e2314969f6728f661df3" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "core-foundation", - "core-foundation-sys", - "io-kit-sys", - "libudev", - "mach2", - "nix 0.26.4", - "scopeguard", - "unescaper", - "windows-sys 0.52.0", -] - -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.11.0-rc.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1e3878ab0f98e35b2df35fe53201d088299b41a6bb63e3e34dada2ac4abd924" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.11.0-rc.10", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" -dependencies = [ - "libc", - "mio", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "signature" -version = "3.0.0-rc.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f1880df446116126965eeec169136b2e0251dba37c6223bcc819569550edea3" - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - -[[package]] -name = "simple-dns" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df350943049174c4ae8ced56c604e28270258faec12a6a48637a7655287c9ce0" -dependencies = [ - "bitflags 2.11.0", -] - -[[package]] -name = "siphasher" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "socket2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "sorted-index-buffer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea06cc588e43c632923a55450401b8f25e628131571d4e1baea1bdfdb2b5ed06" - -[[package]] -name = "spez" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87e960f4dca2788eeb86bbdde8dd246be8948790b7618d656e68f9b720a86e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spin" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" - -[[package]] -name = "spki" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9efca8738c78ee9484207732f728b1ef517bbb1833d6fc0879ca898a522f6f" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" -dependencies = [ - "strum_macros 0.27.2", -] - -[[package]] -name = "strum" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" -dependencies = [ - "strum_macros 0.28.0", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "strum_macros" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "tempfile" -version = "3.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" -dependencies = [ - "fastrand", - "getrandom 0.4.2", - "once_cell", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "terminfo" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" -dependencies = [ - "fnv", - "nom", - "phf", - "phf_codegen", -] - -[[package]] -name = "termios" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" -dependencies = [ - "libc", -] - -[[package]] -name = "termwiz" -version = "0.23.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" -dependencies = [ - "anyhow", - "base64", - "bitflags 2.11.0", - "fancy-regex", - "filedescriptor", - "finl_unicode", - "fixedbitset 0.4.2", - "hex", - "lazy_static", - "libc", - "log", - "memmem", - "nix 0.29.0", - "num-derive", - "num-traits", - "ordered-float", - "pest", - "pest_derive", - "phf", - "sha2 0.10.9", - "signal-hook", - "siphasher", - "terminfo", - "termios", - "thiserror 1.0.69", - "ucd-trie", - "unicode-segmentation", - "vtparse", - "wezterm-bidi", - "wezterm-blob-leases", - "wezterm-color-types", - "wezterm-dynamic", - "wezterm-input-types", - "winapi", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl 2.0.18", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "js-sys", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tinystr" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tinyvec" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bd1c4c0fc4a7ab90fc15ef6daaa3ec3b893f004f915f2392557ed23237820cd" -dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", - "tokio-util", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-websockets" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1b6348ebfaaecd771cecb69e832961d277f59845d4220a584701f72728152b7" -dependencies = [ - "base64", - "bytes", - "futures-core", - "futures-sink", - "getrandom 0.3.4", - "http", - "httparse", - "rand 0.9.2", - "ring", - "rustls-pki-types", - "simdutf8", - "tokio", - "tokio-rustls", - "tokio-util", -] - -[[package]] -name = "toml" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" -dependencies = [ - "indexmap", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", -] - -[[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.25.10+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_writer" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" -dependencies = [ - "bitflags 2.11.0", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-appender" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf" -dependencies = [ - "crossbeam-channel", - "thiserror 2.0.18", - "time", - "tracing-subscriber", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "ucobs" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "311fbab511bafd13c109aff41f67d4c4426bf919a6670647e69f0d2af95ac01d" - -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - -[[package]] -name = "unescaper" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4064ed685c487dbc25bd3f0e9548f2e34bab9d18cefc700f9ec2dba74ba1138e" -dependencies = [ - "thiserror 2.0.18", -] - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "unicode-segmentation" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-truncate" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" -dependencies = [ - "itertools", - "unicode-segmentation", - "unicode-width", -] - -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common 0.1.7", - "subtle", -] - -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", - "serde_derive", -] - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "uuid" -version = "1.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" -dependencies = [ - "atomic", - "getrandom 0.4.2", - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "vergen" -version = "9.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", - "vergen-lib 9.1.0", -] - -[[package]] -name = "vergen-gitcl" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", - "time", - "vergen", - "vergen-lib 0.1.6", -] - -[[package]] -name = "vergen-lib" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", -] - -[[package]] -name = "vergen-lib" -version = "9.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" -dependencies = [ - "anyhow", - "derive_builder", - "rustversion", -] - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "vtparse" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "wait-timeout" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" -dependencies = [ - "libc", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.2+wasi-0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 2.0.117", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.0", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - -[[package]] -name = "web-sys" -version = "0.3.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "wezterm-bidi" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" -dependencies = [ - "log", - "wezterm-dynamic", -] - -[[package]] -name = "wezterm-blob-leases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" -dependencies = [ - "getrandom 0.3.4", - "mac_address", - "sha2 0.10.9", - "thiserror 1.0.69", - "uuid", -] - -[[package]] -name = "wezterm-color-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" -dependencies = [ - "csscolorparser", - "deltae", - "lazy_static", - "wezterm-dynamic", -] - -[[package]] -name = "wezterm-dynamic" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" -dependencies = [ - "log", - "ordered-float", - "strsim", - "thiserror 1.0.69", - "wezterm-dynamic-derive", -] - -[[package]] -name = "wezterm-dynamic-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "wezterm-input-types" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" -dependencies = [ - "bitflags 1.3.2", - "euclid", - "lazy_static", - "serde", - "wezterm-dynamic", -] - -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" -dependencies = [ - "windows-collections", - "windows-core", - "windows-future", - "windows-numerics", -] - -[[package]] -name = "windows-collections" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" -dependencies = [ - "windows-core", -] - -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-future" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" -dependencies = [ - "windows-core", - "windows-link", - "windows-threading", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-numerics" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" -dependencies = [ - "windows-core", - "windows-link", -] - -[[package]] -name = "windows-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" -dependencies = [ - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-result" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows-threading" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winnow" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.0", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - -[[package]] -name = "wmi" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c81b85c57a57500e56669586496bf2abd5cf082b9d32995251185d105208b64" -dependencies = [ - "chrono", - "futures", - "log", - "serde", - "thiserror 2.0.18", - "windows", - "windows-core", -] - -[[package]] -name = "writeable" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" - -[[package]] -name = "ws_stream_wasm" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version", - "send_wrapper", - "thiserror 2.0.18", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "xml-rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" - -[[package]] -name = "xmltree" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" -dependencies = [ - "xml-rs", -] - -[[package]] -name = "yoke" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - -[[package]] -name = "z32" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2164e798d9e3d84ee2c91139ace54638059a3b23e361f5c11781c2c6459bde0f" - -[[package]] -name = "zerocopy" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zerofrom" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zerotrie" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index e621aa7..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,54 +0,0 @@ -[package] -name = "donglora-bridge" -version = "0.2.3" -edition = "2024" -authors = ["Stephen Waits "] -license = "MIT" -description = "Peer-to-peer LoRa bridge using iroh and DongLoRa" -repository = "https://github.com/swaits/donglora-bridge" -homepage = "https://github.com/swaits/donglora-bridge" -keywords = ["lora", "bridge", "gossip", "p2p", "iot"] -categories = ["network-programming", "command-line-utilities"] -readme = "README.md" -rust-version = "1.94.1" -exclude = [".jj/", ".github/"] - -[dependencies] -donglora-client = "0.1" -iroh = "0.97" -iroh-gossip = "0.97" -mainline = { version = "6", features = ["async"] } -tokio = { version = "1", features = ["full"] } -clap = { version = "4", features = ["derive"] } -serde = { version = "1", features = ["derive"] } -toml = "1" -blake3 = "1" -ratatui = "0.30" -crossterm = "0.29" -tracing = "0.1" -tracing-subscriber = { version = "0.3", features = ["env-filter"] } -tracing-appender = "0.2" -anyhow = "1" -dirs = "6" -bytes = "1" -futures-lite = "2" -rand = "0.9" -hex = "0.4.3" -sha2 = "0.10" -tokio-util = { version = "0.7.18", features = ["rt"] } -jiff = "0.2.23" -zeroize = "1" - -[dev-dependencies] -proptest = "1" -tempfile = "3" - -[lints.clippy] -pedantic = { level = "warn", priority = -1 } -nursery = { level = "warn", priority = -1 } -unwrap_used = "deny" -expect_used = "deny" -panic = "deny" -similar_names = "allow" -module_name_repetitions = "allow" -missing_errors_doc = "allow" diff --git a/LICENSE b/LICENSE deleted file mode 100644 index a4ad6f1..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 Stephen Waits - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 0238f4e..b05140d 100644 --- a/README.md +++ b/README.md @@ -1,293 +1,25 @@ -# donglora-bridge +# donglora-bridge has moved -[![CI](https://github.com/swaits/donglora-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/swaits/donglora-bridge/actions/workflows/ci.yml) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -![Rust](https://img.shields.io/badge/rust-1.94.1%2B-orange) +This repository has moved to the +[**donglora** GitHub organization](https://github.com/donglora): -**donglora-bridge** relays raw LoRa packets over the internet. Every packet your -radio hears is forwarded to every other bridge running the same passphrase, and -their radios retransmit it locally. Because it operates on raw packets, it works -with any protocol built on LoRa -- -[Meshtastic](https://meshtastic.org/), -[MeshCore](https://github.com/rocketgithub/meshcore-firmware), -or anything else -- simultaneously and without configuration. If your radio can -hear it, the bridge will relay it. +**[donglora/bridge](https://github.com/donglora/bridge)** -[LoRa](https://en.wikipedia.org/wiki/LoRa) is a long-range, low-power wireless -modulation used by off-grid mesh networks. A single radio might cover a few -kilometers. This bridge removes that limit, extending a local LoRa network -across a larger geographic area. +donglora-bridge connects LoRa radios to the internet so packets heard by +one radio can be retransmitted by another radio anywhere in the world. +Bridges discover each other via the Mainline DHT and communicate through +an encrypted peer-to-peer gossip swarm — no central server required. -There is no central server. Bridges discover each other automatically using the -[Mainline DHT](https://en.wikipedia.org/wiki/Mainline_DHT) and communicate -through an encrypted peer-to-peer gossip swarm. +## Other DongLoRa repos -![TUI Screenshot](screenshot.png) +| What | Location | +|------|----------| +| Firmware | [donglora/firmware](https://github.com/donglora/firmware) | +| Rust client library | [donglora/client-rs](https://github.com/donglora/client-rs) | +| Python client library | [donglora/client-py](https://github.com/donglora/client-py) | +| Rust mux daemon | [donglora/mux-rs](https://github.com/donglora/mux-rs) | +| Python mux daemon | [donglora/mux-py](https://github.com/donglora/mux-py) | +| MeshCore AI bot | [donglora/ai-bot](https://github.com/donglora/ai-bot) | +| Example scripts | [donglora/examples](https://github.com/donglora/examples) | -## What you need - -### 1. A DongLoRa radio - -[DongLoRa](https://github.com/swaits/donglora) is open-source firmware that -turns a supported LoRa development board (such as a Heltec WiFi LoRa 32 or -similar ESP32+SX1262 board) into a USB LoRa dongle. You will need to: - -1. **Get a board** -- any ESP32 board with an SX1262 LoRa radio that DongLoRa - supports. See the [DongLoRa README](https://github.com/swaits/donglora) for - the full list. -2. **Flash the DongLoRa firmware** onto the board. Instructions are in the - DongLoRa repository. -3. **Plug it in via USB**. The board appears as a serial device - (e.g. `/dev/ttyACM0` on Linux). - -### 2. (Optional) donglora-mux - -The bridge works fine without the mux -- it connects directly to the USB device. -The mux is only needed if you want multiple programs to share a single DongLoRa -radio at the same time (e.g. running two bridges with different configs, or a -bridge alongside another donglora-client program). - -```sh -cargo install donglora-mux -``` - -Run `donglora-mux` before starting the bridge. The bridge auto-detects the mux -when it's running and falls back to direct USB serial when it's not. - -### 3. donglora-bridge (this project) - -Install via cargo: - -```sh -cargo install donglora-bridge -``` - -Or via [mise](https://mise.jdx.dev/): - -```sh -mise use -g cargo:donglora-bridge -``` - -Or build from source: - -```sh -git clone https://github.com/swaits/donglora-bridge.git -cd donglora-bridge -cargo build --release -``` - -Requires Linux. macOS may work but is untested. - -## Quick start - -### 1. Plug in your DongLoRa board and (optionally) start the mux - -```sh -donglora-mux # optional -- skip if not sharing the radio -``` - -### 2. Run the bridge - -```sh -donglora-bridge -``` - -On first run, an interactive wizard walks you through configuration: - -- **Passphrase** (required) -- every bridge using the same passphrase joins the - same network. Pick something unique to your group. -- **Radio settings** -- frequency, bandwidth, spreading factor, etc. The - defaults match MeshCore US/Canada recommended values. If you're bridging a - MeshCore network, just press Enter through these. - -The config is saved to `~/.config/donglora-bridge/config.toml`. To change it -later, run `donglora-bridge config`. - -### 3. That's it - -The TUI shows real-time stats. On another machine (or continent), repeat the -same steps with the same passphrase. The two bridges will discover each other -via DHT and start relaying packets within seconds. - -```sh -donglora-bridge # TUI mode (default) -donglora-bridge --log-only # headless mode (structured logs to stdout) -donglora-bridge --config path.toml # custom config file -donglora-bridge config # re-run setup wizard -``` - -### Running multiple bridges - -To run more than one bridge on the same machine (e.g. bridging two separate -MeshCore networks), create a config file per bridge and run each with -`--config`: - -```sh -donglora-bridge --config ~/bridge-network-a.toml -donglora-bridge --config ~/bridge-network-b.toml -``` - -Each config can specify a different passphrase, different radio settings, and -(if using the mux) share the same radio. Without the mux, each bridge needs its -own USB dongle and an explicit `port` in its config to avoid both trying to open -the same device. - -## Features - -- **Gossip swarm** -- broadcast packets via [iroh-gossip](https://github.com/n0-computer/iroh), a QUIC-based overlay network -- **Zero-config peer discovery** -- automatic bootstrapping via BitTorrent mainline DHT ([BEP44](http://bittorrent.org/beps/bep_0044.html) mutable items) -- **Content-hash deduplication** -- blake3 hashing suppresses duplicate packets across all bridges -- **Air-time-aware rate limiting** -- token bucket calculated from LoRa radio parameters (Semtech LoRa time-on-air formula) -- **Real-time terminal UI** -- network status, radio config, packet log, activity sparklines -- **Resilient radio connection** -- exponential backoff reconnection with liveness pings -- **Headless mode** -- structured logs to stdout for servers (`--log-only`) -- **Interactive setup wizard** -- guided first-run configuration -- **Shared passphrase security** -- all cryptographic keys derived deterministically from a single passphrase - -## TUI overview - -| Panel | Content | -|-------|---------| -| **Network** | Topic ID, peer count, DHT status, last publish time | -| **Radio** | Device, frequency, bandwidth, SF, CR, sync word, TX power, preamble, CAD | -| **Stats** | Uptime, RF/Net RX/TX, dedup hits, rate limit drops, queue drops | -| **Packet Log** | Scrolling log: age, hash, RF/Net direction, size, RSSI, SNR, action | -| **Activity** | Sparkline charts: RX rate, TX rate, average SNR (1-second buckets, 5-minute window) | - -Press `q` or `Ctrl+C` to shut down gracefully. - -## Configuration - -Default location: `~/.config/donglora-bridge/config.toml` - -```toml -[radio] -# port = "/dev/ttyACM0" # serial port (omit for auto-detect: tries mux, then USB) -frequency = 910525000 # Hz (default: 910.525 MHz) -bandwidth = "62.5kHz" # 7.8kHz, 10.4kHz, 15.6kHz, 20.8kHz, 31.25kHz, - # 41.7kHz, 62.5kHz, 125kHz, 250kHz, 500kHz -spreading_factor = 7 # 7-12 -coding_rate = 5 # 5-8 (meaning 4/5 to 4/8) -sync_word = 0x3444 # hex, 2 bytes -tx_power = "22" # dBm integer or "max" -preamble = 16 # symbols -cad = true # channel activity detection - -[bridge] -passphrase = "your-shared-secret" # REQUIRED: all bridges with same passphrase join the same swarm -dedup_window_secs = 300 # duplicate suppression window (default: 5 minutes) -tx_queue_size = 32 # max pending radio TX packets -# rate_limit_pps = 5.0 # optional: override calculated TX rate (packets/sec) -# log_file = "/path/to/bridge.log" # optional: override log path -``` - -Default radio settings match MeshCore US/Canada recommended parameters. - -## How it works - -### Passphrase key derivation - -A single passphrase deterministically derives three values: - -1. **Topic ID** -- `blake3(APP_PREFIX + passphrase)` -- identifies the gossip swarm -2. **DHT signing key** -- ed25519 from `SHA-256(APP_PREFIX + "sign:" + passphrase)` -- authenticates DHT records -3. **DHT salt** -- first 20 bytes of `SHA-256(APP_PREFIX + "salt:" + passphrase)` -- namespaces the DHT key - -All nodes with the same passphrase compute identical keys and automatically join -the same network. - -### Gossip swarm - -Each bridge creates an ephemeral iroh endpoint (fresh ed25519 identity per -launch) and subscribes to the derived topic. Radio packets are wrapped in a -`GossipFrame` (32-byte sender ID + RSSI + SNR + payload) and broadcast to all -neighbors. Received frames are decoded and queued for radio transmission. - -### DHT peer discovery - -Peers find each other through BitTorrent's mainline DHT using BEP44 mutable -items. Peer lists are encoded as `[count:u16 LE][id:32B]...` (max 27 peers per -record to stay under the 1000-byte value limit). - -**When alone** (no neighbors): reads DHT every 3 seconds, merge-publishes every -30 seconds (preserves existing peers, never destructive). - -**When connected**: relaxed 5-minute heartbeat with random jitter. Publishes -self + live neighbors only (purges stale peers). - -**On shutdown**: publishes neighbors without self, so other nodes can still -bootstrap from live peers. - -### Deduplication - -Every packet payload is hashed with blake3 (32 bytes). A time-bounded cache -(default 300s, pruned every 30s) suppresses duplicates from both radio and -gossip directions. - -### Rate limiting - -A token bucket rate limiter prevents radio channel saturation. The rate is -calculated from the LoRa air time formula (Semtech SX1276): - -``` -air_time = preamble_time + payload_symbol_count * symbol_time -rate = 0.5 / air_time (50% duty cycle target) -``` - -Default burst allowance is 3 packets. The rate can be manually overridden with -`rate_limit_pps` in the config. - -### Radio communication - -A dedicated blocking thread communicates with the DongLoRa hardware via -`donglora-client`. Features: - -- **Config negotiation**: reads existing config first; only sets if needed -- **Exponential backoff reconnection**: 250ms to 5s, resets after 5s of uptime -- **Liveness pings**: every 2s of idle, detects silently-dead connections -- **SNR filtering**: drops packets below the demodulation floor - -### Architecture - -``` - ┌─────────────────────────────────────┐ - │ donglora-bridge │ - │ │ - DongLoRa ┌────────┐│ ┌────────┐ ┌──────┐ ┌───────┐ │ Internet - USB dongle◄─┤ Radio ├┤◄─┤ Router ├──►│Gossip├──►│ iroh ├──┤◄──► Other - │ Thread ││─►│ (dedup ││ │Swarm │ │ QUIC │ │ Bridges - └────────┘│ │ rate ││ └──┬───┘ └───────┘ │ - │ │ limit)│| │ │ - │ └────────┘│ ┌──┴───┐ │ - │ ▲ │ │ DHT │ │ - │ │ │ │(peer │ │ - │ ┌──┴──┐ │ │disc.)│ │ - │ │ TUI │ │ └──────┘ │ - │ └─────┘ │ │ - └─────────────────────────────────────┘ -``` - -## Testing - -```sh -cargo test # unit tests + property tests (proptest) -cargo clippy --all-targets # lint check (pedantic + nursery) -cargo fmt --check # format check -cargo mutants # mutation testing (install: cargo install cargo-mutants) -cargo +nightly fuzz run fuzz_gossip_frame_decode # fuzz testing (requires nightly) -cargo +nightly fuzz run fuzz_decode_peer_list -``` - -## Troubleshooting - -| Symptom | Cause | Fix | -|---------|-------|-----| -| "passphrase is required" | Empty or placeholder passphrase | Run `donglora-bridge config` | -| No peers found | Passphrase mismatch or firewall | Check passphrase matches; iroh uses QUIC (UDP), DHT uses UDP | -| Radio disconnected | USB dongle unplugged or mux crash | Check USB connection; bridge will auto-reconnect | -| Yellow `!` on radio fields | Mux has different radio config | Another client set different params; bridge adopts mux config | -| Log file location | Default path | `~/.local/state/donglora-bridge/bridge.log` | - -## License - -[MIT](LICENSE) +This repo is archived and will not receive further updates. diff --git a/deny.toml b/deny.toml deleted file mode 100644 index 9ca5fb5..0000000 --- a/deny.toml +++ /dev/null @@ -1,39 +0,0 @@ -# cargo-deny configuration (v0.19+) -# Run with: cargo deny check - -[licenses] -version = 2 - -# Permissive licenses only. No copyleft. -allow = [ - "MIT", - "MIT-0", - "Apache-2.0", - "BSD-1-Clause", - "BSD-2-Clause", - "BSD-3-Clause", - "BSL-1.0", - "ISC", - "Zlib", - "Unlicense", - "CC0-1.0", - "CDLA-Permissive-2.0", - "Unicode-3.0", - "MPL-2.0", -] - -[advisories] -# Unmaintained transitive deps from upstream (iroh dep tree) — not actionable by us. -ignore = [ - "RUSTSEC-2023-0089", # atomic-polyfill: unmaintained (transitive via iroh) - "RUSTSEC-2024-0436", # paste: unmaintained (transitive via iroh) -] - -[bans] -multiple-versions = "warn" -wildcards = "warn" - -[sources] -unknown-registry = "deny" -unknown-git = "warn" -allow-git = [] diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml deleted file mode 100644 index 8540953..0000000 --- a/fuzz/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "donglora-bridge-fuzz" -version = "0.0.0" -publish = false -edition = "2024" - -[package.metadata] -cargo-fuzz = true - -[dependencies] -libfuzzer-sys = "0.4" - -[dependencies.donglora-bridge] -path = ".." - -[[bin]] -name = "fuzz_gossip_frame_decode" -path = "fuzz_targets/fuzz_gossip_frame_decode.rs" -doc = false - -[[bin]] -name = "fuzz_decode_peer_list" -path = "fuzz_targets/fuzz_decode_peer_list.rs" -doc = false - -[workspace] diff --git a/fuzz/fuzz_targets/fuzz_decode_peer_list.rs b/fuzz/fuzz_targets/fuzz_decode_peer_list.rs deleted file mode 100644 index 7a1ff40..0000000 --- a/fuzz/fuzz_targets/fuzz_decode_peer_list.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![no_main] -use libfuzzer_sys::fuzz_target; - -fuzz_target!(|data: &[u8]| { - // decode_peer_list must never panic on arbitrary input. - let _ = donglora_bridge::gossip::decode_peer_list(data); -}); diff --git a/fuzz/fuzz_targets/fuzz_gossip_frame_decode.rs b/fuzz/fuzz_targets/fuzz_gossip_frame_decode.rs deleted file mode 100644 index fecc055..0000000 --- a/fuzz/fuzz_targets/fuzz_gossip_frame_decode.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![no_main] -use libfuzzer_sys::fuzz_target; - -fuzz_target!(|data: &[u8]| { - // GossipFrame::decode must never panic on arbitrary input. - let _ = donglora_bridge::packet::GossipFrame::decode(data); -}); diff --git a/justfile b/justfile deleted file mode 100644 index 6fd73c7..0000000 --- a/justfile +++ /dev/null @@ -1,69 +0,0 @@ -set shell := ["bash", "-c"] - -default: build - -[private] -_ensure_tools: - @mise trust --yes . 2>/dev/null; mise install --quiet - -# Run the bridge (TUI mode) -run *args: _ensure_tools - cargo run --release -- {{args}} - -# Run in headless mode -run-headless *args: _ensure_tools - cargo run --release -- --log-only {{args}} - -# Run the config wizard -config: _ensure_tools - cargo run --release -- config - -# Run all checks (fmt, clippy, test, audit) -check: fmt-check clippy test audit - -# Format code -fmt: _ensure_tools - cargo fmt - -# Check formatting without changing files -fmt-check: _ensure_tools - cargo fmt --check - -# Lint with clippy -clippy: _ensure_tools - cargo clippy --all-targets -- -D warnings - -# Run all tests -test: test-unit - -# Normal unit tests -test-unit: _ensure_tools - cargo nextest run - -# Mutation testing -test-mutants *args: _ensure_tools - cargo mutants {{args}} - -# Fuzz a target (requires nightly) -test-fuzz TARGET="fuzz_gossip_frame_decode" DURATION="60": _ensure_tools - cargo +nightly fuzz run {{TARGET}} -- -max_total_time={{DURATION}} - -# Security + license audit -audit: _ensure_tools - cargo deny check - -# Build release binary -build: _ensure_tools - cargo build --release - -# Generate docs -doc: _ensure_tools - cargo doc --no-deps --open - -# Check for outdated dependencies -outdated: _ensure_tools - cargo outdated - -# Clean build artifacts -clean: - cargo clean diff --git a/mise.toml b/mise.toml deleted file mode 100644 index 35d983c..0000000 --- a/mise.toml +++ /dev/null @@ -1,3 +0,0 @@ -[tools] -rust = "1.94" -just = "latest" diff --git a/rustfmt.toml b/rustfmt.toml deleted file mode 100644 index 3139ac8..0000000 --- a/rustfmt.toml +++ /dev/null @@ -1,3 +0,0 @@ -edition = "2024" -max_width = 120 -use_small_heuristics = "Max" diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 09b9af735626b358f2c3294aef5aae48c3dbd189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191678 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