diff --git a/Cargo.lock b/Cargo.lock index 936bbe872..51bde88ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,14 +3,10 @@ version = 4 [[package]] -name = "aead" -version = "0.5.2" +name = "adler2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aes" @@ -20,21 +16,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", -] - -[[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", + "cpufeatures 0.2.17", ] [[package]] @@ -44,7 +26,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", + "getrandom 0.3.4", "once_cell", + "serde", "version_check", "zerocopy", ] @@ -64,6 +48,15 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "android-build" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cac4c64175d504608cf239756339c07f6384a476f97f20a7043f92920b0b8fd" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -80,7 +73,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", - "anstyle-parse", + "anstyle-parse 0.2.7", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse 1.0.0", "anstyle-query", "anstyle-wincon", "colorchoice", @@ -103,6 +111,15 @@ dependencies = [ "utf8parse", ] +[[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" @@ -136,10 +153,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] -name = "arrayref" -version = "0.3.9" +name = "array-init" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" [[package]] name = "asn1-rs" @@ -150,10 +167,10 @@ dependencies = [ "asn1-rs-derive", "asn1-rs-impl", "displaydoc", - "nom", + "nom 7.1.3", "num-traits", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -180,42 +197,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "asn1_der" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" - -[[package]] -name = "async-channel" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-io" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" -dependencies = [ - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "windows-sys 0.61.2", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -249,65 +230,12 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "asynchronous-codec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite", -] - -[[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 = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base256emoji" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" -dependencies = [ - "const-str", - "match-lookup", -] - [[package]] name = "base64" version = "0.22.1" @@ -316,35 +244,47 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] -name = "bimap" +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[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-vec" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit-vec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" dependencies = [ - "digest", + "serde_core", ] [[package]] @@ -357,12 +297,14 @@ dependencies = [ ] [[package]] -name = "bs58" -version = "0.5.1" +name = "bloomfilter" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "c541c70a910b485670304fd420f0eab8f7bde68439db6a8d98819c3d2774d7e2" dependencies = [ - "tinyvec", + "bit-vec 0.7.0", + "getrandom 0.2.16", + "siphasher", ] [[package]] @@ -371,6 +313,12 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +[[package]] +name = "bytecount" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" + [[package]] name = "byteorder" version = "1.5.0" @@ -382,18 +330,6 @@ name = "bytes" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" -dependencies = [ - "serde", -] - -[[package]] -name = "cbor4ii" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "472931dd4dfcc785075b09be910147f9c6258883fc4591d0dac6116392b2daa6" -dependencies = [ - "serde", -] [[package]] name = "cc" @@ -405,6 +341,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-if" version = "1.0.4" @@ -419,26 +361,13 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", + "cpufeatures 0.3.0", + "rand_core 0.10.1", ] [[package]] @@ -450,6 +379,7 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", "windows-link", ] @@ -462,7 +392,6 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", - "zeroize", ] [[package]] @@ -480,7 +409,7 @@ version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ - "anstream", + "anstream 0.6.21", "anstyle", "clap_lex", "strsim", @@ -498,6 +427,16 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -514,16 +453,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "const-str" -version = "0.4.3" +name = "const_format" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" +checksum = "4481a617ad9a412be3b97c5d403fef8ed023103368908b9c50af598ff467cc1e" +dependencies = [ + "const_format_proc_macros", + "konst", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -535,15 +489,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -554,10 +499,35 @@ dependencies = [ ] [[package]] -name = "critical-section" -version = "1.2.0" +name = "cpufeatures" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] [[package]] name = "crossbeam-channel" @@ -587,6 +557,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -599,18 +578,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "crypto-common" version = "0.1.7" @@ -618,93 +585,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", - "rand_core 0.6.4", "typenum", ] [[package]] -name = "ctr" -version = "0.9.2" +name = "darling" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "cipher", + "darling_core", + "darling_macro", ] [[package]] -name = "cuckoofilter" -version = "0.5.0" +name = "darling_core" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b810a8449931679f64cd7eef1bbd0fa315801b6d5d9cdc1ace2804d6529eee18" -dependencies = [ - "byteorder", - "fnv", - "rand 0.7.3", -] - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ + "ident_case", "proc-macro2", "quote", + "strsim", + "syn 2.0.111", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", "syn 2.0.111", ] [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" - -[[package]] -name = "data-encoding-macro" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" -dependencies = [ - "data-encoding", - "syn 2.0.111", -] - -[[package]] -name = "delegate" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "der" @@ -725,7 +647,7 @@ checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" dependencies = [ "asn1-rs", "displaydoc", - "nom", + "nom 7.1.3", "num-bigint", "num-traits", "rusticata-macros", @@ -733,11 +655,33 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", + "serde_core", +] + +[[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 = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.111", ] [[package]] @@ -752,6 +696,27 @@ dependencies = [ "subtle", ] +[[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 = "displaydoc" version = "0.2.5" @@ -764,48 +729,10 @@ dependencies = [ ] [[package]] -name = "dtoa" -version = "1.0.10" +name = "dyn-clone" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "serde", - "sha2", - "subtle", - "zeroize", -] +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" @@ -813,43 +740,11 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pem-rfc7468", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - -[[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.111", -] - [[package]] name = "env_filter" -version = "0.1.4" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", "regex", @@ -857,11 +752,11 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ - "anstream", + "anstream 1.0.0", "anstyle", "env_filter", "jiff", @@ -874,16 +769,6 @@ 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 = "event-listener" version = "5.4.1" @@ -895,25 +780,13 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener", - "pin-project-lite", -] - [[package]] name = "exo_pyo3_bindings" version = "0.0.1" dependencies = [ - "delegate", "env_logger", "extend", "futures-lite", - "libp2p", "log", "networking", "pidfile-rs", @@ -922,9 +795,10 @@ dependencies = [ "pyo3-async-runtimes", "pyo3-log", "pyo3-stub-gen", - "thiserror 2.0.17", + "rand 0.10.1", "tokio", - "util", + "zenoh", + "zerompk", ] [[package]] @@ -938,34 +812,57 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "fancy-regex" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" +dependencies = [ + "bit-set", + "regex-automata", + "regex-syntax", +] + +[[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.4", + "siphasher", +] + [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - [[package]] name = "find-msvc-tools" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "flopen" version = "0.1.3" @@ -977,10 +874,16 @@ dependencies = [ ] [[package]] -name = "fnv" -version = "1.0.7" +name = "flume" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin 0.9.8", +] [[package]] name = "foldhash" @@ -988,6 +891,12 @@ 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" @@ -997,6 +906,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fraction" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872" +dependencies = [ + "lazy_static", + "num", +] + [[package]] name = "futures" version = "0.3.31" @@ -1012,16 +931,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-bounded" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" -dependencies = [ - "futures-timer", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.31" @@ -1047,7 +956,6 @@ dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", ] [[package]] @@ -1080,17 +988,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "futures-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" -dependencies = [ - "futures-io", - "rustls", - "rustls-pki-types", -] - [[package]] name = "futures-sink" version = "0.3.31" @@ -1103,16 +1000,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] - [[package]] name = "futures-util" version = "0.3.31" @@ -1139,7 +1026,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -1151,17 +1037,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.16" @@ -1171,7 +1046,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -1184,62 +1059,50 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] [[package]] -name = "ghash" -version = "0.5.1" +name = "getrandom" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ - "opaque-debug", - "polyval", + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasip2", + "wasip3", ] [[package]] -name = "gloo-timers" -version = "0.2.6" +name = "git-version" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "1ad568aa3db0fcbc81f2f116137f263d7304f512a1209b35b85150d3ef88ad19" dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "git-version-macro", ] [[package]] -name = "group" -version = "0.13.0" +name = "git-version-macro" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] -name = "h2" -version = "0.4.12" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" @@ -1248,6 +1111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", + "allocator-api2", ] [[package]] @@ -1256,9 +1120,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -1266,14 +1128,10 @@ name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ - "hashbrown 0.14.5", + "allocator-api2", + "equivalent", + "foldhash 0.2.0", ] [[package]] @@ -1294,68 +1152,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hex_fmt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" - -[[package]] -name = "hickory-proto" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna", - "ipnet", - "once_cell", - "rand 0.9.2", - "ring", - "socket2 0.5.10", - "thiserror 2.0.17", - "tinyvec", - "tokio", - "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", - "smallvec", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - [[package]] name = "hmac" version = "0.12.1" @@ -1365,6 +1161,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "http" version = "1.4.0" @@ -1375,29 +1180,6 @@ dependencies = [ "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" @@ -1405,47 +1187,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "hyper" -version = "1.8.1" +name = "humantime" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-util" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "libc", - "pin-project-lite", - "socket2 0.6.1", - "tokio", - "tower-service", - "tracing", -] +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "iana-time-zone" @@ -1459,7 +1204,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core", ] [[package]] @@ -1519,9 +1264,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -1533,9 +1278,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -1552,6 +1297,18 @@ dependencies = [ "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 = "idna" version = "1.1.0" @@ -1574,57 +1331,14 @@ dependencies = [ ] [[package]] -name = "if-addrs" -version = "0.10.2" +name = "indexmap" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "if-watch" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" -dependencies = [ - "async-io", - "core-foundation", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-proto", - "netlink-sys", - "rtnetlink", - "system-configuration", - "tokio", - "windows 0.53.0", -] - -[[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", + "autocfg", + "hashbrown 0.12.3", + "serde", ] [[package]] @@ -1635,6 +1349,8 @@ checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -1665,23 +1381,14 @@ dependencies = [ ] [[package]] -name = "ipconfig" -version = "0.3.2" +name = "ipnetwork" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" dependencies = [ - "socket2 0.5.10", - "widestring", - "windows-sys 0.48.0", - "winreg", + "serde", ] -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - [[package]] name = "is-macro" version = "0.3.7" @@ -1700,6 +1407,15 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +[[package]] +name = "iso8601" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1082f0c48f143442a1ac6122f67e360ceee130b967af4d50996e5154a45df46" +dependencies = [ + "nom 8.0.0", +] + [[package]] name = "itertools" version = "0.11.0" @@ -1720,15 +1436,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.16" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", "log", @@ -1739,15 +1455,89 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.16" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", "syn 2.0.111", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.18", + "walkdir", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.111", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.111", +] + [[package]] name = "js-sys" version = "0.3.83" @@ -1759,33 +1549,76 @@ dependencies = [ ] [[package]] -name = "k256" -version = "0.13.4" +name = "json5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonschema" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2eef4e82b548e08ac880d307c8e8838b45f497a08d3202f3b26c9debaed8058" +dependencies = [ + "ahash", + "anyhow", + "base64", + "bytecount", + "fancy-regex", + "fraction", + "getrandom 0.2.16", + "iso8601", + "itoa", + "memchr", + "num-cmp", "once_cell", - "sha2", - "signature", + "parking_lot", + "percent-encoding", + "regex", + "serde", + "serde_json", + "time", + "url", + "uuid-simd", ] [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] -name = "keccak-const" -version = "0.2.0" +name = "keyed-set" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d8d8ce877200136358e0bbff3a77965875db3af755a11e1fa6b1b3e2df13ea" +checksum = "89d255a6b6ecd77bb93ce91de984d7039bff7503f500eb4851a1269732f22baf" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "konst" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128133ed7824fcd73d6e7b17957c5eb7bacb885649bd8c69708b2331a10bcefb" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" [[package]] name = "lalrpop-util" @@ -1798,6 +1631,15 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" @@ -1806,727 +1648,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] -name = "libp2p" -version = "0.56.0" +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce71348bf5838e46449ae240631117b487073d5f347c06d434caddcb91dceb5a" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ - "bytes", - "either", - "futures", - "futures-timer", - "getrandom 0.2.16", - "libp2p-allow-block-list", - "libp2p-autonat", - "libp2p-connection-limits", - "libp2p-core", - "libp2p-dcutr", - "libp2p-dns", - "libp2p-floodsub", - "libp2p-gossipsub", - "libp2p-identify", - "libp2p-identity", - "libp2p-kad", - "libp2p-mdns", - "libp2p-memory-connection-limits", - "libp2p-metrics", - "libp2p-noise", - "libp2p-ping", - "libp2p-plaintext", - "libp2p-pnet", - "libp2p-quic", - "libp2p-relay", - "libp2p-rendezvous", - "libp2p-request-response", - "libp2p-swarm", - "libp2p-tcp", - "libp2p-tls", - "libp2p-uds", - "libp2p-upnp", - "libp2p-webrtc-websys", - "libp2p-websocket", - "libp2p-websocket-websys", - "libp2p-webtransport-websys", - "libp2p-yamux", - "multiaddr", - "pin-project", - "rw-stream-sink", - "thiserror 2.0.17", + "cfg-if", + "windows-link", ] [[package]] -name = "libp2p-allow-block-list" -version = "0.6.0" +name = "libm" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16ccf824ee859ca83df301e1c0205270206223fd4b1f2e512a693e1912a8f4a" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", -] +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] -name = "libp2p-autonat" -version = "0.15.0" +name = "libredox" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fab5e25c49a7d48dac83d95d8f3bac0a290d8a5df717012f6e34ce9886396c0b" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "async-trait", - "asynchronous-codec", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-request-response", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "rand_core 0.6.4", - "thiserror 2.0.17", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-connection-limits" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18b8b607cf3bfa2f8c57db9c7d8569a315d5cc0a282e6bfd5ebfc0a9840b2a0" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", -] - -[[package]] -name = "libp2p-core" -version = "0.43.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d28e2d2def7c344170f5c6450c0dbe3dfef655610dbfde2f6ac28a527abbe36" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "libp2p-identity", - "multiaddr", - "multihash", - "multistream-select", - "parking_lot", - "pin-project", - "quick-protobuf", - "rand 0.8.5", - "rw-stream-sink", - "thiserror 2.0.17", - "tracing", - "unsigned-varint 0.8.0", - "web-time", -] - -[[package]] -name = "libp2p-dcutr" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4f0eec23bc79cabfdf6934718f161fc42a1d98e2c9d44007c80eb91534200c" -dependencies = [ - "asynchronous-codec", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "lru", - "quick-protobuf", - "quick-protobuf-codec", - "thiserror 2.0.17", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-dns" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b770c1c8476736ca98c578cba4b505104ff8e842c2876b528925f9766379f9a" -dependencies = [ - "async-trait", - "futures", - "hickory-resolver", - "libp2p-core", - "libp2p-identity", - "parking_lot", - "smallvec", - "tracing", -] - -[[package]] -name = "libp2p-floodsub" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0914997f56315c83bc64ffb721cd4e764ad819370582db287232c5791469697" -dependencies = [ - "asynchronous-codec", - "bytes", - "cuckoofilter", - "fnv", - "futures", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "smallvec", - "thiserror 2.0.17", - "tracing", -] - -[[package]] -name = "libp2p-gossipsub" -version = "0.49.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f58e37d8d6848e5c4c9e3c35c6f61133235bff2960c9c00a663b0849301221" -dependencies = [ - "async-channel", - "asynchronous-codec", - "base64", - "byteorder", - "bytes", - "either", - "fnv", - "futures", - "futures-timer", - "getrandom 0.2.16", - "hashlink", - "hex_fmt", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "regex", - "serde", - "sha2", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-identify" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab792a8b68fdef443a62155b01970c81c3aadab5e659621b063ef252a8e65e8" -dependencies = [ - "asynchronous-codec", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "smallvec", - "thiserror 2.0.17", - "tracing", -] - -[[package]] -name = "libp2p-identity" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" -dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "hkdf", - "k256", - "multihash", - "p256", - "quick-protobuf", - "rand 0.8.5", - "ring", - "sec1", - "serde", - "sha2", - "thiserror 2.0.17", - "tracing", - "zeroize", -] - -[[package]] -name = "libp2p-kad" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d3fd632a5872ec804d37e7413ceea20588f69d027a0fa3c46f82574f4dee60" -dependencies = [ - "asynchronous-codec", - "bytes", - "either", - "fnv", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "serde", - "sha2", - "smallvec", - "thiserror 2.0.17", - "tracing", - "uint", - "web-time", -] - -[[package]] -name = "libp2p-mdns" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66872d0f1ffcded2788683f76931be1c52e27f343edb93bc6d0bcd8887be443" -dependencies = [ - "futures", - "hickory-proto", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "smallvec", - "socket2 0.5.10", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-memory-connection-limits" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d052a767edd0235d5c29dacf46013955eabce1085781ce0d12a4fc66bf87cd" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "memory-stats", - "sysinfo", - "tracing", -] - -[[package]] -name = "libp2p-metrics" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805a555148522cb3414493a5153451910cb1a146c53ffbf4385708349baf62b7" -dependencies = [ - "futures", - "libp2p-core", - "libp2p-dcutr", - "libp2p-gossipsub", - "libp2p-identify", - "libp2p-identity", - "libp2p-kad", - "libp2p-ping", - "libp2p-relay", - "libp2p-swarm", - "pin-project", - "prometheus-client", - "web-time", -] - -[[package]] -name = "libp2p-noise" -version = "0.46.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc73eacbe6462a0eb92a6527cac6e63f02026e5407f8831bde8293f19217bfbf" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "libp2p-identity", - "multiaddr", - "multihash", - "quick-protobuf", - "rand 0.8.5", - "snow", - "static_assertions", - "thiserror 2.0.17", - "tracing", - "x25519-dalek", - "zeroize", -] - -[[package]] -name = "libp2p-ping" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74bb7fcdfd9fead4144a3859da0b49576f171a8c8c7c0bfc7c541921d25e60d3" -dependencies = [ - "futures", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-plaintext" -version = "0.43.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e659439578fc6d305da8303834beb9d62f155f40e7f5b9d81c9f2b2c69d1926" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "libp2p-identity", - "quick-protobuf", - "quick-protobuf-codec", - "tracing", -] - -[[package]] -name = "libp2p-pnet" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf240b834dfa3f8b48feb2c4b87bb2cf82751543001b6ee86077f48183b18d52" -dependencies = [ - "futures", - "pin-project", - "rand 0.8.5", - "salsa20", - "sha3", - "tracing", -] - -[[package]] -name = "libp2p-quic" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc448b2de9f4745784e3751fe8bc6c473d01b8317edd5ababcb0dec803d843f" -dependencies = [ - "futures", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-tls", - "quinn", - "rand 0.8.5", - "ring", - "rustls", - "socket2 0.5.10", - "thiserror 2.0.17", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-relay" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551b24ae04c63859bf5e25644acdd6aa469deb5c5cd872ca21c2c9b45a5a5192" -dependencies = [ - "asynchronous-codec", - "bytes", - "either", - "futures", - "futures-bounded", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "static_assertions", - "thiserror 2.0.17", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-rendezvous" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15285d828c2b4a34cb660c2e74cd6938116daceab1f4357bae933d5b08cca933" -dependencies = [ - "async-trait", - "asynchronous-codec", - "bimap", - "futures", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-request-response", - "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "thiserror 2.0.17", - "tracing", - "web-time", -] - -[[package]] -name = "libp2p-request-response" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f1cca83488b90102abac7b67d5c36fc65bc02ed47620228af7ed002e6a1478" -dependencies = [ - "async-trait", - "cbor4ii", - "futures", - "futures-bounded", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand 0.8.5", - "serde", - "serde_json", - "smallvec", - "tracing", -] - -[[package]] -name = "libp2p-swarm" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aa762e5215919a34e31c35d4b18bf2e18566ecab7f8a3d39535f4a3068f8b62" -dependencies = [ - "either", - "fnv", - "futures", - "futures-timer", - "getrandom 0.2.16", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm-derive", - "lru", - "multistream-select", - "rand 0.8.5", - "smallvec", - "tokio", - "tracing", - "wasm-bindgen-futures", - "web-time", -] - -[[package]] -name = "libp2p-swarm-derive" -version = "0.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" -dependencies = [ - "heck", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "libp2p-tcp" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4e030c52c46c8d01559b2b8ca9b7c4185f10576016853129ca1fe5cd1a644" -dependencies = [ - "futures", - "futures-timer", - "if-watch", "libc", - "libp2p-core", - "socket2 0.5.10", - "tokio", - "tracing", ] -[[package]] -name = "libp2p-tls" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ff65a82e35375cbc31ebb99cacbbf28cb6c4fefe26bf13756ddcf708d40080" -dependencies = [ - "futures", - "futures-rustls", - "libp2p-core", - "libp2p-identity", - "rcgen", - "ring", - "rustls", - "rustls-webpki", - "thiserror 2.0.17", - "x509-parser", - "yasna", -] - -[[package]] -name = "libp2p-uds" -version = "0.43.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0413aa7a1cc51c409358186a46a198ad9195a782dae6b9a95ea3acf5db67569d" -dependencies = [ - "futures", - "libp2p-core", - "tracing", -] - -[[package]] -name = "libp2p-upnp" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4757e65fe69399c1a243bbb90ec1ae5a2114b907467bf09f3575e899815bb8d3" -dependencies = [ - "futures", - "futures-timer", - "igd-next", - "libp2p-core", - "libp2p-swarm", - "tokio", - "tracing", -] - -[[package]] -name = "libp2p-webrtc-utils" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490abff5ee5f9a7a77f0145c79cc97c76941231a3626f4dee18ebf2abb95618f" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "hex", - "libp2p-core", - "libp2p-identity", - "libp2p-noise", - "quick-protobuf", - "quick-protobuf-codec", - "rand 0.8.5", - "serde", - "sha2", - "tinytemplate", - "tracing", -] - -[[package]] -name = "libp2p-webrtc-websys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3830f0bf6f0f16ded2c735599fe70baea43a8c1a2d76152216693329217301dd" -dependencies = [ - "bytes", - "futures", - "getrandom 0.2.16", - "hex", - "js-sys", - "libp2p-core", - "libp2p-identity", - "libp2p-webrtc-utils", - "send_wrapper 0.6.0", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "libp2p-websocket" -version = "0.45.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520e29066a48674c007bc11defe5dce49908c24cafd8fad2f5e1a6a8726ced53" -dependencies = [ - "either", - "futures", - "futures-rustls", - "libp2p-core", - "libp2p-identity", - "parking_lot", - "pin-project-lite", - "rw-stream-sink", - "soketto", - "thiserror 2.0.17", - "tracing", - "url", - "webpki-roots 0.26.11", -] - -[[package]] -name = "libp2p-websocket-websys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e73d85b4dc8c2044f58508461bd8bb12f541217c0038ade8cce0ddc1607b8f72" -dependencies = [ - "bytes", - "futures", - "js-sys", - "libp2p-core", - "send_wrapper 0.6.0", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "libp2p-webtransport-websys" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34bc528d7fa278e1324a88978114a610deaa9e75c8e2230cd868321c512b3f43" -dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "libp2p-identity", - "libp2p-noise", - "multiaddr", - "multihash", - "send_wrapper 0.6.0", - "thiserror 2.0.17", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "libp2p-yamux" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f15df094914eb4af272acf9adaa9e287baa269943f32ea348ba29cfb9bfc60d8" -dependencies = [ - "either", - "futures", - "libp2p-core", - "thiserror 2.0.17", - "tracing", - "yamux 0.12.1", - "yamux 0.13.8", -] - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" @@ -2543,38 +1693,27 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" -dependencies = [ - "hashbrown 0.15.5", -] - [[package]] name = "lru-slab" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +[[package]] +name = "lz4_flex" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b8c72594ac26bfd34f2d99dfced2edfaddfe8a476e3ff2ca0eb293d925c4f83" +dependencies = [ + "twox-hash", +] + [[package]] name = "maplit" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" -[[package]] -name = "match-lookup" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "matchers" version = "0.2.0" @@ -2609,22 +1748,22 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memory-stats" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c73f5c649995a115e1a0220b35e4df0a1294500477f97a91d0660fb5abeb574a" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "mio" version = "1.1.1" @@ -2632,82 +1771,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] [[package]] -name = "moka" -version = "0.12.11" +name = "nanorand" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "parking_lot", - "portable-atomic", - "rustc_version", - "smallvec", - "tagptr", - "uuid", -] - -[[package]] -name = "multiaddr" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "libp2p-identity", - "multibase", - "multihash", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint 0.8.0", - "url", -] - -[[package]] -name = "multibase" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" -dependencies = [ - "base-x", - "base256emoji", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "multihash" -version = "0.19.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" -dependencies = [ - "core2", - "serde", - "unsigned-varint 0.8.0", -] - -[[package]] -name = "multistream-select" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" -dependencies = [ - "bytes", - "futures", - "log", - "pin-project", - "smallvec", - "unsigned-varint 0.7.2", + "getrandom 0.2.16", ] [[package]] @@ -2726,67 +1800,23 @@ dependencies = [ ] [[package]] -name = "netlink-packet-core" -version = "0.7.0" +name = "ndk-context" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" -dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", -] +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] -name = "netlink-packet-route" -version = "0.17.1" +name = "netwatcher" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +checksum = "95d7c19cc408a3fc0d98df79271070334dfaa3aed94217ed5043523a5741ba5f" dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", -] - -[[package]] -name = "netlink-proto" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror 2.0.17", -] - -[[package]] -name = "netlink-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" -dependencies = [ - "bytes", - "futures", - "libc", - "log", + "android-build", + "jni 0.22.4", + "ndk-context", + "nix 0.31.2", "tokio", + "windows", ] [[package]] @@ -2794,28 +1824,28 @@ name = "networking" version = "0.0.1" dependencies = [ "async-stream", - "delegate", - "either", - "extend", "futures-lite", - "futures-timer", - "keccak-const", - "libp2p", "log", - "pin-project", + "netwatcher", + "parking_lot", + "rand 0.10.1", "tokio", - "tracing-subscriber", - "util", + "tracing", + "zenoh", + "zenoh-plugin-storage-manager", + "zenoh-plugin-trait", + "zerompk", ] [[package]] name = "nix" -version = "0.26.4" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cfg-if", + "cfg_aliases", "libc", ] @@ -2825,17 +1855,18 @@ version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" dependencies = [ - "bitflags 2.10.0", + "bitflags", "cfg-if", "cfg_aliases", "libc", + "memoffset", ] [[package]] -name = "nohash-hasher" -version = "0.2.0" +name = "no-std-net" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" [[package]] name = "nom" @@ -2848,12 +1879,21 @@ dependencies = [ ] [[package]] -name = "ntapi" -version = "0.4.1" +name = "nom" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ - "winapi", + "memchr", +] + +[[package]] +name = "nonempty-collections" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e216d0e8cf9d54fa66e5780f6e1d5dc96d1c1b3c25aeba3b6758548bcbbd8b9d" +dependencies = [ + "serde", ] [[package]] @@ -2865,6 +1905,20 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -2875,6 +1929,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-cmp" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa" + [[package]] name = "num-complex" version = "0.4.6" @@ -2886,9 +1962,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-integer" @@ -2899,6 +1975,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2906,6 +2004,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2948,10 +2047,6 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "once_cell_polyfill" @@ -2960,10 +2055,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] -name = "opaque-debug" -version = "0.3.1" +name = "openssl-probe" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" @@ -2975,16 +2076,10 @@ dependencies = [ ] [[package]] -name = "p256" -version = "0.13.2" +name = "outref" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "parking" @@ -3046,13 +2141,79 @@ 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.111", +] + +[[package]] +name = "pest_meta" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" +dependencies = [ + "pest", + "sha2", +] + +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset", + "hashbrown 0.15.5", + "indexmap 2.12.1", + "serde", +] + [[package]] name = "phf" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "phf_shared", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared 0.13.1", + "serde", ] [[package]] @@ -3061,8 +2222,8 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator", - "phf_shared", + "phf_generator 0.11.3", + "phf_shared 0.11.3", ] [[package]] @@ -3071,10 +2232,33 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared", + "phf_shared 0.11.3", "rand 0.8.5", ] +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "phf_shared" version = "0.11.3" @@ -3084,6 +2268,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + [[package]] name = "pidfile-rs" version = "0.3.1" @@ -3127,6 +2320,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -3138,40 +2342,35 @@ dependencies = [ ] [[package]] -name = "polling" -version = "3.11.0" +name = "pnet_base" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix", - "windows-sys 0.61.2", + "no-std-net", ] [[package]] -name = "poly1305" -version = "0.8.0" +name = "pnet_datalink" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7" dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", + "ipnetwork", + "libc", + "pnet_base", + "pnet_sys", + "winapi", ] [[package]] -name = "polyval" -version = "0.6.2" +name = "pnet_sys" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b" dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", + "libc", + "winapi", ] [[package]] @@ -3214,12 +2413,22 @@ dependencies = [ ] [[package]] -name = "primeorder" -version = "0.13.6" +name = "prettyplease" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ - "elliptic-curve", + "proc-macro2", + "syn 2.0.111", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit", ] [[package]] @@ -3231,29 +2440,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prometheus-client" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf41c1a7c32ed72abe5082fb19505b969095c12da9f5732a4bc9878757fd087c" -dependencies = [ - "dtoa", - "itoa", - "parking_lot", - "prometheus-client-derive-encode", -] - -[[package]] -name = "prometheus-client-derive-encode" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "pyo3" version = "0.27.2" @@ -3362,7 +2548,7 @@ dependencies = [ "anyhow", "chrono", "either", - "indexmap", + "indexmap 2.12.1", "inventory", "itertools 0.14.0", "log", @@ -3383,35 +2569,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2426ba759d848787239d80f9fdb1f223786976f87fb6c3da8188ca7c17744b28" dependencies = [ "heck", - "indexmap", + "indexmap 2.12.1", "proc-macro2", "quote", "rustpython-parser", "syn 2.0.111", ] -[[package]] -name = "quick-protobuf" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" -dependencies = [ - "byteorder", -] - -[[package]] -name = "quick-protobuf-codec" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" -dependencies = [ - "asynchronous-codec", - "bytes", - "quick-protobuf", - "thiserror 1.0.69", - "unsigned-varint 0.8.0", -] - [[package]] name = "quinn" version = "0.11.9" @@ -3420,14 +2584,13 @@ checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", - "futures-io", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", "rustls", "socket2 0.6.1", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -3435,20 +2598,22 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "bytes", + "fastbloom", "getrandom 0.3.4", "lru-slab", - "rand 0.9.2", + "rand 0.9.4", "ring", "rustc-hash 2.1.1", "rustls", "rustls-pki-types", + "rustls-platform-verifier", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -3484,17 +2649,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "rand" -version = "0.7.3" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" @@ -3509,22 +2667,23 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] -name = "rand_chacha" -version = "0.2.2" +name = "rand" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "chacha20", + "getrandom 0.4.2", + "rand_core 0.10.1", ] [[package]] @@ -3544,16 +2703,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core 0.9.5", ] [[package]] @@ -3567,21 +2717,18 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] [[package]] -name = "rand_hc" -version = "0.2.0" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rawpointer" @@ -3589,36 +2736,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "rcgen" -version = "0.13.2" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" +checksum = "10b99e0098aa4082912d4c649628623db6aba77335e4f4569ff5083a6448b32e" dependencies = [ "pem", "ring", "rustls-pki-types", "time", + "x509-parser", "yasna", ] @@ -3628,14 +2756,45 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -3660,22 +2819,6 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" -[[package]] -name = "resolv-conf" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - [[package]] name = "ring" version = "0.17.14" @@ -3691,21 +2834,47 @@ dependencies = [ ] [[package]] -name = "rtnetlink" -version = "0.13.1" +name = "ringbuffer-spsc" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +checksum = "8d3e7aa0a681b232e7cd7f856a53b10603df88ca74b79a8d8088845185492e35" dependencies = [ - "futures", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-packet-utils", - "netlink-proto", - "netlink-sys", - "nix 0.26.4", - "thiserror 1.0.69", - "tokio", + "array-init", + "crossbeam", +] + +[[package]] +name = "ron" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" +dependencies = [ + "bitflags", + "once_cell", + "serde", + "serde_derive", + "typeid", + "unicode-ident", +] + +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", ] [[package]] @@ -3735,28 +2904,16 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" dependencies = [ - "nom", -] - -[[package]] -name = "rustix" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", + "nom 7.1.3", ] [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -3766,20 +2923,68 @@ dependencies = [ ] [[package]] -name = "rustls-pki-types" -version = "1.13.1" +name = "rustls-native-certs" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "web-time", "zeroize", ] [[package]] -name = "rustls-webpki" -version = "0.103.8" +name = "rustls-platform-verifier" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni 0.21.1", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", @@ -3811,7 +3016,7 @@ dependencies = [ "log", "num-bigint", "num-traits", - "phf", + "phf 0.11.3", "phf_codegen", "rustc-hash 1.1.0", "rustpython-ast", @@ -3850,29 +3055,65 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] -name = "rw-stream-sink" -version = "0.4.0" +name = "ryu" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "futures", - "pin-project", - "static_assertions", + "winapi-util", ] [[package]] -name = "ryu" -version = "1.0.20" +name = "schannel" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] [[package]] -name = "salsa20" -version = "0.10.2" +name = "schemars" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" dependencies = [ - "cipher", + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "either", + "ref-cast", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.111", ] [[package]] @@ -3882,40 +3123,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "sec1" -version = "0.7.3" +name = "secrecy" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", + "serde", "zeroize", ] [[package]] -name = "semver" -version = "1.0.27" +name = "security-framework" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" - -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "futures-core", + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" version = "1.0.228" @@ -3947,16 +3192,27 @@ dependencies = [ ] [[package]] -name = "serde_json" -version = "1.0.145" +name = "serde_derive_internals" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -3968,6 +3224,50 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_with" +version = "3.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.12.1", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.12.1", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "sha1" version = "0.10.6" @@ -3975,7 +3275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -3986,15 +3286,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] [[package]] -name = "sha3" -version = "0.10.8" +name = "sha2-const-stable" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" + +[[package]] +name = "sha3" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" dependencies = [ "digest", "keccak", @@ -4009,6 +3315,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" +dependencies = [ + "dirs", +] + [[package]] name = "shlex" version = "1.3.0" @@ -4034,6 +3349,28 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "simd-adler32" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" + +[[package]] +name = "simd_cesu8" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "siphasher" version = "1.0.1" @@ -4052,23 +3389,6 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "snow" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" -dependencies = [ - "aes-gcm", - "blake2", - "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", - "ring", - "rustc_version", - "sha2", - "subtle", -] - [[package]] name = "socket2" version = "0.5.10" @@ -4090,20 +3410,20 @@ dependencies = [ ] [[package]] -name = "soketto" -version = "0.8.1" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e859df029d160cb88608f5d7df7fb4753fd20fdfb4de5644f3d8b8440841721" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ - "base64", - "bytes", - "futures", - "httparse", - "log", - "rand 0.8.5", - "sha1", + "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.7.3" @@ -4114,6 +3434,41 @@ dependencies = [ "der", ] +[[package]] +name = "stabby" +version = "72.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976399a0c48ea769ef7f5dc303bb88240ab8d84008647a6b2303eced3dab3945" +dependencies = [ + "rustversion", + "stabby-abi", +] + +[[package]] +name = "stabby-abi" +version = "72.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b54832a9a1f92a0e55e74a5c0332744426edc515bb3fbad82f10b874a87f0d" +dependencies = [ + "rustc_version", + "rustversion", + "sha2-const-stable", + "stabby-macros", +] + +[[package]] +name = "stabby-macros" +version = "72.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a768b1e51e4dbfa4fa52ae5c01241c0a41e2938fdffbb84add0c8238092f9091" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "rand 0.8.5", + "syn 1.0.109", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -4171,47 +3526,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "sysinfo" -version = "0.33.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" -dependencies = [ - "core-foundation-sys", - "libc", - "memchr", - "ntapi", - "rayon", - "windows 0.57.0", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags 2.10.0", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - [[package]] name = "target-lexicon" version = "0.13.3" @@ -4229,11 +3543,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -4249,9 +3563,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -4269,30 +3583,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -4317,21 +3631,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -4342,6 +3646,30 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tls-listener" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1461056cc1ef47003f7ee16e4cef3741068d4c7f6b627bfce49b7c00c120a530" +dependencies = [ + "futures-util", + "pin-project-lite", + "thiserror 2.0.18", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "token-cell" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb48920ae769b58126c8c93269805011c793201f95fde28b479b81a9a531bbde" +dependencies = [ + "paste", + "portable-atomic", + "rustversion", +] + [[package]] name = "tokio" version = "1.48.0" @@ -4372,14 +3700,37 @@ dependencies = [ ] [[package]] -name = "tokio-util" -version = "0.7.17" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[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", ] @@ -4390,7 +3741,7 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ - "indexmap", + "indexmap 2.12.1", "serde_core", "serde_spanned", "toml_datetime", @@ -4408,6 +3759,18 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_edit" +version = "0.23.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" +dependencies = [ + "indexmap 2.12.1", + "toml_datetime", + "toml_parser", + "winnow", +] + [[package]] name = "toml_parser" version = "1.0.4" @@ -4423,18 +3786,13 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" -[[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.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4453,9 +3811,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -4473,45 +3831,94 @@ dependencies = [ ] [[package]] -name = "tracing-subscriber" -version = "0.3.22" +name = "tracing-serde" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "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", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] -name = "try-lock" -version = "0.2.5" +name = "tungstenite" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha1", + "thiserror 1.0.69", + "utf-8", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] -name = "uint" -version = "0.10.0" +name = "ucd-trie" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909988d098b2f738727b161a106cfc7cab00c539c2687a8836f8e565976fb53e" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uhlc" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62a645e3e4e6c85b7abe49b086aa3204119431f42b6123b0070419fb6e9d24e" dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", + "humantime", + "lazy_static", + "log", + "rand 0.8.5", + "serde", + "spin 0.10.0", ] [[package]] @@ -4578,13 +3985,19 @@ 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 = "unicode_names2" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1673eca9782c84de5f81b82e4109dcfb3611c8ba0d52930ec4a9478f547b2dd" dependencies = [ - "phf", + "phf 0.11.3", "unicode_names2_generator", ] @@ -4607,26 +4020,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" [[package]] -name = "universal-hash" -version = "0.5.1" +name = "unsafe-libyaml" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] - -[[package]] -name = "unsigned-varint" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" - -[[package]] -name = "unsigned-varint" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "untrusted" @@ -4635,10 +4032,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "url" -version = "2.5.7" +name = "unzip-n" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "3b5bb2756c16fb66f80cfbf5fb0e0c09a7001e739f453c9ec241b9c8b1556fda" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -4646,6 +4054,12 @@ dependencies = [ "serde", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -4658,27 +4072,64 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "util" -version = "0.0.1" - [[package]] name = "uuid" -version = "1.19.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.2", "js-sys", "wasm-bindgen", ] +[[package]] +name = "uuid-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8" +dependencies = [ + "outref", + "uuid", + "vsimd", +] + +[[package]] +name = "validated_struct" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869a93e8a7286e339e1128630051d82babbcd75d585975af07b9f3327220e60e" +dependencies = [ + "json5", + "serde", + "serde_json", + "validated_struct_macros", +] + +[[package]] +name = "validated_struct_macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c44ce98e7227a04eeb4cf9c784109a5c9710e54849ceb4f09f8597247897f1e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", + "unzip-n", +] + [[package]] name = "valuable" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.5" @@ -4686,19 +4137,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "want" -version = "0.3.1" +name = "vsimd" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" [[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +name = "walkdir" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] [[package]] name = "wasi" @@ -4708,11 +4160,20 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", +] + +[[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 0.51.0", ] [[package]] @@ -4728,19 +4189,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.106" @@ -4774,13 +4222,37 @@ dependencies = [ ] [[package]] -name = "web-sys" -version = "0.3.83" +name = "wasm-encoder" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" dependencies = [ - "js-sys", - "wasm-bindgen", + "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 2.12.1", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap 2.12.1", + "semver", ] [[package]] @@ -4794,28 +4266,22 @@ dependencies = [ ] [[package]] -name = "webpki-roots" -version = "0.26.11" +name = "webpki-root-certs" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.4", -] - -[[package]] -name = "webpki-roots" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" dependencies = [ "rustls-pki-types", ] [[package]] -name = "widestring" -version = "1.2.1" +name = "webpki-roots" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "winapi" @@ -4833,6 +4299,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -4841,44 +4316,23 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.53.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-core 0.53.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", ] [[package]] -name = "windows" -version = "0.57.0" +name = "windows-collections" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" -dependencies = [ - "windows-result 0.1.2", - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-core" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" -dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", + "windows-core", ] [[package]] @@ -4887,22 +4341,22 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "windows-implement", + "windows-interface", "windows-link", - "windows-result 0.4.1", + "windows-result", "windows-strings", ] [[package]] -name = "windows-implement" -version = "0.57.0" +name = "windows-future" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", + "windows-core", + "windows-link", + "windows-threading", ] [[package]] @@ -4916,17 +4370,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "windows-interface" -version = "0.57.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "windows-interface" version = "0.59.3" @@ -4945,12 +4388,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-result" -version = "0.1.2" +name = "windows-numerics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", ] [[package]] @@ -4973,11 +4417,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.42.2", ] [[package]] @@ -5009,17 +4453,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -5056,10 +4500,19 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" +name = "windows-threading" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" @@ -5075,9 +4528,9 @@ checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -5093,9 +4546,9 @@ checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -5123,9 +4576,9 @@ checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -5141,9 +4594,9 @@ checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -5159,9 +4612,9 @@ checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" @@ -5177,9 +4630,9 @@ checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" @@ -5198,103 +4651,133 @@ name = "winnow" version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", ] [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - -[[package]] -name = "x25519-dalek" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", - "zeroize", + "wit-bindgen-rust-macro", ] [[package]] -name = "x509-parser" -version = "0.17.0" +name = "wit-bindgen" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[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 2.12.1", + "prettyplease", + "syn 2.0.111", + "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.111", + "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", + "indexmap 2.12.1", + "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 2.12.1", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "x509-parser" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" dependencies = [ "asn1-rs", "data-encoding", "der-parser", "lazy_static", - "nom", + "nom 7.1.3", "oid-registry", + "ring", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] [[package]] -name = "xml-rs" -version = "0.8.28" +name = "xxhash-rust" +version = "0.8.15" 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 = "yamux" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot", - "pin-project", - "rand 0.8.5", - "static_assertions", -] - -[[package]] -name = "yamux" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot", - "pin-project", - "rand 0.9.2", - "static_assertions", - "web-time", -] +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yasna" @@ -5328,6 +4811,563 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zenoh" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e22d7002ac149ef17fe400bb40a267ebbba40a83413bab03da7762256fa94e" +dependencies = [ + "ahash", + "arc-swap", + "async-trait", + "bytes", + "const_format", + "flate2", + "flume", + "futures", + "git-version", + "itertools 0.14.0", + "json5", + "lazy_static", + "nonempty-collections", + "once_cell", + "petgraph", + "phf 0.13.1", + "rand 0.8.5", + "rustc_version", + "serde", + "serde_json", + "socket2 0.5.10", + "tokio", + "tokio-util", + "tracing", + "uhlc", + "vec_map", + "zenoh-buffers", + "zenoh-codec", + "zenoh-collections", + "zenoh-config", + "zenoh-core", + "zenoh-keyexpr", + "zenoh-link", + "zenoh-link-commons", + "zenoh-macros", + "zenoh-plugin-trait", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-sync", + "zenoh-task", + "zenoh-transport", + "zenoh-util", +] + +[[package]] +name = "zenoh-buffers" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89c9e2427102e8efd533716f0935389a3900a818e7334004dd647ac0bd029dc" +dependencies = [ + "zenoh-collections", +] + +[[package]] +name = "zenoh-codec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31930531a8e387160bc3680c6d62f80a201020cf4d8aa36bd46988b425a66306" +dependencies = [ + "tracing", + "uhlc", + "zenoh-buffers", + "zenoh-protocol", +] + +[[package]] +name = "zenoh-collections" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fc5195efe3ad44786275f559bbd6f13c6612470e9706c9a9a8b5b47388d51e1" +dependencies = [ + "ahash", +] + +[[package]] +name = "zenoh-config" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8672f4eaf88fd486f0503c59d19edfc25e7dd689bccd90d3cb731a5f627e0df" +dependencies = [ + "json5", + "nonempty-collections", + "num_cpus", + "secrecy", + "serde", + "serde_json", + "serde_with", + "serde_yaml", + "toml", + "tracing", + "uhlc", + "validated_struct", + "zenoh-core", + "zenoh-keyexpr", + "zenoh-macros", + "zenoh-protocol", + "zenoh-result", + "zenoh-util", +] + +[[package]] +name = "zenoh-core" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1525319e4d9ef2af54fc9c74abf419236e32e6535081339321f3f55e2f34ce2f" +dependencies = [ + "lazy_static", + "tokio", + "zenoh-result", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-crypto" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b80a042fc71419fc4952a90c9cbcfb323c0ced048125d8b44fd362f184045f" +dependencies = [ + "aes", + "hmac", + "rand 0.8.5", + "rand_chacha 0.3.1", + "sha3", + "zenoh-result", +] + +[[package]] +name = "zenoh-keyexpr" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f04c82f0728f6704a1a397a04b38de5b2fd5a9a886a232cf650c9af294ba5d" +dependencies = [ + "getrandom 0.2.16", + "hashbrown 0.16.1", + "keyed-set", + "rand 0.8.5", + "schemars 1.2.1", + "serde", + "token-cell", + "zenoh-result", +] + +[[package]] +name = "zenoh-link" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a71103cfe96a851ef5ff781d64dda95c70e70208f74e186d6d294ba21e89cc64" +dependencies = [ + "zenoh-config", + "zenoh-link-commons", + "zenoh-link-quic", + "zenoh-link-quic_datagram", + "zenoh-link-tcp", + "zenoh-link-tls", + "zenoh-link-udp", + "zenoh-link-unixsock_stream", + "zenoh-link-ws", + "zenoh-protocol", + "zenoh-result", +] + +[[package]] +name = "zenoh-link-commons" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc91a5163793f842b4b016b2d50640db5a3533370348eb796e7078c576e87cf" +dependencies = [ + "async-trait", + "base64", + "bytes", + "flume", + "futures", + "quinn", + "quinn-proto", + "rcgen", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "rustls-webpki", + "secrecy", + "serde", + "socket2 0.5.10", + "time", + "tokio", + "tokio-util", + "tracing", + "webpki-roots", + "x509-parser", + "zenoh-buffers", + "zenoh-codec", + "zenoh-config", + "zenoh-core", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-util", +] + +[[package]] +name = "zenoh-link-quic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17d065833147be895b7091cc3e505433c2c8b3172e36c9e06e84a5779a4aa655" +dependencies = [ + "async-trait", + "rustls-webpki", + "time", + "tracing", + "zenoh-core", + "zenoh-link-commons", + "zenoh-link-quic_datagram", + "zenoh-protocol", + "zenoh-result", +] + +[[package]] +name = "zenoh-link-quic_datagram" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e81b15df31a3d0ddde9a4fb3fbc928e9a2a6d6a4de38bcf55badd3a5208947a4" +dependencies = [ + "async-trait", + "rustls-webpki", + "time", + "tokio-util", + "tracing", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", +] + +[[package]] +name = "zenoh-link-tcp" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e912ac36902173dfc295317e001dc630e5ac9a70c2780f2d2eac500b205a700" +dependencies = [ + "async-trait", + "socket2 0.5.10", + "tokio", + "tokio-util", + "tracing", + "zenoh-config", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", +] + +[[package]] +name = "zenoh-link-tls" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f6b308ae2599f9c1344fbcd3418b2c3a3a9fe287ec39501ba834168493ba37" +dependencies = [ + "async-trait", + "base64", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "rustls-webpki", + "secrecy", + "socket2 0.5.10", + "time", + "tls-listener", + "tokio", + "tokio-rustls", + "tokio-util", + "tracing", + "webpki-roots", + "x509-parser", + "zenoh-config", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-link-udp" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca106ca8c3b7625e7071b9d7408955726e994c8f35fd68e00de8ac58b185d52d" +dependencies = [ + "async-trait", + "libc", + "socket2 0.5.10", + "tokio", + "tokio-util", + "tracing", + "windows-sys 0.61.2", + "zenoh-buffers", + "zenoh-core", + "zenoh-link-commons", + "zenoh-link-quic_datagram", + "zenoh-protocol", + "zenoh-result", + "zenoh-sync", + "zenoh-util", +] + +[[package]] +name = "zenoh-link-unixsock_stream" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2b7f60cdb5ad771d1a4f8e2eda15529e96dbe81c0ad2c1015b4c194347676" +dependencies = [ + "async-trait", + "nix 0.29.0", + "tokio", + "tokio-util", + "tracing", + "uuid", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-link-ws" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a7fb54899f7fbdfc4fd02e647f9bba0d6e089cca4355acafb9499c510ebea79" +dependencies = [ + "async-trait", + "futures-util", + "tokio", + "tokio-tungstenite", + "tokio-util", + "tracing", + "url", + "zenoh-core", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-util", +] + +[[package]] +name = "zenoh-macros" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9310b02a8f6dc4bd04d9ce6b318b9d00182aeeeeca60410003307d63a2569a3f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", + "zenoh-keyexpr", +] + +[[package]] +name = "zenoh-plugin-storage-manager" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d9fd55c490af4dc4abb6d51b620ecf6f824a9285a1f9446b59eeec6d66ccf7" +dependencies = [ + "async-trait", + "bincode", + "bloomfilter", + "futures", + "git-version", + "jsonschema", + "lazy_static", + "rand 0.8.5", + "rustc_version", + "schemars 1.2.1", + "serde", + "serde_json", + "tokio", + "tracing", + "uuid", + "xxhash-rust", + "zenoh", + "zenoh-plugin-trait", + "zenoh-util", + "zenoh_backend_traits", +] + +[[package]] +name = "zenoh-plugin-trait" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e235815d14b22448aa1db948560328761530932fa7a2f9a3c14853b3f0267941" +dependencies = [ + "git-version", + "libloading", + "serde", + "stabby", + "tracing", + "zenoh-config", + "zenoh-keyexpr", + "zenoh-macros", + "zenoh-result", + "zenoh-util", +] + +[[package]] +name = "zenoh-protocol" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeab45020bbecc077f14f06ee8f5aee65ce760af72481e663cac58b5dbfa66dd" +dependencies = [ + "const_format", + "rand 0.8.5", + "serde", + "uhlc", + "zenoh-buffers", + "zenoh-keyexpr", + "zenoh-macros", + "zenoh-result", +] + +[[package]] +name = "zenoh-result" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca8e65b08f211833fe31cf38d73a48c6e1d6d900914e1ddd8cb176b3355b75b" +dependencies = [ + "anyhow", +] + +[[package]] +name = "zenoh-runtime" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd3d0c1558f909c9a74bde5e398c5733f81eb954818451baac2a6c09f48d6a5e" +dependencies = [ + "lazy_static", + "ron", + "serde", + "tokio", + "tracing", + "zenoh-macros", + "zenoh-result", +] + +[[package]] +name = "zenoh-sync" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9588f87db82b414a3e73d13312026be826332f53d270966e3e19f77f7fa1f06d" +dependencies = [ + "arc-swap", + "event-listener", + "futures", + "tokio", + "zenoh-buffers", + "zenoh-collections", + "zenoh-core", +] + +[[package]] +name = "zenoh-task" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e2ac601598a27152b366ba1c6825216f01f77bb898f719b7752099a3594ce72" +dependencies = [ + "futures", + "tokio", + "tokio-util", + "tracing", + "zenoh-core", + "zenoh-runtime", +] + +[[package]] +name = "zenoh-transport" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80800c4adc26dbe81418735068541cf39820a95ec988114f04dd014775ba7c97" +dependencies = [ + "async-trait", + "crossbeam-utils", + "flume", + "futures", + "lazy_static", + "lz4_flex", + "rand 0.8.5", + "ringbuffer-spsc", + "rsa", + "serde", + "sha3", + "tokio", + "tokio-util", + "tracing", + "zenoh-buffers", + "zenoh-codec", + "zenoh-config", + "zenoh-core", + "zenoh-crypto", + "zenoh-link", + "zenoh-link-commons", + "zenoh-protocol", + "zenoh-result", + "zenoh-runtime", + "zenoh-sync", + "zenoh-task", + "zenoh-util", +] + +[[package]] +name = "zenoh-util" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b10369df18a781a3e675c9a2cbf54adb44c9dc2a376c1014c5e488410df2179" +dependencies = [ + "async-trait", + "const_format", + "flume", + "home", + "humantime", + "lazy_static", + "libc", + "libloading", + "pnet_datalink", + "schemars 1.2.1", + "serde", + "serde_json", + "shellexpand", + "tokio", + "tracing", + "tracing-subscriber", + "winapi", + "zenoh-core", + "zenoh-result", +] + +[[package]] +name = "zenoh_backend_traits" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19c55377b34dd09c56ad781b36d9db7a6a4398ef6226bf850857fa24febe1c0d" +dependencies = [ + "async-trait", + "const_format", + "derive_more", + "either", + "schemars 1.2.1", + "serde_json", + "zenoh", + "zenoh-plugin-trait", + "zenoh-result", + "zenoh-util", +] + [[package]] name = "zerocopy" version = "0.8.31" @@ -5350,9 +5390,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] @@ -5374,15 +5414,21 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerompk" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4bfaccde2671513aa564585b2e9ccf0a0ccaf9689477abfd60e53d3806afa51" dependencies = [ - "zeroize_derive", + "zerompk_derive", ] [[package]] -name = "zeroize_derive" -version = "1.4.2" +name = "zerompk_derive" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "2197ce2b0c4f95ebfd8b09134ecfe0dcc152481b21bacd7a4b1976df1ccfdfc8" dependencies = [ "proc-macro2", "quote", @@ -5421,3 +5467,9 @@ dependencies = [ "quote", "syn 2.0.111", ] + +[[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 index cab225b0b..5f1e58d82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "3" -members = ["rust/networking", "rust/exo_pyo3_bindings", "rust/util"] +members = ["rust/exo_pyo3_bindings", "rust/networking"] [workspace.package] version = "0.0.1" @@ -20,7 +20,6 @@ opt-level = 3 [workspace.dependencies] ## Crate members as common dependencies networking = { path = "rust/networking" } -util = { path = "rust/util" } # Macro dependecies extend = "1.2" @@ -34,17 +33,14 @@ nix = "0.31" async-stream = "0.3" tokio = "1.46" futures-lite = "2.6.1" -futures-timer = "3.0" - -# Data structures -either = "1.15" # Tracing/logging log = "0.4" +env_logger = "0.11.10" # networking -libp2p = "0.56" -libp2p-tcp = "0.44" +zenoh = "=1.9.0" +zerompk = "0.4.2" [workspace.lints.rust] static_mut_refs = "warn" # Or use "warn" instead of deny diff --git a/flake.lock b/flake.lock index 7905a11ef..dda58bc67 100644 --- a/flake.lock +++ b/flake.lock @@ -47,11 +47,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1775807984, - "narHash": "sha256-Redoe3D9zGN5I9QPHWL9vfMVQBehY1fKsMiRXQ83X3w=", + "lastModified": 1777708550, + "narHash": "sha256-Qif3UXT0l5OQq8H9pRWt4/ia4gF48MWK2oHKL8uVx8U=", "owner": "nix-community", "repo": "fenix", - "rev": "fcf90c0c4d368b2ca917a7afa6d08e98a397e5fd", + "rev": "74c1591efaff494756b8d35ebe357c6c2bbdca96", "type": "github" }, "original": { @@ -218,11 +218,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1775745684, - "narHash": "sha256-8MbfLwd60FNa8dRFkjE+G3TT/x21G3Rsplm1bMBQUtU=", + "lastModified": 1777639980, + "narHash": "sha256-6d7Hdurvbjc5uwJuc0YiK7rZBGj6Gs3uzfBFcTs+xCc=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "64ddb549bc9a70d011328746fa46a8883f937b6b", + "rev": "64cdaeb06f69b6b769a492edd88b022ae88e8ca2", "type": "github" }, "original": { diff --git a/rust/exo_net/Cargo.toml b/rust/exo_net/Cargo.toml index b2bb387d5..9bc40e453 100644 --- a/rust/exo_net/Cargo.toml +++ b/rust/exo_net/Cargo.toml @@ -22,7 +22,8 @@ doc = false workspace = true [dependencies] -networking = { workspace = true } +networking.workspace = true +extend.workspace = true # interop pyo3 = { version = "0.27.2", features = [ @@ -56,14 +57,14 @@ thiserror = "2.0" # async runtime tokio = { workspace = true, features = ["full", "tracing"] } futures-lite = { workspace = true } - -# utility dependencies -util = { workspace = true } +pin-project = "1.1.10" # Tracing -log = { workspace = true } -env_logger = "0.11" +log.workspace = true +env_logger.workspace = true # Networking -libp2p = { workspace = true, features = ["full"] } -pin-project = "1.1.10" +zenoh.workspace = true +zerompk.workspace = true +rand = "0.10.1" +serde_json = "1.0.149" diff --git a/rust/exo_net/src/ident.rs b/rust/exo_net/src/ident.rs index 55f40bc6e..d208f72a0 100644 --- a/rust/exo_net/src/ident.rs +++ b/rust/exo_net/src/ident.rs @@ -1,5 +1,4 @@ use crate::ext::ResultExt as _; -use libp2p::identity::Keypair; use pyo3::types::{PyBytes, PyBytesMethods as _}; use pyo3::{Bound, PyResult, Python, pyclass, pymethods}; use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pymethods}; @@ -8,7 +7,7 @@ use pyo3_stub_gen::derive::{gen_stub_pyclass, gen_stub_pymethods}; #[gen_stub_pyclass] #[pyclass(name = "Keypair", frozen)] #[repr(transparent)] -pub struct PyKeypair(pub Keypair); +pub struct PyKeypair(pub u128); #[gen_stub_pymethods] #[pymethods] @@ -17,31 +16,29 @@ impl PyKeypair { /// Generate a new Ed25519 keypair. #[staticmethod] fn generate() -> Self { - Self(Keypair::generate_ed25519()) + Self(rand::random()) } /// Construct an Ed25519 keypair from secret key bytes #[staticmethod] fn from_bytes(bytes: Bound<'_, PyBytes>) -> PyResult { - let mut bytes = Vec::from(bytes.as_bytes()); - Ok(Self(Keypair::ed25519_from_bytes(&mut bytes).pyerr()?)) + let bytes = Vec::from(bytes.as_bytes()); + Ok(Self(u128::from_le_bytes( + bytes + .try_into() + .map_err(|_| "passed too many bytes to from_bytes") + .pyerr()?, + ))) } /// Get the secret key bytes underlying the keypair fn to_bytes<'py>(&self, py: Python<'py>) -> PyResult> { - let bytes = self - .0 - .clone() - .try_into_ed25519() - .pyerr()? - .secret() - .as_ref() - .to_vec(); + let bytes = self.0.to_le_bytes(); Ok(PyBytes::new(py, &bytes)) } /// Convert the `Keypair` into the corresponding `PeerId` string, which we use as our `NodeId`. fn to_node_id(&self) -> String { - self.0.public().to_peer_id().to_base58() + format!("{:x}", self.0) } } diff --git a/rust/exo_net/src/networking.rs b/rust/exo_net/src/networking.rs index 9bcea5eb4..62388c7d5 100644 --- a/rust/exo_net/src/networking.rs +++ b/rust/exo_net/src/networking.rs @@ -5,12 +5,8 @@ use crate::r#const::MPSC_CHANNEL_SIZE; use crate::ext::{ByteArrayExt as _, FutureExt, PyErrExt as _}; use crate::ext::{ResultExt as _, TokioMpscSenderExt as _}; use crate::ident::PyKeypair; -use crate::networking::exception::{ - PyAllQueuesFullError, PyMessageTooLargeError, PyNoPeersSubscribedToTopicError, -}; use crate::pyclass; use futures_lite::{Stream, StreamExt as _}; -use libp2p::gossipsub::PublishError; use networking::swarm::{FromSwarm, ToSwarm, create_swarm}; use pyo3::exceptions::PyRuntimeError; use pyo3::prelude::{PyModule, PyModuleMethods as _}; @@ -21,114 +17,6 @@ use pyo3_stub_gen::derive::{ }; use tokio::sync::{Mutex, mpsc, oneshot}; -mod exception { - use pyo3::types::PyTuple; - use pyo3::{exceptions::PyException, prelude::*}; - use pyo3_stub_gen::derive::*; - - #[gen_stub_pyclass] - #[pyclass(frozen, extends=PyException, name="NoPeersSubscribedToTopicError")] - pub struct PyNoPeersSubscribedToTopicError {} - - impl PyNoPeersSubscribedToTopicError { - const MSG: &'static str = "\ - No peers are currently subscribed to receive messages on this topic. \ - Wait for peers to subscribe or check your network connectivity."; - - /// Creates a new [ `PyErr` ] of this type. - /// - /// [`PyErr`] : https://docs.rs/pyo3/latest/pyo3/struct.PyErr.html "PyErr in pyo3" - pub(crate) fn new_err() -> PyErr { - PyErr::new::(()) // TODO: check if this needs to be replaced??? - } - } - - #[gen_stub_pymethods] - #[pymethods] - impl PyNoPeersSubscribedToTopicError { - #[new] - #[pyo3(signature = (*args))] - #[allow(unused_variables)] - pub(crate) fn new(args: &Bound<'_, PyTuple>) -> Self { - Self {} - } - - fn __repr__(&self) -> String { - format!("PeerId(\"{}\")", Self::MSG) - } - - fn __str__(&self) -> String { - Self::MSG.to_string() - } - } - - #[gen_stub_pyclass] - #[pyclass(frozen, extends=PyException, name="AllQueuesFullError")] - pub struct PyAllQueuesFullError {} - - impl PyAllQueuesFullError { - const MSG: &'static str = - "All libp2p peers are unresponsive, resend the message or reconnect."; - - /// Creates a new [ `PyErr` ] of this type. - /// - /// [`PyErr`] : https://docs.rs/pyo3/latest/pyo3/struct.PyErr.html "PyErr in pyo3" - pub(crate) fn new_err() -> PyErr { - PyErr::new::(()) // TODO: check if this needs to be replaced??? - } - } - - #[gen_stub_pymethods] - #[pymethods] - impl PyAllQueuesFullError { - #[new] - #[pyo3(signature = (*args))] - #[allow(unused_variables)] - pub(crate) fn new(args: &Bound<'_, PyTuple>) -> Self { - Self {} - } - - fn __repr__(&self) -> String { - format!("PeerId(\"{}\")", Self::MSG) - } - - fn __str__(&self) -> String { - Self::MSG.to_string() - } - } - - #[gen_stub_pyclass] - #[pyclass(frozen, extends=PyException, name="MessageTooLargeError")] - pub struct PyMessageTooLargeError {} - - impl PyMessageTooLargeError { - const MSG: &'static str = "Gossipsub message exceeds max_transmit_size. Reduce prompt length or increase the limit."; - - pub(crate) fn new_err() -> PyErr { - PyErr::new::(()) - } - } - - #[gen_stub_pymethods] - #[pymethods] - impl PyMessageTooLargeError { - #[new] - #[pyo3(signature = (*args))] - #[allow(unused_variables)] - pub(crate) fn new(args: &Bound<'_, PyTuple>) -> Self { - Self {} - } - - fn __repr__(&self) -> String { - format!("MessageTooLargeError(\"{}\")", Self::MSG) - } - - fn __str__(&self) -> String { - Self::MSG.to_string() - } - } -} - #[gen_stub_pyclass] #[pyclass(name = "NetworkingHandle")] struct PyNetworkingHandle { @@ -140,29 +28,15 @@ struct PyNetworkingHandle { #[gen_stub_pyclass_complex_enum] #[pyclass] enum PyFromSwarm { - Connection { - peer_id: String, - connected: bool, - }, - Message { - origin: String, - topic: String, - data: Py, - }, + Connection { connected: bool }, + Message { topic: String, data: Py }, } impl From for PyFromSwarm { fn from(value: FromSwarm) -> Self { match value { - FromSwarm::Discovered { peer_id } => Self::Connection { - peer_id: peer_id.to_base58(), - connected: true, - }, - FromSwarm::Expired { peer_id } => Self::Connection { - peer_id: peer_id.to_base58(), - connected: false, - }, - FromSwarm::Message { from, topic, data } => Self::Message { - origin: from.to_base58(), + FromSwarm::Discovered {} => Self::Connection { connected: true }, + FromSwarm::Expired {} => Self::Connection { connected: false }, + FromSwarm::Message { topic, data } => Self::Message { topic: topic, data: data.pybytes(), }, @@ -195,8 +69,8 @@ impl PyNetworkingHandle { // create networking swarm (within tokio context!! or it crashes) let _guard = pyo3_async_runtimes::tokio::get_runtime().enter(); let swarm = create_swarm(identity, from_client, bootstrap_peers, listen_port) - .pyerr()? - .into_stream(); + .map(|it| it.into_stream()) + .pyerr()?; Ok(Self { swarm: Arc::new(Mutex::new(swarm)), @@ -285,14 +159,7 @@ impl PyNetworkingHandle { .allow_threads_py() // allow-threads-aware async call .await .map_err(|_| PyErr::receiver_channel_closed())? - .map_err(|e| match e { - PublishError::AllQueuesFull(_) => PyAllQueuesFullError::new_err(), - PublishError::MessageTooLarge => PyMessageTooLargeError::new_err(), - PublishError::NoPeersSubscribedToTopic => { - PyNoPeersSubscribedToTopicError::new_err() - } - e => PyRuntimeError::new_err(e.to_string()), - })?; + .map_err(|e| PyRuntimeError::new_err(e.to_string()))?; Ok(()) } } @@ -307,10 +174,6 @@ pyo3_stub_gen::inventory::submit! { } pub fn networking_submodule(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; - m.add_class::()?; m.add_class::()?; diff --git a/rust/exo_net/tests/test_python.py b/rust/exo_net/tests/test_python.py index ed65f4298..742278703 100644 --- a/rust/exo_net/tests/test_python.py +++ b/rust/exo_net/tests/test_python.py @@ -5,7 +5,6 @@ from _pytest.capture import CaptureFixture from exo_pyo3_bindings import ( Keypair, NetworkingHandle, - NoPeersSubscribedToTopicError, Pidfile, PyFromSwarm, ) @@ -15,17 +14,15 @@ from exo_pyo3_bindings import ( async def test_sleep_on_multiple_items() -> None: print("PYTHON: starting handle") h = NetworkingHandle(Keypair.generate(), [], 0) + print("PYTHON: handle started") rt = asyncio.create_task(_await_recv(h)) # sleep for 4 ticks - for i in range(4): + for i in range(10): await asyncio.sleep(1) - try: - await h.gossipsub_publish("topic", b"somehting or other") - except NoPeersSubscribedToTopicError as e: - print("caught it", e) + await h.gossipsub_publish("topic", b"somehting or other") def test_pidfile(capsys: CaptureFixture[str]): @@ -47,3 +44,6 @@ async def _await_recv(h: NetworkingHandle): def scoped_lock_file(): a = Pidfile("/tmp/lock.pid", 0o0600) + +if __name__ == "__main__": + asyncio.run(test_sleep_on_multiple_items()) diff --git a/rust/networking/Cargo.toml b/rust/networking/Cargo.toml index 3aff54d68..47b1a2586 100644 --- a/rust/networking/Cargo.toml +++ b/rust/networking/Cargo.toml @@ -1,42 +1,22 @@ [package] name = "networking" -version = { workspace = true } -edition = { workspace = true } -publish = false +version.workspace = true +edition.workspace = true -[lib] -doctest = false -name = "networking" -path = "src/lib.rs" +[dependencies] +async-stream = "0.3.6" +futures-lite.workspace = true +netwatcher = { version = "0.6.0", features = ["tokio"] } +parking_lot = "0.12.5" +tokio = { workspace = true, features = ["full"] } +zenoh = { version = "=1.9.0", features = ["internal", "plugins", "unstable"] } +zenoh-plugin-storage-manager = { version = "=1.9.0", default-features = false } +zenoh-plugin-trait = "=1.9.0" +zerompk = { version = "0.4.2", features = ["derive"] } +rand = "0.10.1" +tracing = "0.1.44" +log.workspace = true [lints] workspace = true -[dependencies] -# datastructures -either = { workspace = true } - -# macro dependencies -extend = { workspace = true } -delegate = { workspace = true } - -# async -async-stream = { workspace = true } -futures-lite = { workspace = true } -futures-timer = { workspace = true } -tokio = { workspace = true, features = ["full"] } - -# utility dependencies -util = { workspace = true } -tracing-subscriber = { version = "0.3.19", features = [ - "default", - "env-filter", -] } -keccak-const = { workspace = true } - -# tracing/logging -log = { workspace = true } - -# networking -libp2p = { workspace = true, features = ["full"] } -pin-project = "1.1.10" diff --git a/rust/networking/examples/chatroom.rs b/rust/networking/examples/chatroom.rs deleted file mode 100644 index 87fc87ee5..000000000 --- a/rust/networking/examples/chatroom.rs +++ /dev/null @@ -1,86 +0,0 @@ -use futures_lite::StreamExt; -use libp2p::identity; -use networking::swarm; -use networking::swarm::{FromSwarm, ToSwarm}; -use tokio::sync::{mpsc, oneshot}; -use tokio::{io, io::AsyncBufReadExt as _}; -use tracing_subscriber::EnvFilter; -use tracing_subscriber::filter::LevelFilter; - -#[tokio::main] -async fn main() { - let _ = tracing_subscriber::fmt() - .with_env_filter(EnvFilter::from_default_env().add_directive(LevelFilter::INFO.into())) - .try_init(); - - let (to_swarm, from_client) = mpsc::channel(20); - - // Configure swarm - let mut swarm = swarm::create_swarm( - identity::Keypair::generate_ed25519(), - from_client, - vec![], - 0, - ) - .expect("Swarm creation failed") - .into_stream(); - - // Create a Gossipsub topic & subscribe - let (tx, rx) = oneshot::channel(); - _ = to_swarm - .send(ToSwarm::Subscribe { - topic: "test-net".to_string(), - result_sender: tx, - }) - .await - .expect("should send"); - - // Read full lines from stdin - let mut stdin = io::BufReader::new(io::stdin()).lines(); - println!("Enter messages via STDIN and they will be sent to connected peers using Gossipsub"); - - tokio::task::spawn(async move { - rx.await - .expect("tx not dropped") - .expect("subscribe shouldn't fail"); - loop { - if let Ok(Some(line)) = stdin.next_line().await { - let (tx, rx) = oneshot::channel(); - if let Err(e) = to_swarm - .send(swarm::ToSwarm::Publish { - topic: "test-net".to_string(), - data: line.as_bytes().to_vec(), - result_sender: tx, - }) - .await - { - println!("Send error: {e:?}"); - return; - }; - match rx.await { - Ok(Err(e)) => println!("Publish error: {e:?}"), - Err(e) => println!("Publish error: {e:?}"), - Ok(_) => {} - } - } - } - }); - - // Kick it off - loop { - // on gossipsub outgoing - match swarm.next().await { - // on gossipsub incoming - Some(FromSwarm::Discovered { peer_id }) => { - println!("\n\nconnected to {peer_id}\n\n") - } - Some(FromSwarm::Expired { peer_id }) => { - println!("\n\ndisconnected from {peer_id}\n\n") - } - Some(FromSwarm::Message { from, topic, data }) => { - println!("{topic}/{from}:\n{}", String::from_utf8_lossy(&data)) - } - None => {} - } - } -} diff --git a/rust/networking/examples/put_string.rs b/rust/networking/examples/put_string.rs new file mode 100644 index 000000000..f19c4e266 --- /dev/null +++ b/rust/networking/examples/put_string.rs @@ -0,0 +1,22 @@ +use networking; +use tracing::info; +use zenoh::Result; + +#[tokio::main] +async fn main() -> Result<()> { + zenoh::init_log_from_env_or("info"); + info!("Opening session..."); + let cfg = networking::cfg(rand::random(), 0)?; + let session = networking::open(cfg).await?; + let _tok = session + .liveliness() + .declare_token(format!("nodes/{}/live", session.zid())) + .await?; + let key_expr = "storage/mem1/name"; + let payload = "me"; + + info!("Putting Data ('{key_expr}': '{payload}')..."); + session.put(key_expr, payload).await?; + tokio::signal::ctrl_c().await?; + Ok(()) +} diff --git a/rust/networking/examples/serve_storage.rs b/rust/networking/examples/serve_storage.rs new file mode 100644 index 000000000..066dc9b8d --- /dev/null +++ b/rust/networking/examples/serve_storage.rs @@ -0,0 +1,23 @@ +use networking; +use tracing::info; +use zenoh::Result; + +#[tokio::main] +async fn main() -> Result<()> { + zenoh::init_log_from_env_or("info"); + info!("Opening session..."); + let cfg = networking::cfg(rand::random(), 0)?; + let session = networking::open(cfg).await?; + let _tok = session + .liveliness() + .declare_token(format!("nodes/{}/live", session.zid())) + .await?; + let _sub = session + .liveliness() + .declare_subscriber("nodes/*/live") + .history(true) + .callback(|tok| println!("{tok:?}")) + .await?; + tokio::signal::ctrl_c().await?; + Ok(()) +} diff --git a/rust/networking/src/RESEARCH_NOTES.txt b/rust/networking/src/RESEARCH_NOTES.txt deleted file mode 100644 index 2beeca57e..000000000 --- a/rust/networking/src/RESEARCH_NOTES.txt +++ /dev/null @@ -1,44 +0,0 @@ -https://github.com/ml-explore/mlx/commit/3fe98bacc7640d857acf3539f1d21b47a32e5609 -^raw sockets distributed -> `` -> https://newosxbook.com/code/xnu-3247.1.106/bsd/net/ndrv.h.auto.html ---> header file for a networking component found in the macOS kernel (XNU) that defines structures for network device driver registration, specifically the ndrv_demux_desc and ndrv_protocol_desc structures used for demultiplexing protocol data at the network interface level. It specifies how to describe protocol data, such as an Ethernet type or a SNAP header, and how to associate these descriptions with a specific protocol family to receive matching packets. ---> Used to bind an NDRV socket so that packets that match given protocol demux descriptions can be received. ---> An NDRV socket is a special kind of socket in the Darwin/macOS operating system's XNU kernel, used for low-level network packet manipulation and binding to specific protocols for packet processing. It allows user-space applications or drivers to directly write Layer 2 (L2) network packets or interact with the network stack at a lower level, often by binding to protocol descriptors like the ndrv_protocol_desc. This type of socket is used for functions such as capturing and injecting packets, especially in network infrastructure software like routers or for kernel-level network monitoring and security tools. ---> also called PF_NDRV sockets --> https://newosxbook.com/bonus/vol1ch16.html -----> they are conceptually similar to https://scapy.disruptivelabs.in/networking/socket-interface PF_RAW or PF_PACKET - -https://stackoverflow.com/questions/17169298/af-packet-on-osx -^AF_PACKET duplicates the packets as soon as it receives them from the physical layer (for incoming packets) or just before sending them out to the physical layer (for outgoing packets). -> this is on Linux only -^it doesn't exist on OS X so you can use /dev/bpfX (Berkeley Packet Filter) for sniffing - -https://www.unix.com/man_page/mojave/4/ip/ -^OS X manpages for IP - -https://developer.apple.com/documentation/kernel/implementing_drivers_system_extensions_and_kexts -^driver kit, system extensions & kexts for macOS - ----- - -To set up a Linux system to use a Thunderbolt connection as a network device, connect the two computers with a Thunderbolt cable, load the thunderbolt-net kernel module (usually automatic but modprobe is an option for manual loading), and then the operating system will create virtual Ethernet interfaces (e.g., thunderbolt0) for networking. You can then use standard tools like ifconfig or your desktop environment's network manager to configure these new interfaces for a link-local network. ---> https://gist.github.com/geosp/80fbd39e617b7d1d9421683df4ea224a -----> here is a guide on how to set up thunderbolt-ethernet on linux -----> I may be able to steal the thunderbolt-net code ideas to implement a kernel module for MacOS - -https://chatgpt.com/s/t_68af8e41a8548191993281a014f846a7 -^GPT discussion about making socket interface - -https://chatgpt.com/s/t_68afb798a85c8191973c02a0fa7a48a3 --> link-local address,,?? -https://chatgpt.com/s/t_68afb02987e08191b2b0044d3667ece2 -^GPT discussion about accessing TB on MacOS low level interactions - --------------------------------- - -https://www.intel.com/content/www/us/en/support/articles/000098893/software.html -^Thunderbolt Share & Thunderbolt Networking Mode => intel's equivalent of thunderbolt bridge - - ---------------------------------- - -https://www.zerotier.com/blog/how-zerotier-eliminated-kernel-extensions-on-macos/ --->fake ethernet devices on MacOS -> omg??? we can detect thunderbolt bridge, then bind to it, then re-expose it as fake ethernet?? --->ps: https://chatgpt.com/s/t_68afb2b25fb881919526763fb5d7359c, AF/PF_NDRV are one and the same!!! --->https://github.com/zerotier/ZeroTierOne/blob/dev/osdep/MacEthernetTapAgent.c \ No newline at end of file diff --git a/rust/networking/src/discovery.rs b/rust/networking/src/discovery.rs deleted file mode 100644 index 2ee2f970c..000000000 --- a/rust/networking/src/discovery.rs +++ /dev/null @@ -1,390 +0,0 @@ -use crate::ext::MultiaddrExt; -use delegate::delegate; -use either::Either; -use futures_lite::FutureExt; -use futures_timer::Delay; -use libp2p::core::transport::PortUse; -use libp2p::core::{ConnectedPoint, Endpoint}; -use libp2p::swarm::behaviour::ConnectionEstablished; -use libp2p::swarm::dial_opts::DialOpts; -use libp2p::swarm::{ - CloseConnection, ConnectionClosed, ConnectionDenied, ConnectionHandler, - ConnectionHandlerSelect, ConnectionId, FromSwarm, NetworkBehaviour, THandler, THandlerInEvent, - THandlerOutEvent, ToSwarm, dummy, -}; -use libp2p::{Multiaddr, PeerId, identity, mdns}; -use std::collections::{BTreeSet, HashMap}; -use std::convert::Infallible; -use std::io; -use std::net::IpAddr; -use std::task::{Context, Poll}; -use std::time::Duration; -use util::wakerdeque::WakerDeque; - -const RETRY_CONNECT_INTERVAL: Duration = Duration::from_secs(5); - -mod managed { - use libp2p::swarm::NetworkBehaviour; - use libp2p::{identity, mdns, ping}; - use std::io; - use std::time::Duration; - - const MDNS_RECORD_TTL: Duration = Duration::from_secs(2_500); - const MDNS_QUERY_INTERVAL: Duration = Duration::from_secs(1_500); - const PING_TIMEOUT: Duration = Duration::from_millis(2_500); - const PING_INTERVAL: Duration = Duration::from_millis(2_500); - - #[derive(NetworkBehaviour)] - pub struct Behaviour { - mdns: mdns::tokio::Behaviour, - ping: ping::Behaviour, - } - - impl Behaviour { - pub fn new(keypair: &identity::Keypair) -> io::Result { - Ok(Self { - mdns: mdns_behaviour(keypair)?, - ping: ping_behaviour(), - }) - } - } - - fn mdns_behaviour(keypair: &identity::Keypair) -> io::Result { - use mdns::{Config, tokio}; - - // mDNS config => enable IPv6 - let mdns_config = Config { - ttl: MDNS_RECORD_TTL, - query_interval: MDNS_QUERY_INTERVAL, - - // enable_ipv6: true, // TODO: for some reason, TCP+mDNS don't work well with ipv6?? figure out how to make work - ..Default::default() - }; - - let mdns_behaviour = tokio::Behaviour::new(mdns_config, keypair.public().to_peer_id()); - Ok(mdns_behaviour?) - } - - fn ping_behaviour() -> ping::Behaviour { - ping::Behaviour::new( - ping::Config::new() - .with_timeout(PING_TIMEOUT) - .with_interval(PING_INTERVAL), - ) - } -} - -/// Events for when a listening connection is truly established and truly closed. -#[derive(Debug, Clone)] -pub enum Event { - ConnectionEstablished { - peer_id: PeerId, - connection_id: ConnectionId, - remote_ip: IpAddr, - remote_tcp_port: u16, - }, - ConnectionClosed { - peer_id: PeerId, - connection_id: ConnectionId, - remote_ip: IpAddr, - remote_tcp_port: u16, - }, -} - -/// Discovery behavior that wraps mDNS to produce truly discovered durable peer-connections. -/// -/// The behaviour operates as such: -/// 1) All true (listening) connections/disconnections are tracked, emitting corresponding events -/// to the swarm. -/// 1) mDNS discovered/expired peers are tracked; discovered but not connected peers are dialed -/// immediately, and expired but connected peers are disconnected from immediately. -/// 2) Every fixed interval: discovered but not connected peers are dialed, and expired but -/// connected peers are disconnected from. -pub struct Behaviour { - // state-tracking for managed behaviors & mDNS-discovered peers - managed: managed::Behaviour, - mdns_discovered: HashMap>, - bootstrap_peers: Vec, - - retry_delay: Delay, // retry interval - - // pending events to emmit => waker-backed Deque to control polling - pending_events: WakerDeque>, -} - -impl Behaviour { - pub fn new(keypair: &identity::Keypair, bootstrap_peers: Vec) -> io::Result { - Ok(Self { - managed: managed::Behaviour::new(keypair)?, - mdns_discovered: HashMap::new(), - bootstrap_peers, - retry_delay: Delay::new(RETRY_CONNECT_INTERVAL), - pending_events: WakerDeque::new(), - }) - } - - fn dial(&mut self, peer_id: PeerId, addr: Multiaddr) { - self.pending_events.push_back(ToSwarm::Dial { - opts: DialOpts::peer_id(peer_id).addresses(vec![addr]).build(), - }) - } - - fn close_connection(&mut self, peer_id: PeerId, connection: ConnectionId) { - // push front to make this IMMEDIATE - self.pending_events.push_front(ToSwarm::CloseConnection { - peer_id, - connection: CloseConnection::One(connection), - }) - } - - fn handle_mdns_discovered(&mut self, peers: Vec<(PeerId, Multiaddr)>) { - for (p, ma) in peers { - self.dial(p, ma.clone()); // always connect - - // get peer's multi-addresses or insert if missing - let Some(mas) = self.mdns_discovered.get_mut(&p) else { - self.mdns_discovered.insert(p, BTreeSet::from([ma])); - continue; - }; - - // multiaddress should never already be present - else something has gone wrong - let is_new_addr = mas.insert(ma); - assert!(is_new_addr, "cannot discover a discovered peer"); - } - } - - fn handle_mdns_expired(&mut self, peers: Vec<(PeerId, Multiaddr)>) { - for (p, ma) in peers { - // at this point, we *must* have the peer - let mas = self - .mdns_discovered - .get_mut(&p) - .expect("nonexistent peer cannot expire"); - - // at this point, we *must* have the multiaddress - let was_present = mas.remove(&ma); - assert!(was_present, "nonexistent multiaddress cannot expire"); - - // if empty, remove the peer-id entirely - if mas.is_empty() { - self.mdns_discovered.remove(&p); - } - } - } - - fn on_connection_established( - &mut self, - peer_id: PeerId, - connection_id: ConnectionId, - remote_ip: IpAddr, - remote_tcp_port: u16, - ) { - // send out connected event - self.pending_events - .push_back(ToSwarm::GenerateEvent(Event::ConnectionEstablished { - peer_id, - connection_id, - remote_ip, - remote_tcp_port, - })); - } - - fn on_connection_closed( - &mut self, - peer_id: PeerId, - connection_id: ConnectionId, - remote_ip: IpAddr, - remote_tcp_port: u16, - ) { - // send out disconnected event - self.pending_events - .push_back(ToSwarm::GenerateEvent(Event::ConnectionClosed { - peer_id, - connection_id, - remote_ip, - remote_tcp_port, - })); - } -} - -impl NetworkBehaviour for Behaviour { - type ConnectionHandler = - ConnectionHandlerSelect>; - type ToSwarm = Event; - - // simply delegate to underlying mDNS behaviour - - delegate! { - to self.managed { - fn handle_pending_inbound_connection(&mut self, connection_id: ConnectionId, local_addr: &Multiaddr, remote_addr: &Multiaddr) -> Result<(), ConnectionDenied>; - fn handle_pending_outbound_connection(&mut self, connection_id: ConnectionId, maybe_peer: Option, addresses: &[Multiaddr], effective_role: Endpoint) -> Result, ConnectionDenied>; - } - } - - fn handle_established_inbound_connection( - &mut self, - connection_id: ConnectionId, - peer: PeerId, - local_addr: &Multiaddr, - remote_addr: &Multiaddr, - ) -> Result, ConnectionDenied> { - Ok(ConnectionHandler::select( - dummy::ConnectionHandler, - self.managed.handle_established_inbound_connection( - connection_id, - peer, - local_addr, - remote_addr, - )?, - )) - } - - #[allow(clippy::needless_question_mark)] - fn handle_established_outbound_connection( - &mut self, - connection_id: ConnectionId, - peer: PeerId, - addr: &Multiaddr, - role_override: Endpoint, - port_use: PortUse, - ) -> Result, ConnectionDenied> { - Ok(ConnectionHandler::select( - dummy::ConnectionHandler, - self.managed.handle_established_outbound_connection( - connection_id, - peer, - addr, - role_override, - port_use, - )?, - )) - } - - fn on_connection_handler_event( - &mut self, - peer_id: PeerId, - connection_id: ConnectionId, - event: THandlerOutEvent, - ) { - match event { - Either::Left(ev) => libp2p::core::util::unreachable(ev), - Either::Right(ev) => { - self.managed - .on_connection_handler_event(peer_id, connection_id, ev) - } - } - } - - // hook into these methods to drive behavior - - fn on_swarm_event(&mut self, event: FromSwarm) { - self.managed.on_swarm_event(event); // let mDNS handle swarm events - - // handle swarm events to update internal state: - match event { - FromSwarm::ConnectionEstablished(ConnectionEstablished { - peer_id, - connection_id, - endpoint, - .. - }) => { - let remote_address = match endpoint { - ConnectedPoint::Dialer { address, .. } => address, - ConnectedPoint::Listener { send_back_addr, .. } => send_back_addr, - }; - - if let Some((ip, port)) = remote_address.try_to_tcp_addr() { - // handle connection established event which is filtered correctly - self.on_connection_established(peer_id, connection_id, ip, port) - } - } - FromSwarm::ConnectionClosed(ConnectionClosed { - peer_id, - connection_id, - endpoint, - .. - }) => { - let remote_address = match endpoint { - ConnectedPoint::Dialer { address, .. } => address, - ConnectedPoint::Listener { send_back_addr, .. } => send_back_addr, - }; - - if let Some((ip, port)) = remote_address.try_to_tcp_addr() { - // handle connection closed event which is filtered correctly - self.on_connection_closed(peer_id, connection_id, ip, port) - } - } - - // since we are running TCP/IP transport layer, we are assuming that - // no address changes can occur, hence encountering one is a fatal error - FromSwarm::AddressChange(a) => { - unreachable!("unhandlable: address change encountered: {:?}", a) - } - _ => {} - } - } - - fn poll(&mut self, cx: &mut Context) -> Poll>> { - // delegate to managed behaviors for any behaviors they need to perform - match self.managed.poll(cx) { - Poll::Ready(ToSwarm::GenerateEvent(e)) => { - match e { - // handle discovered and expired events from mDNS - managed::BehaviourEvent::Mdns(e) => match e.clone() { - mdns::Event::Discovered(peers) => { - self.handle_mdns_discovered(peers); - } - mdns::Event::Expired(peers) => { - self.handle_mdns_expired(peers); - } - }, - - // handle ping events => if error then disconnect - managed::BehaviourEvent::Ping(e) => { - if let Err(_) = e.result { - self.close_connection(e.peer, e.connection.clone()) - } - } - } - - // since we just consumed an event, we should immediately wake just in case - // there are more events to come where that came from - cx.waker().wake_by_ref(); - } - - // forward any other mDNS event to the swarm or its connection handler(s) - Poll::Ready(e) => { - return Poll::Ready( - e.map_out(|_| unreachable!("events returning to swarm already handled")) - .map_in(Either::Right), - ); - } - - Poll::Pending => {} - } - - // retry connecting to all mDNS peers periodically (fails safely if already connected) - if self.retry_delay.poll(cx).is_ready() { - for (p, mas) in self.mdns_discovered.clone() { - for ma in mas { - self.dial(p, ma) - } - } - // dial bootstrap peers (for environments where mDNS is unavailable) - for addr in &self.bootstrap_peers { - self.pending_events.push_back(ToSwarm::Dial { - opts: DialOpts::unknown_peer_id().address(addr.clone()).build(), - }) - } - self.retry_delay.reset(RETRY_CONNECT_INTERVAL) // reset timeout - } - - // send out any pending events from our own service - if let Some(e) = self.pending_events.pop_front(cx) { - return Poll::Ready(e.map_in(Either::Left)); - } - - // wait for pending events - Poll::Pending - } -} diff --git a/rust/networking/src/lib.rs b/rust/networking/src/lib.rs index 6ff8c9016..24650646c 100644 --- a/rust/networking/src/lib.rs +++ b/rust/networking/src/lib.rs @@ -1,44 +1,116 @@ -//! TODO: crate documentation -//! -//! this is here as a placeholder documentation -//! -//! -pub mod discovery; +use std::{ + env, + ops::{Deref, DerefMut}, + panic, +}; + +use netwatcher::WatchHandle; +use tokio::{sync::mpsc, task::JoinHandle}; +use zenoh::{Result, Session as ZSession, config::WhatAmI, internal::runtime::Runtime}; +use zenoh_plugin_storage_manager::StoragesPlugin; +use zenoh_plugin_trait::PluginsManager; + +pub use zenoh::{Config, config::ZenohId}; + pub mod swarm; -/// Namespace for all the type/trait aliases used by this crate. -pub(crate) mod alias { - use std::error::Error; - - pub type AnyError = Box; - pub type AnyResult = Result; +pub fn cfg(identity: u128, listen_port: u16) -> Result { + let namespace = env::var("EXO_ZENOH_NAMESPACE").unwrap_or_else(|_| "exo".to_string()); + let mut cfg = zenoh::Config::default(); + // todo: cleanup + cfg.insert_json5("id", &format!("\"{identity:x}\""))?; + cfg.insert_json5("mode", "\"peer\"")?; + cfg.insert_json5("listen/endpoints", &format!("[\"tcp/[::]:{listen_port}\"]"))?; + cfg.insert_json5("scouting/multicast/enabled", "true")?; + cfg.insert_json5("scouting/multicast/autoconnect", "[]")?; + cfg.insert_json5("scouting/gossip/multihop", "true")?; + cfg.insert_json5("namespace", &format!("{namespace:?}"))?; + cfg.insert_json5("transport/link/tx/batch_size", "9216")?; + cfg.insert_json5("timestamping/enabled", "true")?; + cfg.insert_json5("plugins/storage_manager/__required__", "true")?; + cfg.insert_json5( + "plugins/storage_manager/storages/mem1", + r#"{ + key_expr: "storage/mem1/**", + strip_prefix: "storage/mem1", + volume: "memory", + replication: { + interval: 2, + } + }"#, + )?; + Ok(cfg) } -/// Namespace for crate-wide extension traits/methods -pub(crate) mod ext { - use extend::ext; - use libp2p::Multiaddr; - use libp2p::multiaddr::Protocol; - use std::net::IpAddr; - - #[ext(pub, name = MultiaddrExt)] - impl Multiaddr { - /// If the multiaddress corresponds to a TCP address, extracts it - fn try_to_tcp_addr(&self) -> Option<(IpAddr, u16)> { - let mut ps = self.into_iter(); - let ip = if let Some(p) = ps.next() { - match p { - Protocol::Ip4(ip) => IpAddr::V4(ip), - Protocol::Ip6(ip) => IpAddr::V6(ip), - _ => return None, +pub async fn open(cfg: zenoh::Config) -> Result { + let mut plugins = PluginsManager::static_plugins_only(); + plugins.declare_static_plugin::("storage_manager", true); + let mut runtime = zenoh::internal::runtime::RuntimeBuilder::new(cfg) + .plugins_manager(plugins) + .build() + .await?; + let session = zenoh::session::init(runtime.clone().into()).await?; + runtime.start().await?; + let _watch_all_handle = watch_all(runtime).await?; + Ok(Session { + session, + _watch_all_handle, + }) +} +async fn watch_all(runtime: Runtime) -> Result { + log::info!("spawning scout"); + let mut cfg = Config::default(); + cfg.insert_json5("scouting/multicast/ttl", "3")?; + cfg.insert_json5("scouting/multicast/interface", "\"auto\"")?; + let mut scout = zenoh::scout(WhatAmI::Peer, cfg.clone()).await?; + let (send, mut recv) = mpsc::unbounded_channel(); + let _sync = netwatcher::watch_interfaces_with_callback(move |u| _ = send.send(u))?; + let _async = tokio::task::spawn(async move { + loop { + tokio::select! { + u = recv.recv() => { + if u.is_none() { + return Ok(()); + } + log::info!("reloading scout"); + scout = zenoh::scout(WhatAmI::Peer, cfg.clone()).await?; } - } else { - return None; - }; - let Some(Protocol::Tcp(port)) = ps.next() else { - return None; - }; - Some((ip, port)) + hello = scout.recv_async() => { + if let Ok(hello) = hello { + // todo: auth + runtime + .connect_peer(&hello.zid().into(), hello.locators()) + .await; + } + } + } } + }); + Ok(WatchAllHandle { _sync, _async }) +} + +pub struct Session { + pub session: ZSession, + _watch_all_handle: WatchAllHandle, +} +impl Deref for Session { + type Target = ZSession; + fn deref(&self) -> &Self::Target { + &self.session } } +impl DerefMut for Session { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.session + } +} +impl Drop for WatchAllHandle { + fn drop(&mut self) { + self._async.abort(); + } +} + +pub struct WatchAllHandle { + _sync: WatchHandle, + _async: JoinHandle>, +} diff --git a/rust/networking/src/swarm.rs b/rust/networking/src/swarm.rs index a88863c66..20ab8ea72 100644 --- a/rust/networking/src/swarm.rs +++ b/rust/networking/src/swarm.rs @@ -1,24 +1,22 @@ +//! Compat shim for the old libp2p code + +use std::collections::HashMap; use std::pin::Pin; -use crate::swarm::transport::tcp_transport; -use crate::{alias, discovery}; -pub use behaviour::{Behaviour, BehaviourEvent}; -use futures_lite::{Stream, StreamExt}; -use libp2p::{PeerId, SwarmBuilder, gossipsub, identity, swarm::SwarmEvent}; -use tokio::sync::{mpsc, oneshot}; +use futures_lite::Stream; +use tokio::sync::mpsc; +use tokio::sync::oneshot; +use tracing::info; +use zenoh::Result; +use zenoh::Session; +use zenoh::handlers::FifoChannelHandler; +use zenoh::liveliness::LivelinessToken; +use zenoh::pubsub::Subscriber; +use zenoh::sample::Sample; +use zenoh::sample::SampleKind; +use zerompk::{FromMessagePack, ToMessagePack}; -/// The current version of the network: this prevents devices running different versions of the -/// software from interacting with each other. -/// -/// TODO: right now this is a hardcoded constant; figure out what the versioning semantics should -/// even be, and how to inject the right version into this config/initialization. E.g. should -/// this be passed in as a parameter? What about rapidly changing versions in debug builds? -/// this is all VERY very hard to figure out and needs to be mulled over as a team. -pub const NETWORK_VERSION: &[u8] = b"v0.0.1"; -pub const OVERRIDE_VERSION_ENV_VAR: &str = "EXO_LIBP2P_NAMESPACE"; - -// Uses oneshot senders to emulate function calling apis while avoiding requiring unique ownership -// of the Swarm. +#[derive(Debug)] pub enum ToSwarm { Unsubscribe { topic: String, @@ -26,52 +24,66 @@ pub enum ToSwarm { }, Subscribe { topic: String, - result_sender: oneshot::Sender>, + result_sender: oneshot::Sender>, }, Publish { topic: String, data: Vec, - result_sender: oneshot::Sender>, + result_sender: oneshot::Sender>, }, } +#[derive(Debug, ToMessagePack, FromMessagePack)] pub enum FromSwarm { - Message { - from: PeerId, - topic: String, - data: Vec, - }, - Discovered { - peer_id: PeerId, - }, - Expired { - peer_id: PeerId, - }, + Message { topic: String, data: Vec }, + Discovered {}, + Expired {}, } +pub type Topics = HashMap>; pub struct Swarm { - swarm: libp2p::Swarm, + cfg: zenoh::Config, from_client: mpsc::Receiver, } impl Swarm { pub fn into_stream(self) -> Pin + Send>> { let Swarm { - mut swarm, + cfg, mut from_client, } = self; let stream = async_stream::stream! { + let (mut to_topics, mut from_topics) = mpsc::channel(1024); + let mut topics = Topics::new(); + let Ok(mut session) = crate::open(cfg).await else { return; }; + let Ok((_token, discovery)) = register_liveness(&mut session).await else { return; }; loop { tokio::select! { msg = from_client.recv() => { let Some(msg) = msg else { break }; - on_message(&mut swarm, msg); + on_message(&mut session, &mut topics, &mut to_topics, msg).await; } - event = swarm.next() => { - let Some(event) = event else { break }; - if let Some(item) = filter_swarm_event(event) { - yield item; + event = from_topics.recv() => { + if let Some(event) = event { + yield event } } + token = discovery.recv_async() => { + if let Ok(token) = token { + let key_expr = token.key_expr().as_str().to_owned(); + let nid = key_expr.strip_prefix("nodes/").and_then(|s| s.strip_suffix("/live")); + yield match token.kind() { + SampleKind::Put => { + info!("discovered: {nid:?}"); + FromSwarm::Discovered {} + } + SampleKind::Delete => { + info!("expired: {nid:?}"); + FromSwarm::Expired {} + } + } + } + + } } } }; @@ -79,208 +91,96 @@ impl Swarm { } } -fn on_message(swarm: &mut libp2p::Swarm, message: ToSwarm) { - match message { - ToSwarm::Subscribe { - topic, - result_sender, - } => { - let result = swarm - .behaviour_mut() - .gossipsub - .subscribe(&gossipsub::IdentTopic::new(topic)); - _ = result_sender.send(result); - } - ToSwarm::Unsubscribe { - topic, - result_sender, - } => { - let result = swarm - .behaviour_mut() - .gossipsub - .unsubscribe(&gossipsub::IdentTopic::new(topic)); - _ = result_sender.send(result); - } +async fn register_liveness( + session: &mut Session, +) -> Result<(LivelinessToken, Subscriber>)> { + let token = session + .liveliness() + .declare_token(format!("nodes/{}/live", session.zid())) + .await?; + let sub = session + .liveliness() + .declare_subscriber("nodes/*/live") + .history(true) + .await?; + Ok((token, sub)) +} + +async fn on_message( + session: &mut Session, + topics: &mut Topics, + to_topics: &mut mpsc::Sender, + msg: ToSwarm, +) { + match msg { ToSwarm::Publish { topic, data, result_sender, } => { - let result = swarm - .behaviour_mut() - .gossipsub - .publish(gossipsub::IdentTopic::new(topic), data); - _ = result_sender.send(result); + let res = session.put(format!("topics/{topic}"), data).await; + _ = result_sender.send(res); + } + ToSwarm::Unsubscribe { + topic, + result_sender, + } => { + let Some((_, subscriber)) = topics.remove_entry(&topic) else { + _ = result_sender.send(false); + return; + }; + _ = subscriber.undeclare().await; + _ = result_sender.send(true); + } + ToSwarm::Subscribe { + topic, + result_sender, + } => { + assert!(topic.is_ascii()); + if topics.contains_key(&topic) { + _ = result_sender.send(Ok(false)); + return; + } + let subscriber = match session + .declare_subscriber(format!("topics/{topic}")) + .allowed_origin(zenoh::sample::Locality::Remote) + .callback({ + let sender = to_topics.clone(); + let topic = topic.clone(); + move |sample| { + if sample.kind() != SampleKind::Put { + return; + } + _ = sender.try_send(FromSwarm::Message { + topic: topic.clone(), + data: sample.payload().to_bytes().to_vec(), + }); + } + }) + .await + { + Ok(p) => p, + Err(e) => { + _ = result_sender.send(Err(e)); + return; + } + }; + assert!(topics.insert(topic, subscriber).is_none()); + _ = result_sender.send(Ok(true)); } } } -fn filter_swarm_event(event: SwarmEvent) -> Option { - match event { - SwarmEvent::Behaviour(BehaviourEvent::Gossipsub(gossipsub::Event::Message { - message: - gossipsub::Message { - source: Some(peer_id), - topic, - data, - .. - }, - .. - })) => Some(FromSwarm::Message { - from: peer_id, - topic: topic.into_string(), - data, - }), - SwarmEvent::Behaviour(BehaviourEvent::Discovery( - discovery::Event::ConnectionEstablished { peer_id, .. }, - )) => Some(FromSwarm::Discovered { peer_id }), - SwarmEvent::Behaviour(BehaviourEvent::Discovery(discovery::Event::ConnectionClosed { - peer_id, - .. - })) => Some(FromSwarm::Expired { peer_id }), - _ => None, - } -} - -/// Create and configure a swarm. -/// -/// - `listen_port`: TCP port to listen on. `0` lets the OS assign one. -/// - `bootstrap_peers`: multiaddrs to dial for environments without mDNS. pub fn create_swarm( - keypair: identity::Keypair, + identity: u128, from_client: mpsc::Receiver, bootstrap_peers: Vec, listen_port: u16, -) -> alias::AnyResult { - let parsed_bootstrap_peers: Vec = bootstrap_peers - .iter() - .filter(|s| !s.is_empty()) - .filter_map(|s| s.parse().ok()) - .collect(); - - let mut swarm = SwarmBuilder::with_existing_identity(keypair) - .with_tokio() - .with_other_transport(tcp_transport)? - .with_behaviour(|keypair| Behaviour::new(keypair, parsed_bootstrap_peers))? - .build(); - - swarm.listen_on(format!("/ip4/0.0.0.0/tcp/{listen_port}").parse()?)?; - Ok(Swarm { swarm, from_client }) -} - -mod transport { - use crate::alias; - use crate::swarm::{NETWORK_VERSION, OVERRIDE_VERSION_ENV_VAR}; - use futures_lite::{AsyncRead, AsyncWrite}; - use keccak_const::Sha3_256; - use libp2p::core::muxing; - use libp2p::core::transport::Boxed; - use libp2p::pnet::{PnetError, PnetOutput}; - use libp2p::{PeerId, Transport, identity, noise, pnet, yamux}; - use std::{env, sync::LazyLock}; - - /// Key used for networking's private network; parametrized on the [`NETWORK_VERSION`]. - /// See [`pnet_upgrade`] for more. - static PNET_PRESHARED_KEY: LazyLock<[u8; 32]> = LazyLock::new(|| { - let builder = Sha3_256::new().update(b"exo_discovery_network"); - - if let Ok(var) = env::var(OVERRIDE_VERSION_ENV_VAR) { - let bytes = var.into_bytes(); - builder.update(&bytes) - } else { - builder.update(NETWORK_VERSION) - } - .finalize() - }); - - /// Make the Swarm run on a private network, as to not clash with public libp2p nodes and - /// also different-versioned instances of this same network. - /// This is implemented as an additional "upgrade" ontop of existing [`libp2p::Transport`] layers. - async fn pnet_upgrade( - socket: TSocket, - _: impl Sized, - ) -> Result, PnetError> - where - TSocket: AsyncRead + AsyncWrite + Send + Unpin + 'static, - { - use pnet::{PnetConfig, PreSharedKey}; - PnetConfig::new(PreSharedKey::new(*PNET_PRESHARED_KEY)) - .handshake(socket) - .await - } - - /// TCP/IP transport layer configuration. - pub fn tcp_transport( - keypair: &identity::Keypair, - ) -> alias::AnyResult> { - use libp2p::{ - core::upgrade::Version, - tcp::{Config, tokio}, - }; - - // `TCP_NODELAY` enabled => avoid latency - let tcp_config = Config::default().nodelay(true); - - // V1 + lazy flushing => 0-RTT negotiation - let upgrade_version = Version::V1Lazy; - - // Noise is faster than TLS + we don't care much for security - let noise_config = noise::Config::new(keypair)?; - - // Use default Yamux config for multiplexing - let yamux_config = yamux::Config::default(); - - // Create new Tokio-driven TCP/IP transport layer - let base_transport = tokio::Transport::new(tcp_config) - .and_then(pnet_upgrade) - .upgrade(upgrade_version) - .authenticate(noise_config) - .multiplex(yamux_config); - - // Return boxed transport (to flatten complex type) - Ok(base_transport.boxed()) - } -} - -mod behaviour { - use crate::{alias, discovery}; - use libp2p::swarm::NetworkBehaviour; - use libp2p::{gossipsub, identity}; - - /// Behavior of the Swarm which composes all desired behaviors: - /// Right now its just [`discovery::Behaviour`] and [`gossipsub::Behaviour`]. - #[derive(NetworkBehaviour)] - pub struct Behaviour { - pub discovery: discovery::Behaviour, - pub gossipsub: gossipsub::Behaviour, - } - - impl Behaviour { - pub fn new( - keypair: &identity::Keypair, - bootstrap_peers: Vec, - ) -> alias::AnyResult { - Ok(Self { - discovery: discovery::Behaviour::new(keypair, bootstrap_peers)?, - gossipsub: gossipsub_behaviour(keypair), - }) - } - } - - fn gossipsub_behaviour(keypair: &identity::Keypair) -> gossipsub::Behaviour { - use gossipsub::{ConfigBuilder, MessageAuthenticity, ValidationMode}; - - // build a gossipsub network behaviour - // => signed message authenticity + strict validation mode means the message-ID is - // automatically provided by gossipsub w/out needing to provide custom message-ID function - gossipsub::Behaviour::new( - MessageAuthenticity::Signed(keypair.clone()), - ConfigBuilder::default() - .max_transmit_size(8 * 1024 * 1024) - .validation_mode(ValidationMode::Strict) - .build() - .expect("the configuration should always be valid"), - ) - .expect("creating gossipsub behavior should always work") - } +) -> Result { + // todo: bootstrap + if !bootstrap_peers.is_empty() || listen_port != 0 { + todo!(); + } + let cfg = crate::cfg(identity, listen_port)?; + Ok(Swarm { cfg, from_client }) } diff --git a/rust/networking/tests/bootstrap_peers.rs b/rust/networking/tests/bootstrap_peers.rs deleted file mode 100644 index ef9eb2947..000000000 --- a/rust/networking/tests/bootstrap_peers.rs +++ /dev/null @@ -1,107 +0,0 @@ -use futures_lite::StreamExt; -use networking::swarm::{FromSwarm, create_swarm}; -use std::time::Duration; -use tokio::sync::mpsc; -use tokio::time::timeout; - -/// Helper: find a free TCP port. -fn free_port() -> u16 { - let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap(); - listener.local_addr().unwrap().port() -} - -/// Two nodes connect via bootstrap peers — no mDNS needed. -/// -/// Node A listens on a fixed port. Node B bootstraps to A's address. -/// We verify that B emits `FromSwarm::Discovered` for A's peer ID. -#[tokio::test] -async fn two_nodes_connect_via_bootstrap_peers() { - let port_a = free_port(); - - // Node A: listens on a known port, no bootstrap peers - let keypair_a = libp2p::identity::Keypair::generate_ed25519(); - let peer_id_a = keypair_a.public().to_peer_id(); - let (_tx_a, rx_a) = mpsc::channel(16); - let swarm_a = create_swarm(keypair_a, rx_a, vec![], port_a).expect("create swarm A"); - let mut stream_a = swarm_a.into_stream(); - - // Node B: bootstraps to A's address - let keypair_b = libp2p::identity::Keypair::generate_ed25519(); - let (_tx_b, rx_b) = mpsc::channel(16); - let swarm_b = create_swarm( - keypair_b, - rx_b, - vec![format!("/ip4/127.0.0.1/tcp/{port_a}")], - 0, - ) - .expect("create swarm B"); - let mut stream_b = swarm_b.into_stream(); - - // Wait for B to discover A (connection established) - let connected = timeout(Duration::from_secs(10), async { - loop { - tokio::select! { - Some(event) = stream_a.next() => { - // A will also see B connect, but we check from B's perspective - let _ = event; - } - Some(event) = stream_b.next() => { - if let FromSwarm::Discovered { peer_id } = event { - if peer_id == peer_id_a { - return true; - } - } - } - } - } - }) - .await; - - assert!( - connected.is_ok() && connected.unwrap(), - "Node B should discover Node A via bootstrap peer" - ); -} - -/// Empty bootstrap peers should work (backward compatible). -#[tokio::test] -async fn create_swarm_with_empty_bootstrap_peers() { - let keypair = libp2p::identity::Keypair::generate_ed25519(); - let (_tx, rx) = mpsc::channel(16); - let swarm = create_swarm(keypair, rx, vec![], 0); - assert!( - swarm.is_ok(), - "create_swarm with no bootstrap peers should succeed" - ); -} - -/// Invalid multiaddr strings are silently filtered out. -#[tokio::test] -async fn create_swarm_ignores_invalid_bootstrap_addrs() { - let keypair = libp2p::identity::Keypair::generate_ed25519(); - let (_tx, rx) = mpsc::channel(16); - let swarm = create_swarm( - keypair, - rx, - vec![ - "not-a-valid-multiaddr".to_string(), - "".to_string(), - "/ip4/10.0.0.1/tcp/30000".to_string(), // valid - ], - 0, - ); - assert!( - swarm.is_ok(), - "create_swarm should succeed even with invalid bootstrap addrs" - ); -} - -/// Fixed listen port works correctly. -#[tokio::test] -async fn create_swarm_with_fixed_port() { - let port = free_port(); - let keypair = libp2p::identity::Keypair::generate_ed25519(); - let (_tx, rx) = mpsc::channel(16); - let swarm = create_swarm(keypair, rx, vec![], port); - assert!(swarm.is_ok(), "create_swarm with fixed port should succeed"); -} diff --git a/rust/networking/tests/dummy.rs b/rust/networking/tests/dummy.rs deleted file mode 100644 index ddaa8cc26..000000000 --- a/rust/networking/tests/dummy.rs +++ /dev/null @@ -1,7 +0,0 @@ -// maybe this will hold test in the future...?? - -#[cfg(test)] -mod tests { - #[test] - fn does_nothing() {} -} diff --git a/rust/util/Cargo.toml b/rust/util/Cargo.toml deleted file mode 100644 index bf820ed2f..000000000 --- a/rust/util/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "util" -version = { workspace = true } -edition = { workspace = true } -publish = false - -[lib] -doctest = false -name = "util" -path = "src/lib.rs" - -[lints] -workspace = true - -[dependencies] diff --git a/rust/util/src/lib.rs b/rust/util/src/lib.rs deleted file mode 100644 index b39d15f6b..000000000 --- a/rust/util/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod wakerdeque; diff --git a/rust/util/src/wakerdeque.rs b/rust/util/src/wakerdeque.rs deleted file mode 100644 index 336c03477..000000000 --- a/rust/util/src/wakerdeque.rs +++ /dev/null @@ -1,55 +0,0 @@ -use std::collections::VecDeque; -use std::fmt::{Debug, Formatter}; -use std::task::{Context, Waker}; - -/// A wrapper around [`VecDeque`] which wakes (if it can) on any `push_*` methods, -/// and updates the internally stored waker by consuming [`Context`] on any `pop_*` methods. -pub struct WakerDeque { - waker: Option, - deque: VecDeque, -} - -impl Debug for WakerDeque { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - self.deque.fmt(f) - } -} - -impl WakerDeque { - pub fn new() -> Self { - Self { - waker: None, - deque: VecDeque::new(), - } - } - - fn update(&mut self, cx: &mut Context<'_>) { - self.waker = Some(cx.waker().clone()); - } - - fn wake(&mut self) { - let Some(ref mut w) = self.waker else { return }; - w.wake_by_ref(); - self.waker = None; - } - - pub fn pop_front(&mut self, cx: &mut Context<'_>) -> Option { - self.update(cx); - self.deque.pop_front() - } - - pub fn pop_back(&mut self, cx: &mut Context<'_>) -> Option { - self.update(cx); - self.deque.pop_back() - } - - pub fn push_front(&mut self, value: T) { - self.wake(); - self.deque.push_front(value); - } - - pub fn push_back(&mut self, value: T) { - self.wake(); - self.deque.push_back(value); - } -} diff --git a/src/exo/routing/connection_message.py b/src/exo/routing/connection_message.py index b00891124..ddcd143ba 100644 --- a/src/exo/routing/connection_message.py +++ b/src/exo/routing/connection_message.py @@ -1,15 +1,13 @@ from exo_pyo3_bindings import PyFromSwarm -from exo.shared.types.common import NodeId from exo.utils.pydantic_ext import FrozenModel """Serialisable types for Connection Updates/Messages""" class ConnectionMessage(FrozenModel): - node_id: NodeId connected: bool @classmethod def from_update(cls, update: PyFromSwarm.Connection) -> "ConnectionMessage": - return cls(node_id=NodeId(update.peer_id), connected=update.connected) + return cls(connected=update.connected) diff --git a/src/exo/routing/router.py b/src/exo/routing/router.py index a9341d10c..4ef2311c3 100644 --- a/src/exo/routing/router.py +++ b/src/exo/routing/router.py @@ -13,11 +13,8 @@ from anyio import ( sleep_forever, ) from exo_pyo3_bindings import ( - AllQueuesFullError, Keypair, - MessageTooLargeError, NetworkingHandle, - NoPeersSubscribedToTopicError, PyFromSwarm, ) from filelock import FileLock @@ -191,9 +188,9 @@ class Router: from_swarm = await self._net.recv() logger.debug(from_swarm) match from_swarm: - case PyFromSwarm.Message(origin, topic, data): + case PyFromSwarm.Message(topic, data): logger.trace( - f"Received message on {topic} from {origin} with payload {data}" + f"Received message on {topic} with payload {data}" ) if topic not in self.topic_routers: logger.warning( @@ -225,21 +222,12 @@ class Router: async def _networking_publish(self): with self.networking_receiver as networked_items: async for topic, data in networked_items: - try: - logger.trace(f"Sending message on {topic} with payload {data}") - if len(data) > 1024 * 1024: - logger.warning( - "Sending overlarge payload, network performance may be temporarily degraded" - ) - await self._net.gossipsub_publish(topic, data) - except NoPeersSubscribedToTopicError: - pass - except AllQueuesFullError: - logger.warning(f"All peer queues full, dropping message on {topic}") - except MessageTooLargeError: + logger.trace(f"Sending message on {topic} with payload {data}") + if len(data) > 1024 * 1024: logger.warning( - f"Message too large for gossipsub on {topic} ({len(data)} bytes), dropping" + "Sending overlarge payload, network performance may be temporarily degraded" ) + await self._net.gossipsub_publish(topic, data) def get_node_id_keypair( diff --git a/src/exo/shared/logging.py b/src/exo/shared/logging.py index 9e37ea5ad..530b9e24e 100644 --- a/src/exo/shared/logging.py +++ b/src/exo/shared/logging.py @@ -46,7 +46,8 @@ class _InterceptHandler(logging.Handler): def logger_setup(log_file: Path | None, verbosity: int = 0): """Set up logging for this process - formatting, file handles, verbosity and output""" - logging.getLogger("exo_pyo3_bindings").setLevel(logging.WARNING) + logging.getLogger("exo_net").setLevel(logging.INFO) + logging.getLogger("networking").setLevel(logging.INFO) logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("httpcore").setLevel(logging.WARNING) diff --git a/src/exo/shared/tests/test_election.py b/src/exo/shared/tests/test_election.py index 7ec66714f..d1612e85e 100644 --- a/src/exo/shared/tests/test_election.py +++ b/src/exo/shared/tests/test_election.py @@ -327,7 +327,7 @@ async def test_connection_message_triggers_new_round_broadcast() -> None: tg.start_soon(election.run) # Send any connection message object; we close quickly to cancel before result creation - await cm_tx.send(ConnectionMessage(node_id=NodeId(), connected=True)) + await cm_tx.send(ConnectionMessage(connected=True)) # Expect a broadcast for the new round at clock=1 while True: diff --git a/src/exo/utils/banner.py b/src/exo/utils/banner.py index 2742832e1..075ad056b 100644 --- a/src/exo/utils/banner.py +++ b/src/exo/utils/banner.py @@ -38,7 +38,7 @@ def print_startup_banner(port: int) -> None: ╔═══════════════════════════════════════════════════════════════════════╗ ║ ║ -║ 🌐 Dashboard & API Ready ║ +║ Dashboard & API Ready ║ ║ ║ ║ {dashboard_url}{" " * (69 - len(dashboard_url))}║ ║ ║