diff --git a/Cargo.lock b/Cargo.lock index da62117c..889d2be7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aead" version = "0.5.2" @@ -63,9 +69,9 @@ dependencies = [ [[package]] name = "allo-isolate" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b6d794345b06592d0ebeed8e477e41b71e5a0a49df4fc0e4184d5938b99509" +checksum = "1f67642eb6773fb42a95dd3b348c305ee18dee6642274c6b412d67e985e3befc" dependencies = [ "atomic", ] @@ -132,7 +138,7 @@ name = "ansi-parser" version = "0.9.1" source = "git+https://gitlab.com/davidbittner/ansi-parser.git#a431fb31f8b7f5680525987c1d67d4863ac02660" dependencies = [ - "heapless", + "heapless 0.8.0", "nom", ] @@ -147,9 +153,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -162,49 +168,49 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "74f37166d7d48a0284b99dd824694c26119c700b53bf0d1540cdb147dbdaaf13" [[package]] name = "arboard" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" +checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" dependencies = [ "clipboard-win", "log", @@ -228,16 +234,22 @@ dependencies = [ ] [[package]] -name = "arrayref" -version = "0.3.8" +name = "arraydeque" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-attributes" @@ -274,14 +286,14 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", + "fastrand 2.1.1", + "futures-lite 2.4.0", "slab", ] @@ -296,7 +308,7 @@ dependencies = [ "async-io 2.3.4", "async-lock 3.4.0", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.4.0", "once_cell", ] @@ -330,10 +342,10 @@ dependencies = [ "cfg-if 1.0.0", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.4.0", "parking", "polling 3.7.3", - "rustix 0.38.34", + "rustix 0.38.39", "slab", "tracing", "windows-sys 0.59.0", @@ -361,19 +373,21 @@ dependencies = [ [[package]] name = "async-process" -version = "1.8.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", + "async-channel 2.3.1", + "async-io 2.3.4", + "async-lock 3.4.0", "async-signal", + "async-task", "blocking", "cfg-if 1.0.0", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.34", - "windows-sys 0.48.0", + "event-listener 5.3.1", + "futures-lite 2.4.0", + "rustix 0.38.39", + "tracing", ] [[package]] @@ -388,7 +402,7 @@ dependencies = [ "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.34", + "rustix 0.38.39", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -396,22 +410,22 @@ dependencies = [ [[package]] name = "async-std" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" dependencies = [ "async-attributes", "async-channel 1.9.0", "async-global-executor", - "async-io 1.13.0", - "async-lock 2.8.0", + "async-io 2.3.4", + "async-lock 3.4.0", "async-process", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite 1.13.0", - "gloo-timers", + "futures-lite 2.4.0", + "gloo-timers 0.3.0", "kv-log-macro", "log", "memchr", @@ -439,9 +453,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -450,13 +464,13 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -480,13 +494,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -528,7 +542,7 @@ dependencies = [ "futures-task", "futures-timer", "futures-util", - "pin-project", + "pin-project 1.1.7", "rustc_version", "tokio", "wasm-bindgen-futures", @@ -551,6 +565,15 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -581,9 +604,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" @@ -594,7 +617,7 @@ dependencies = [ "async-trait", "axum-core", "bitflags 1.3.2", - "bytes", + "bytes 1.8.0", "futures-util", "http 0.2.12", "http-body", @@ -620,7 +643,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", - "bytes", + "bytes 1.8.0", "futures-util", "http 0.2.12", "http-body", @@ -640,7 +663,7 @@ dependencies = [ "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", ] @@ -703,9 +726,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9ec96fe9a81b5e365f9db71fe00edc4fe4ca2cc7dcb7861f0603012a7caa210" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" dependencies = [ "arrayref", "arrayvec", @@ -722,7 +745,7 @@ checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -777,7 +800,7 @@ dependencies = [ "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.4.0", "piper", ] @@ -804,17 +827,23 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "capnp" -version = "0.19.6" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de71387912cac7dd3cb7c219e09628411620a18061bba58c71453c26ae7bf66a" +checksum = "4e985a566bdaae9a428a957d12b10c318d41b2afddb54cfbb764878059df636e" dependencies = [ - "embedded-io", + "embedded-io 0.6.1", ] [[package]] @@ -828,9 +857,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.11" +version = "1.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb8dd288a69fc53a1996d7ecfbf4a20d59065bff137ce7e56bbd620de191189" +checksum = "67b9470d453346108f93a59222a9a1a5724db32d0a4727b7ab7ace4b4d822dc9" dependencies = [ "shlex", ] @@ -948,15 +977,15 @@ dependencies = [ "bitflags 1.3.2", "strsim 0.8.0", "textwrap", - "unicode-width", + "unicode-width 0.1.14", "vec_map", ] [[package]] name = "clap" -version = "4.5.15" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d8838454fda655dafd3accb2b6e2bea645b9e4078abe84a22ceb947235c5cc" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -964,9 +993,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -977,14 +1006,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1004,13 +1033,19 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" dependencies = [ "cc", ] +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + [[package]] name = "color-eyre" version = "0.6.3" @@ -1026,9 +1061,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" @@ -1036,7 +1071,7 @@ version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "bytes", + "bytes 1.8.0", "memchr", ] @@ -1066,15 +1101,14 @@ dependencies = [ [[package]] name = "config" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7328b20597b53c2454f0b1919720c25c7339051c02b72b7e05409e00b14132be" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" dependencies = [ - "lazy_static", "nom", "pathdiff", "serde", - "yaml-rust", + "yaml-rust2", ] [[package]] @@ -1086,7 +1120,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -1146,9 +1180,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "core-foundation" @@ -1168,9 +1202,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1184,6 +1218,12 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.13" @@ -1226,7 +1266,7 @@ dependencies = [ "futures-core", "mio 1.0.2", "parking_lot 0.12.3", - "rustix 0.38.34", + "rustix 0.38.39", "signal-hook", "signal-hook-mio", "winapi", @@ -1254,9 +1294,9 @@ dependencies = [ [[package]] name = "crypto-mac" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "generic-array", "subtle", @@ -1269,7 +1309,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1299,7 +1339,7 @@ dependencies = [ "signal-hook", "tokio", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -1320,7 +1360,7 @@ dependencies = [ "log", "smallvec", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.0", ] [[package]] @@ -1346,7 +1386,7 @@ dependencies = [ "tokio", "toml 0.8.19", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", "xi-unicode", ] @@ -1382,7 +1422,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1438,7 +1478,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1460,7 +1500,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1553,6 +1593,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "dyn-clone" version = "1.0.17" @@ -1591,6 +1642,12 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + [[package]] name = "embedded-io" version = "0.6.1" @@ -1605,23 +1662,23 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "enum-as-inner" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1641,7 +1698,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1684,7 +1741,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -1728,9 +1785,9 @@ dependencies = [ [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "event-listener" @@ -1738,17 +1795,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "5.3.1" @@ -1805,9 +1851,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "ffi-support" @@ -1827,9 +1873,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1845,12 +1891,12 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1873,9 +1919,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", @@ -1925,15 +1971,15 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.39", "windows-sys 0.48.0", ] [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1946,9 +1992,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1956,15 +2002,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1973,9 +2019,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1994,11 +2040,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "3f1fa2f9765705486b33fd2acf1577f8ec449c2ba1f318ae5447697b7c08d210" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-core", "futures-io", "parking", @@ -2007,26 +2053,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -2034,15 +2080,15 @@ version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" dependencies = [ - "gloo-timers", + "gloo-timers 0.2.6", "send_wrapper 0.4.0", ] [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2056,6 +2102,18 @@ dependencies = [ "slab", ] +[[package]] +name = "futures_codec" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b" +dependencies = [ + "bytes 0.5.6", + "futures", + "memchr", + "pin-project 0.4.30", +] + [[package]] name = "gen_ops" version = "0.4.0" @@ -2119,6 +2177,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "gloo-utils" version = "0.1.7" @@ -2132,6 +2202,19 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "grpcio" version = "0.12.1" @@ -2169,13 +2252,13 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "bytes", + "bytes 1.8.0", "fnv", "futures-core", "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.4.0", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2188,6 +2271,15 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hash32" version = "0.3.1" @@ -2222,6 +2314,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" + [[package]] name = "hashlink" version = "0.8.4" @@ -2246,19 +2344,27 @@ dependencies = [ [[package]] name = "heapless" -version = "0.8.0" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" dependencies = [ - "hash32", + "atomic-polyfill", + "hash32 0.2.1", + "rustc_version", + "serde", + "spin", "stable_deref_trait", ] [[package]] -name = "heck" -version = "0.4.1" +name = "heapless" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32 0.3.1", + "stable_deref_trait", +] [[package]] name = "heck" @@ -2378,13 +2484,24 @@ dependencies = [ "winapi", ] +[[package]] +name = "hostname" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "windows 0.52.0", +] + [[package]] name = "http" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes", + "bytes 1.8.0", "fnv", "itoa", ] @@ -2395,7 +2512,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ - "bytes", + "bytes 1.8.0", "fnv", "itoa", ] @@ -2406,16 +2523,16 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "bytes", + "bytes 1.8.0", "http 0.2.12", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -2431,11 +2548,11 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ - "bytes", + "bytes 1.8.0", "futures-channel", "futures-core", "futures-util", @@ -2471,7 +2588,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes", + "bytes 1.8.0", "hyper", "native-tls", "tokio", @@ -2480,9 +2597,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2501,6 +2618,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -2519,12 +2754,23 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -2561,12 +2807,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.1", ] [[package]] @@ -2612,9 +2858,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "ipnetwork" @@ -2679,9 +2925,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2792,9 +3038,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libc-print" @@ -2823,7 +3069,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.5.7", ] [[package]] @@ -2839,9 +3085,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.19" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -2867,6 +3113,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + [[package]] name = "lock_api" version = "0.4.12" @@ -2972,9 +3224,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -2995,6 +3247,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "0.8.11" @@ -3173,7 +3434,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b33524dc0968bfad349684447bfce6db937a9ac3332a1fe60c0c5a5ce63f21" dependencies = [ - "bytes", + "bytes 1.8.0", "futures", "log", "netlink-packet-core", @@ -3189,7 +3450,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "async-io 1.13.0", - "bytes", + "bytes 1.8.0", "futures", "libc", "log", @@ -3491,9 +3752,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" @@ -3524,7 +3785,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -3705,7 +3966,7 @@ dependencies = [ "lazy_static", "once_cell", "opentelemetry 0.23.0", - "ordered-float 4.2.2", + "ordered-float 4.5.0", "percent-encoding", "rand", "thiserror", @@ -3730,9 +3991,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "4.2.2" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a91171844676f8c7990ce64959210cd2eaef32c2612c50f9fae9f8aaa6065a6" +checksum = "c65ee1f9701bf938026630b455d5315f490640234259037edb259798b3bcf85e" dependencies = [ "num-traits", ] @@ -3785,9 +4046,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -3832,7 +4093,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.5.7", "smallvec", "windows-targets 0.52.6", ] @@ -3856,9 +4117,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" [[package]] name = "peeking_take_while" @@ -3879,7 +4140,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.4.0", + "indexmap 2.6.0", ] [[package]] @@ -3894,29 +4155,49 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a" dependencies = [ - "pin-project-internal", + "pin-project-internal 0.4.30", +] + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal 1.1.7", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 1.0.109", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -3931,7 +4212,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-io", ] @@ -3947,9 +4228,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "polling" @@ -3977,7 +4258,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.34", + "rustix 0.38.39", "tracing", "windows-sys 0.59.0", ] @@ -3995,19 +4276,32 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "portable-atomic-util" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdd8420072e66d54a407b3316991fe946ce3ab1083a7f575b2463866624704d" +checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" dependencies = [ "portable-atomic", ] +[[package]] +name = "postcard" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless 0.7.17", + "serde", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -4025,12 +4319,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -4054,9 +4348,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -4067,7 +4361,7 @@ version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ - "bytes", + "bytes 1.8.0", "prost-derive 0.11.9", ] @@ -4077,7 +4371,7 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ - "bytes", + "bytes 1.8.0", "prost-derive 0.12.6", ] @@ -4087,8 +4381,8 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ - "bytes", - "heck 0.5.0", + "bytes 1.8.0", + "heck", "itertools 0.12.1", "log", "multimap", @@ -4098,7 +4392,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.74", + "syn 2.0.87", "tempfile", ] @@ -4125,7 +4419,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -4160,9 +4454,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4226,18 +4520,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -4246,14 +4540,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -4267,13 +4561,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -4284,9 +4578,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -4295,7 +4589,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64", - "bytes", + "bytes 1.8.0", "encoding_rs", "futures-core", "futures-util", @@ -4334,7 +4628,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ - "hostname", + "hostname 0.3.1", "quick-error", ] @@ -4421,9 +4715,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -4444,9 +4738,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" dependencies = [ "bitflags 2.6.0", "errno", @@ -4488,9 +4782,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rustyline-async" @@ -4501,11 +4795,11 @@ dependencies = [ "crossterm 0.28.1", "futures-channel", "futures-util", - "pin-project", + "pin-project 1.1.7", "thingbuf", "thiserror", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -4535,9 +4829,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.1.14" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79da19444d9da7a9a82b80ecf059eceba6d3129d84a8610fd25ff2364f255466" +checksum = "d8d25269dd3a12467afe2e510f69fb0b46b698e5afb296b59f2145259deaf8e8" dependencies = [ "sdd", ] @@ -4572,7 +4866,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.29.1", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -4599,9 +4893,9 @@ dependencies = [ [[package]] name = "sdd" -version = "3.0.2" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0495e4577c672de8254beb68d01a9b62d0e8a13c099edecdbedccce3223cd29f" +checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" [[package]] name = "secret-service" @@ -4638,9 +4932,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -4669,9 +4963,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.207" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" dependencies = [ "serde_derive", ] @@ -4728,13 +5022,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.207" +version = "1.0.214" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -4745,7 +5039,7 @@ checksum = "e578a843d40b4189a4d66bba51d7684f57da5bd7c304c64e14bd63efbef49509" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -4756,14 +5050,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] name = "serde_json" -version = "1.0.124" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "itoa", "memchr", @@ -4779,14 +5073,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -4809,7 +5103,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -4852,7 +5146,7 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -4863,7 +5157,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -5093,9 +5387,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.6.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" @@ -5110,9 +5404,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.74" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -5125,6 +5419,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "sysinfo" version = "0.30.13" @@ -5162,14 +5467,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.1.0", + "fastrand 2.1.1", "once_cell", - "rustix 0.38.34", + "rustix 0.38.39", "windows-sys 0.59.0", ] @@ -5184,12 +5489,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" dependencies = [ - "rustix 0.38.34", - "windows-sys 0.48.0", + "rustix 0.38.39", + "windows-sys 0.59.0", ] [[package]] @@ -5198,7 +5503,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -5208,27 +5513,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "662b54ef6f7b4e71f683dadc787bbb2d8e8ef2f91b682ebed3164a5a7abca905" dependencies = [ "parking_lot 0.12.3", - "pin-project", + "pin-project 1.1.7", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -5284,6 +5589,16 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -5301,12 +5616,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" dependencies = [ "backtrace", - "bytes", + "bytes 1.8.0", "libc", "mio 1.0.2", "parking_lot 0.12.3", @@ -5336,7 +5651,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -5351,9 +5666,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -5362,11 +5677,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ - "bytes", + "bytes 1.8.0", "futures-core", "futures-io", "futures-sink", @@ -5392,7 +5707,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit 0.22.22", ] [[package]] @@ -5410,22 +5725,22 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.6.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.4.0", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow 0.6.20", ] [[package]] @@ -5437,7 +5752,7 @@ dependencies = [ "async-trait", "axum", "base64", - "bytes", + "bytes 1.8.0", "futures-core", "futures-util", "h2", @@ -5446,7 +5761,7 @@ dependencies = [ "hyper", "hyper-timeout", "percent-encoding", - "pin-project", + "pin-project 1.1.7", "prost 0.11.9", "tokio", "tokio-stream", @@ -5466,14 +5781,14 @@ dependencies = [ "async-trait", "axum", "base64", - "bytes", + "bytes 1.8.0", "h2", "http 0.2.12", "http-body", "hyper", "hyper-timeout", "percent-encoding", - "pin-project", + "pin-project 1.1.7", "prost 0.12.6", "tokio", "tokio-stream", @@ -5492,7 +5807,7 @@ dependencies = [ "futures-core", "futures-util", "indexmap 1.9.3", - "pin-project", + "pin-project 1.1.7", "pin-project-lite", "rand", "slab", @@ -5547,7 +5862,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -5666,12 +5981,12 @@ dependencies = [ [[package]] name = "tracing-perfetto" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd21777b526dfcb57f11f65aa8a2024d83e1db52841993229b6e282e511978b7" +checksum = "4c70bb5e88ac1d7f90334d3d84989b9862dfc2c907f339a1d494ee643246029c" dependencies = [ "anyhow", - "bytes", + "bytes 1.8.0", "chrono", "prost 0.12.6", "prost-build", @@ -5714,9 +6029,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" dependencies = [ "serde", "stable_deref_trait", @@ -5734,7 +6049,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6b26cf145f2f3b9ff84e182c448eaf05468e247f148cf3d2a7d67d78ff023a0" dependencies = [ - "gloo-utils", + "gloo-utils 0.1.7", "serde", "serde-wasm-bindgen 0.5.0", "serde_json", @@ -5751,7 +6066,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.28.0", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -5761,7 +6076,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", - "bytes", + "bytes 1.8.0", "data-encoding", "http 0.2.12", "httparse", @@ -5780,7 +6095,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" dependencies = [ "byteorder", - "bytes", + "bytes 1.8.0", "data-encoding", "http 1.1.0", "httparse", @@ -5799,36 +6114,42 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "unicode_categories" @@ -5860,12 +6181,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding", ] @@ -5881,6 +6202,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -5895,9 +6228,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" [[package]] name = "vcpkg" @@ -5929,8 +6262,8 @@ dependencies = [ "async-tungstenite 0.23.0", "cfg-if 1.0.0", "chrono", - "clap 4.5.15", - "config 0.14.0", + "clap 4.5.20", + "config 0.14.1", "console", "crossbeam-channel", "cursive", @@ -5956,7 +6289,7 @@ dependencies = [ "thiserror", "tokio", "tokio-util", - "unicode-width", + "unicode-width 0.1.14", "veilid-bugsalot", "veilid-tools", ] @@ -6080,7 +6413,7 @@ dependencies = [ "data-encoding", "ffi-support", "futures-util", - "hostname", + "hostname 0.3.1", "jni", "lazy_static", "libc-print", @@ -6135,16 +6468,16 @@ dependencies = [ "backtrace", "cfg-if 1.0.0", "chrono", - "clap 4.5.15", + "clap 4.5.20", "color-eyre", - "config 0.14.0", + "config 0.14.1", "console-subscriber", "ctrlc", "daemonize", "directories", "flume", "futures-util", - "hostname", + "hostname 0.4.0", "json", "lazy_static", "nix 0.29.0", @@ -6196,6 +6529,7 @@ dependencies = [ "flume", "fn_name", "futures-util", + "futures_codec", "getrandom", "ifstructs", "jni", @@ -6213,11 +6547,13 @@ dependencies = [ "oslog", "paranoid-android", "parking_lot 0.12.3", + "postcard", "rand", "rand_core", "range-set-blaze", "rtnetlink", "send_wrapper 0.6.0", + "serde", "serial_test 2.0.0", "simplelog", "static_assertions", @@ -6247,7 +6583,7 @@ dependencies = [ "console_error_panic_hook", "data-encoding", "futures-util", - "gloo-utils", + "gloo-utils 0.2.0", "js-sys", "lazy_static", "parking_lot 0.12.3", @@ -6306,9 +6642,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if 1.0.0", "once_cell", @@ -6319,24 +6655,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -6346,9 +6682,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6356,28 +6692,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "d381749acb0943d357dcbd8f0b100640679883fcdeeef04def49daf8d33a5426" dependencies = [ "console_error_panic_hook", "js-sys", @@ -6390,13 +6726,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "c97b2ef2c8d627381e51c071c2ab328eac606d3f69dd82bcbca20a9e389d95f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", ] [[package]] @@ -6418,9 +6754,9 @@ checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -6475,9 +6811,9 @@ dependencies = [ [[package]] name = "wg" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dadf90865f15d5c2d87f126a56ce3715b3a233641acdd10f59200aa7f4c81fb9" +checksum = "7aafc5e81e847f05d6770e074faf7b1cd4a5dec9a0e88eac5d55e20fdfebee9a" dependencies = [ "event-listener 5.3.1", "futures-core", @@ -6495,7 +6831,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix 0.38.39", ] [[package]] @@ -6819,9 +7155,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -6836,6 +7172,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -6862,7 +7210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ "gethostname", - "rustix 0.38.34", + "rustix 0.38.39", "x11rb-protocol", ] @@ -6892,9 +7240,9 @@ checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" [[package]] name = "xml-rs" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" [[package]] name = "xmltree" @@ -6914,6 +7262,41 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", +] + [[package]] name = "zbus" version = "1.9.3" @@ -6967,7 +7350,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", ] [[package]] @@ -6987,7 +7391,29 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.87", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] diff --git a/veilid-core/Cargo.toml b/veilid-core/Cargo.toml index 5d17bff1..4106d079 100644 --- a/veilid-core/Cargo.toml +++ b/veilid-core/Cargo.toml @@ -133,8 +133,8 @@ hickory-resolver = { version = "0.24.1", optional = true } # Serialization capnp = { version = "0.19.6", default-features = false, features = ["alloc"] } -serde = { version = "1.0.204", features = ["derive", "rc"] } -serde_json = { version = "1.0.120" } +serde = { version = "1.0.214", features = ["derive", "rc"] } +serde_json = { version = "1.0.132" } serde-big-array = "0.5.1" json = "0.12.4" data-encoding = { version = "2.6.0" } diff --git a/veilid-core/src/logging/facilities.rs b/veilid-core/src/logging/facilities.rs index 5adc608f..93d00e5f 100644 --- a/veilid-core/src/logging/facilities.rs +++ b/veilid-core/src/logging/facilities.rs @@ -151,42 +151,6 @@ macro_rules! log_client_api { } } -#[macro_export] -macro_rules! log_network_result { - (error $text:expr) => {error!( - target: "network_result", - "{}", - $text, - )}; - (error $fmt:literal, $($arg:expr),+) => { - error!(target: "network_result", $fmt, $($arg),+); - }; - (warn $text:expr) => {warn!( - target: "network_result", - "{}", - $text, - )}; - (warn $fmt:literal, $($arg:expr),+) => { - warn!(target:"network_result", $fmt, $($arg),+); - }; - (debug $text:expr) => {debug!( - target: "network_result", - "{}", - $text, - )}; - (debug $fmt:literal, $($arg:expr),+) => { - debug!(target:"network_result", $fmt, $($arg),+); - }; - ($text:expr) => {trace!( - target: "network_result", - "{}", - $text, - )}; - ($fmt:literal, $($arg:expr),+) => { - trace!(target:"network_result", $fmt, $($arg),+); - } -} - #[macro_export] macro_rules! log_rpc { (error $text:expr) => { error!( diff --git a/veilid-flutter/example/pubspec.lock b/veilid-flutter/example/pubspec.lock index db0901a0..97e85f2c 100644 --- a/veilid-flutter/example/pubspec.lock +++ b/veilid-flutter/example/pubspec.lock @@ -450,7 +450,7 @@ packages: path: ".." relative: true source: path - version: "0.3.4" + version: "0.4.1" veilid_test: dependency: "direct dev" description: diff --git a/veilid-tools/Cargo.toml b/veilid-tools/Cargo.toml index 0578c282..5b9a6b00 100644 --- a/veilid-tools/Cargo.toml +++ b/veilid-tools/Cargo.toml @@ -54,11 +54,14 @@ tracing-subscriber = { version = "0.3.18", features = [ log = { version = "0.4.22" } eyre = "0.6.12" static_assertions = "1.1.0" +serde = { version = "1.0.214", features = ["derive", "rc"] } +postcard = { version = "1.0.10", features = ["use-std"] } cfg-if = "1.0.0" thiserror = "1.0.63" futures-util = { version = "0.3.30", default-features = false, features = [ "alloc", ] } +futures_codec = "0.4.1" parking_lot = "0.12.3" async-lock = "3.4.0" once_cell = "1.19.0" diff --git a/veilid-tools/src/lib.rs b/veilid-tools/src/lib.rs index 13b715b5..2c3dd20f 100644 --- a/veilid-tools/src/lib.rs +++ b/veilid-tools/src/lib.rs @@ -46,7 +46,6 @@ pub mod mutable_future; #[cfg(not(target_arch = "wasm32"))] pub mod network_interfaces; pub mod network_result; -pub mod network_shim; pub mod random; pub mod single_shot_eventual; pub mod sleep; @@ -58,6 +57,7 @@ pub mod timeout; pub mod timeout_or; pub mod timestamp; pub mod tools; +pub mod virtual_network; #[cfg(target_arch = "wasm32")] pub mod wasm; diff --git a/veilid-tools/src/network_interfaces/mod.rs b/veilid-tools/src/network_interfaces/mod.rs index 2fce46b7..759d08d1 100644 --- a/veilid-tools/src/network_interfaces/mod.rs +++ b/veilid-tools/src/network_interfaces/mod.rs @@ -1,6 +1,7 @@ mod tools; use crate::*; +use serde::*; cfg_if::cfg_if! { if #[cfg(any(target_os = "linux", target_os = "android"))] { @@ -23,7 +24,7 @@ cfg_if::cfg_if! { } } -#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Hash, Clone)] +#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Serialize, Deserialize)] pub enum IfAddr { V4(Ifv4Addr), V6(Ifv6Addr), @@ -51,7 +52,7 @@ impl IfAddr { } /// Details about the ipv4 address of an interface on this host. -#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Hash, Clone)] +#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Serialize, Deserialize)] pub struct Ifv4Addr { /// The IP address of the interface. pub ip: Ipv4Addr, @@ -62,7 +63,7 @@ pub struct Ifv4Addr { } /// Details about the ipv6 address of an interface on this host. -#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Hash, Clone)] +#[derive(Debug, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Serialize, Deserialize)] pub struct Ifv6Addr { /// The IP address of the interface. pub ip: Ipv6Addr, @@ -73,7 +74,9 @@ pub struct Ifv6Addr { } /// Some of the flags associated with an interface. -#[derive(Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Copy)] +#[derive( + Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Copy, Serialize, Deserialize, +)] pub struct InterfaceFlags { pub is_loopback: bool, pub is_running: bool, @@ -82,7 +85,9 @@ pub struct InterfaceFlags { } /// Some of the flags associated with an address. -#[derive(Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Copy)] +#[derive( + Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash, Clone, Copy, Serialize, Deserialize, +)] pub struct AddressFlags { // common flags pub is_dynamic: bool, @@ -91,7 +96,7 @@ pub struct AddressFlags { pub is_preferred: bool, } -#[derive(PartialEq, Eq, Clone, Debug)] +#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] pub struct InterfaceAddress { if_addr: IfAddr, flags: AddressFlags, @@ -226,7 +231,7 @@ impl InterfaceAddress { // Wired, // Wired is usually free or cheap and high speed // } -#[derive(PartialEq, Eq, Clone)] +#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)] pub struct NetworkInterface { pub name: String, pub flags: InterfaceFlags, diff --git a/veilid-tools/src/network_result.rs b/veilid-tools/src/network_result.rs index ee7cd1b7..277e91f3 100644 --- a/veilid-tools/src/network_result.rs +++ b/veilid-tools/src/network_result.rs @@ -308,6 +308,42 @@ macro_rules! network_result_try { }; } +#[macro_export] +macro_rules! log_network_result { + (error $text:expr) => {error!( + target: "network_result", + "{}", + $text, + )}; + (error $fmt:literal, $($arg:expr),+) => { + error!(target: "network_result", $fmt, $($arg),+); + }; + (warn $text:expr) => {warn!( + target: "network_result", + "{}", + $text, + )}; + (warn $fmt:literal, $($arg:expr),+) => { + warn!(target:"network_result", $fmt, $($arg),+); + }; + (debug $text:expr) => {debug!( + target: "network_result", + "{}", + $text, + )}; + (debug $fmt:literal, $($arg:expr),+) => { + debug!(target:"network_result", $fmt, $($arg),+); + }; + ($text:expr) => {trace!( + target: "network_result", + "{}", + $text, + )}; + ($fmt:literal, $($arg:expr),+) => { + trace!(target:"network_result", $fmt, $($arg),+); + } +} + #[macro_export] macro_rules! network_result_value_or_log { ($r:expr => $f:expr) => { diff --git a/veilid-tools/src/network_shim/async_std.rs b/veilid-tools/src/network_shim/async_std.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/veilid-tools/src/network_shim/mod.rs b/veilid-tools/src/network_shim/mod.rs deleted file mode 100644 index 4ff4d49b..00000000 --- a/veilid-tools/src/network_shim/mod.rs +++ /dev/null @@ -1,63 +0,0 @@ -//! # Network Shim -//! -//! ## Networking abstraction layer -//! -//! Support for mocking and virtualizing network connections, as well as passing through to supported -//! networking functionality. -//! -//! The following structs are available that allow connecting to a centralized virtual -//! router to emulate a large scale network. -//! -//! * RouterClient -//! * RouterServer -//! -//! Additional traits are is implemented for all shimmed APIs that have static methods -//! like `new()`, `default()`, `connect()` and `bind()` to allow optional namespacing -//! such that the structs they produce are new network router clients with their own -//! distinct IP addresses, network segments, and network characteristics as allocated -//! by the [RouterServer]. -//! -//! A singleton RouterClient is created by this module that is used by default unless the -//! extension traits on the shimmed APIs are used to override it with another RouterClient instance. -//! -//! ## Available shims -//! -//! API-compatible shims for: -//! * Tokio (Native) -//! - [tokio::net::TcpListener] -//! - [tokio::net::TcpStream] -//! - [tokio::net::UdpSocket] -//! - [tokio_stream::wrappers::TcpListenerStream] -//! * Async-std (Native) -//! - [async_std::net::TcpListener] -//! - [async_std::net::TcpStream] -//! - [async_std::net::UdpSocket] -//! - [async_std::net::Incoming] -//! * std::net (Native) -//! - [std::net::TcpListener] -//! - [std::net::TcpStream] -//! - [std::net::UdpSocket] -//! - [std::net::Incoming] -//! * ws_stream_wasm (browser WASM) -//! - [ws_stream_wasm::WsMeta] -//! - [ws_stream_wasm::WsStream] -//! - [ws_stream_wasm::WsStreamIo] -//! -//! ## Other modules leveraging this module -//! -//! * `veilid-core`'s network `native` and `wasm` modules -//! * This crate's `network_interfaces` module -//! * This crate's `dns_lookup` module - -mod router_client; -mod router_server; - -#[cfg(feature = "async-std")] -mod async_std; -mod std; -#[cfg(feature = "tokio")] -mod tokio; -#[cfg(feature = "tokio-stream")] -mod tokio_stream; -#[cfg(feature = "ws_stream_wasm")] -mod ws_stream_wasm; diff --git a/veilid-tools/src/network_shim/router_client.rs b/veilid-tools/src/network_shim/router_client.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/veilid-tools/src/network_shim/std.rs b/veilid-tools/src/network_shim/std.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/veilid-tools/src/network_shim/tokio.rs b/veilid-tools/src/network_shim/tokio.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/veilid-tools/src/network_shim/tokio_stream.rs b/veilid-tools/src/network_shim/tokio_stream.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/veilid-tools/src/network_shim/ws_stream_wasm.rs b/veilid-tools/src/network_shim/ws_stream_wasm.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/veilid-tools/src/virtual_network/machine.rs b/veilid-tools/src/virtual_network/machine.rs new file mode 100644 index 00000000..ea4fb251 --- /dev/null +++ b/veilid-tools/src/virtual_network/machine.rs @@ -0,0 +1,23 @@ +use super::*; + +pub type MachineId = u64; + +#[derive(Clone)] +pub struct Machine { + pub router_client: RouterClient, + pub id: MachineId, +} + +pub fn set_default_machine(machine: Machine) { + *DEFAULT_MACHINE.lock() = Some(machine); +} + +pub fn take_default_machine() -> Option { + DEFAULT_MACHINE.lock().take() +} + +pub fn default_machine() -> Option { + (*DEFAULT_MACHINE.lock()).clone() +} + +static DEFAULT_MACHINE: Mutex> = Mutex::new(None); diff --git a/veilid-tools/src/virtual_network/mod.rs b/veilid-tools/src/virtual_network/mod.rs new file mode 100644 index 00000000..d1fe8f33 --- /dev/null +++ b/veilid-tools/src/virtual_network/mod.rs @@ -0,0 +1,57 @@ +//! # Virtual Network +//! +//! ## Networking abstraction layer +//! +//! Support for mocking and virtualizing network connections, as well as passing through to supported +//! networking functionality. +//! +//! The following structs are available that allow connecting to a centralized virtual +//! router to emulate a large scale network. +//! +//! * RouterClient +//! * RouterServer +//! * Machine +//! +//! Additional traits are is implemented for all shimmed APIs that have static methods +//! like `new()`, `default()`, `connect()` and `bind()` to allow optional namespacing +//! such that the structs they produce are new network router clients with their own +//! distinct IP addresses, network segments, and network characteristics as allocated +//! by the [RouterServer]. +//! +//! A singleton RouterClient can be registered with this module that is used by default unless the +//! `*_with_machine` API are used to override it with another Machine instance. +//! +//! ## Available APIs +//! +//! [VirtualTcpStream] +//! [VirtualUdpSocket] +//! [VirtualTcpListenerStream] +//! [VirtualWsMeta] +//! [VirtualWsStream] +//! +//! Traits are implemented for [futures_util::AsyncRead] and [futures_util::AsyncWrite] +//! Conversion traits are available for use with Tokio +//! +//! ## Other modules leveraging this module +//! +//! * `veilid-core`'s network `native` and `wasm` modules +//! * This crate's `network_interfaces` module +//! * This crate's `dns_lookup` module + +mod machine; +mod router_client; +mod router_op_table; +mod router_server; +mod serde_io_error; +mod virtual_network_error; +mod virtual_tcp_stream; +mod virtual_udp_socket; + +use super::*; + +pub use machine::*; +pub use router_client::*; +pub use router_server::*; +pub use virtual_network_error::*; +pub use virtual_tcp_stream::*; +pub use virtual_udp_socket::*; diff --git a/veilid-tools/src/virtual_network/router_client.rs b/veilid-tools/src/virtual_network/router_client.rs new file mode 100644 index 00000000..c4b9aa0f --- /dev/null +++ b/veilid-tools/src/virtual_network/router_client.rs @@ -0,0 +1,518 @@ +use super::*; +use core::sync::atomic::AtomicU64; +use futures_codec::{Bytes, BytesCodec, FramedRead, FramedWrite}; +use futures_util::{ + io::BufReader, stream::FuturesUnordered, AsyncReadExt, AsyncWriteExt, FutureExt, SinkExt, + StreamExt, TryStreamExt, +}; +use postcard::{from_bytes, to_stdvec}; +use router_op_table::*; +use serde::*; +use std::io; +use stop_token::future::FutureExt as _; + +struct RouterClientInner { + jh_handler: Option>, + stop_source: Option, +} + +struct RouterClientUnlockedInner { + receiver: flume::Receiver, + sender: flume::Sender, + next_message_id: AtomicU64, + router_op_waiter: RouterOpWaiter, +} + +pub type MessageId = u64; +pub type SocketId = u64; + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +enum ServerProcessorRequest { + AllocateMachine, + ReleaseMachine { + machine_id: MachineId, + }, + GetInterfaces { + machine_id: MachineId, + }, + TcpConnect { + machine_id: MachineId, + local_address: Option, + remote_address: SocketAddr, + timeout_ms: u32, + options: VirtualTcpOptions, + }, + TcpBind { + machine_id: MachineId, + local_address: Option, + options: VirtualTcpOptions, + }, + TcpAccept { + machine_id: MachineId, + socket_id: SocketId, + }, + Close { + machine_id: MachineId, + socket_id: SocketId, + }, + UdpBind { + machine_id: MachineId, + local_address: Option, + options: VirtualUdpOptions, + }, + Send { + machine_id: MachineId, + socket_id: SocketId, + data: Vec, + }, + SendTo { + machine_id: MachineId, + socket_id: SocketId, + remote_address: SocketAddr, + data: Vec, + }, + Recv { + machine_id: MachineId, + socket_id: u64, + len: u32, + }, + RecvFrom { + machine_id: MachineId, + socket_id: u64, + len: u32, + }, +} + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +struct ServerProcessorRequestMessage { + message_id: MessageId, + request: ServerProcessorRequest, +} + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +enum ServerProcessorResponse { + AllocateMachine { + machine_id: MachineId, + }, + ReleaseMachine, + GetInterfaces { + interfaces: BTreeMap, + }, + TcpConnect { + socket_id: SocketId, + }, + TcpBind { + socket_id: SocketId, + }, + TcpAccept { + child_socket_id: SocketId, + }, + UdpBind { + socket_id: SocketId, + }, + Close, + Send { + len: u32, + }, + SendTo { + len: u32, + }, + Recv { + data: Vec, + }, + RecvFrom { + remote_address: SocketAddr, + data: Vec, + }, +} + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +enum ServerProcessorResponseStatus { + Success(ServerProcessorResponse), + InvalidMachineId, + InvalidSocketId, + IoError(#[serde(with = "serde_io_error::SerdeIoErrorKindDef")] io::ErrorKind), +} + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +struct ServerProcessorResponseMessage { + message_id: MessageId, + status: ServerProcessorResponseStatus, +} + +#[derive(Clone)] +pub struct RouterClient { + unlocked_inner: Arc, + inner: Arc>, +} + +impl RouterClient { + ////////////////////////////////////////////////////////////////////////// + // Public interface + + #[cfg(not(target_arch = "wasm32"))] + pub async fn router_connect_tcp(host: H) -> ::std::io::Result { + let addrs = host.to_socket_addrs()?.collect::>(); + + // Connect to RouterServer + let ts_reader; + let ts_writer; + cfg_if! { + if #[cfg(feature="rt-tokio")] { + let ts = ::tokio::net::TcpStream::connect(addrs.as_slice()).await?; + let (reader, writer) = ts.into_split(); + use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt}; + ts_reader = reader.compat(); + ts_writer = writer.compat_write(); + } else if #[cfg(feature="rt-async-std")] { + use futures_util::io::AsyncReadExt; + ts = ::async_std::net::TcpStream::connect(addrs.as_slice()).await?; + (ts_reader, ts_writer) = ts.split(); + } else { + compile_error!("must choose an executor"); + } + } + + let ts_buf_reader = BufReader::new(ts_reader); + + // Create channels + let (client_sender, server_receiver) = flume::unbounded::(); + let (server_sender, client_receiver) = flume::unbounded::(); + + // Create stopper + let stop_source = StopSource::new(); + + // Spawn a client connection handler + let jh_handler = spawn( + "RouterClient server processor", + Self::run_server_processor( + ts_buf_reader, + ts_writer, + server_receiver, + server_sender, + stop_source.token(), + ), + ); + + Ok(Self::new( + client_receiver, + client_sender, + jh_handler, + stop_source, + )) + } + + #[cfg(target_arch = "wasm32")] + pub async fn router_connect_ws>(host: H) -> ::std::io::Result { + let host = host.as_ref(); + + Ok(RouterClient {}) + } + + pub async fn disconnect(self) { + drop(self.inner.lock().stop_source.take()); + let jh_handler = self.inner.lock().jh_handler.take(); + if let Some(jh_handler) = jh_handler { + jh_handler.await; + } + } + + pub async fn allocate_machine(self) -> VirtualNetworkResult { + let request = ServerProcessorRequest::AllocateMachine; + let ServerProcessorResponse::AllocateMachine { machine_id } = + self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(machine_id) + } + + pub async fn release_machine(self, machine_id: MachineId) -> VirtualNetworkResult<()> { + let request = ServerProcessorRequest::ReleaseMachine { machine_id }; + let ServerProcessorResponse::ReleaseMachine = self.perform_request(request).await? else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(()) + } + + pub async fn get_interfaces( + self, + machine_id: MachineId, + ) -> VirtualNetworkResult> { + let request = ServerProcessorRequest::GetInterfaces { machine_id }; + let ServerProcessorResponse::GetInterfaces { interfaces } = + self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(interfaces) + } + + pub async fn tcp_connect( + self, + machine_id: MachineId, + remote_address: SocketAddr, + local_address: Option, + timeout_ms: u32, + options: VirtualTcpOptions, + ) -> VirtualNetworkResult { + let request = ServerProcessorRequest::TcpConnect { + machine_id, + local_address, + remote_address, + timeout_ms, + options, + }; + let ServerProcessorResponse::TcpConnect { socket_id } = + self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(socket_id) + } + + pub async fn tcp_bind( + self, + machine_id: MachineId, + local_address: Option, + options: VirtualTcpOptions, + ) -> VirtualNetworkResult { + let request = ServerProcessorRequest::TcpBind { + machine_id, + local_address, + options, + }; + let ServerProcessorResponse::TcpBind { socket_id } = self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(socket_id) + } + + pub async fn tcp_accept( + self, + machine_id: MachineId, + socket_id: SocketId, + ) -> VirtualNetworkResult { + let request = ServerProcessorRequest::TcpAccept { + machine_id, + socket_id, + }; + let ServerProcessorResponse::TcpAccept { child_socket_id } = + self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(child_socket_id) + } + + pub async fn udp_bind( + self, + machine_id: MachineId, + local_address: Option, + options: VirtualUdpOptions, + ) -> VirtualNetworkResult { + let request = ServerProcessorRequest::UdpBind { + machine_id, + local_address, + options, + }; + let ServerProcessorResponse::UdpBind { socket_id } = self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(socket_id) + } + + pub async fn close( + self, + machine_id: MachineId, + socket_id: SocketId, + ) -> VirtualNetworkResult<()> { + let request = ServerProcessorRequest::Close { + machine_id, + socket_id, + }; + let ServerProcessorResponse::Close = self.perform_request(request).await? else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(()) + } + + pub async fn send( + self, + machine_id: MachineId, + socket_id: SocketId, + data: Vec, + ) -> VirtualNetworkResult { + let request = ServerProcessorRequest::Send { + machine_id, + socket_id, + data, + }; + let ServerProcessorResponse::Send { len } = self.perform_request(request).await? else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(len as usize) + } + + pub async fn send_to( + self, + machine_id: MachineId, + socket_id: SocketId, + remote_address: SocketAddr, + data: Vec, + ) -> VirtualNetworkResult { + let request = ServerProcessorRequest::SendTo { + machine_id, + socket_id, + data, + remote_address, + }; + let ServerProcessorResponse::SendTo { len } = self.perform_request(request).await? else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(len as usize) + } + + pub async fn recv( + self, + machine_id: MachineId, + socket_id: u64, + len: u32, + ) -> VirtualNetworkResult> { + let request = ServerProcessorRequest::Recv { + machine_id, + socket_id, + len, + }; + let ServerProcessorResponse::Recv { data } = self.perform_request(request).await? else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok(data) + } + + pub async fn recv_from( + self, + machine_id: MachineId, + socket_id: u64, + len: u32, + ) -> VirtualNetworkResult<(Vec, SocketAddr)> { + let request = ServerProcessorRequest::RecvFrom { + machine_id, + socket_id, + len, + }; + let ServerProcessorResponse::RecvFrom { + data, + remote_address, + } = self.perform_request(request).await? + else { + return Err(VirtualNetworkError::ResponseMismatch); + }; + Ok((data, remote_address)) + } + + ////////////////////////////////////////////////////////////////////////// + // Private implementation + + fn new( + receiver: flume::Receiver, + sender: flume::Sender, + jh_handler: MustJoinHandle<()>, + stop_source: StopSource, + ) -> RouterClient { + RouterClient { + unlocked_inner: Arc::new(RouterClientUnlockedInner { + receiver, + sender, + next_message_id: AtomicU64::new(0), + router_op_waiter: RouterOpWaiter::new(), + }), + inner: Arc::new(Mutex::new(RouterClientInner { + jh_handler: Some(jh_handler), + stop_source: Some(stop_source), + })), + } + } + + async fn perform_request( + &self, + request: ServerProcessorRequest, + ) -> VirtualNetworkResult { + let message_id = self + .unlocked_inner + .next_message_id + .fetch_add(1, Ordering::AcqRel); + let msg = ServerProcessorRequestMessage { + message_id, + request, + }; + let msg_vec = + Bytes::from(to_stdvec(&msg).map_err(VirtualNetworkError::SerializationError)?); + + self.unlocked_inner + .sender + .send_async(msg_vec) + .await + .map_err(|_| VirtualNetworkError::IoError(io::ErrorKind::BrokenPipe))?; + let handle = self + .unlocked_inner + .router_op_waiter + .add_op_waiter(message_id, ()); + + let status = self + .unlocked_inner + .router_op_waiter + .wait_for_op(handle) + .await + .map_err(|_| VirtualNetworkError::WaitError)?; + + match status { + ServerProcessorResponseStatus::Success(server_processor_response) => { + Ok(server_processor_response) + } + ServerProcessorResponseStatus::InvalidMachineId => { + Err(VirtualNetworkError::InvalidMachineId) + } + ServerProcessorResponseStatus::InvalidSocketId => { + Err(VirtualNetworkError::InvalidSocketId) + } + ServerProcessorResponseStatus::IoError(k) => Err(VirtualNetworkError::IoError(k)), + } + } + + async fn run_server_processor( + reader: R, + writer: W, + receiver: flume::Receiver, + sender: flume::Sender, + stop_token: StopToken, + ) where + R: AsyncReadExt + Unpin + Send, + W: AsyncWriteExt + Unpin + Send, + { + let mut unord = FuturesUnordered::new(); + + let framed_reader = FramedRead::new(reader, BytesCodec); + let framed_writer = FramedWrite::new(writer, BytesCodec); + + let framed_writer_fut = system_boxed(async move { + if let Err(e) = receiver.into_stream().map(Ok).forward(framed_writer).await { + error!("{}", e); + } + }); + let framed_reader_fut = system_boxed(async move { + if let Err(e) = framed_reader + .forward(sender.into_sink().sink_map_err(::std::io::Error::other)) + .await + { + error!("{}", e); + } + }); + + unord.push(framed_writer_fut); + unord.push(framed_reader_fut); + while let Ok(Some(_)) = unord.next().timeout_at(stop_token.clone()).await {} + } +} diff --git a/veilid-tools/src/virtual_network/router_op_table.rs b/veilid-tools/src/virtual_network/router_op_table.rs new file mode 100644 index 00000000..122b9fa8 --- /dev/null +++ b/veilid-tools/src/virtual_network/router_op_table.rs @@ -0,0 +1,175 @@ +use super::*; + +pub type RouterOpId = u64; + +#[derive(Debug, Clone, PartialEq, Eq, ThisError)] +pub enum RouterOpWaitError { + #[error("Send error: {0}")] + SendError(flume::SendError), + #[error("Recv error: {0}")] + RecvError(flume::RecvError), + #[error("Unmatched operation id: {0}")] + UnmatchedOpId(RouterOpId), + #[error("Missing operation id: {0}")] + MissingOpId(RouterOpId), +} + +#[derive(Debug)] +pub struct RouterOpWaitHandle +where + T: Unpin, + C: Unpin + Clone, +{ + waiter: RouterOpWaiter, + op_id: RouterOpId, + result_receiver: Option>, +} + +impl RouterOpWaitHandle +where + T: Unpin, + C: Unpin + Clone, +{ + pub fn id(&self) -> RouterOpId { + self.op_id + } +} + +impl Drop for RouterOpWaitHandle +where + T: Unpin, + C: Unpin + Clone, +{ + fn drop(&mut self) { + if self.result_receiver.is_some() { + self.waiter.cancel_op_waiter(self.op_id); + } + } +} + +#[derive(Debug)] +struct RouterWaitingOp +where + T: Unpin, + C: Unpin + Clone, +{ + context: C, + result_sender: flume::Sender, +} + +#[derive(Debug)] +struct RouterOpWaiterInner +where + T: Unpin, + C: Unpin + Clone, +{ + waiting_op_table: HashMap>, +} + +#[derive(Debug)] +pub(super) struct RouterOpWaiter +where + T: Unpin, + C: Unpin + Clone, +{ + inner: Arc>>, +} + +impl Clone for RouterOpWaiter +where + T: Unpin, + C: Unpin + Clone, +{ + fn clone(&self) -> Self { + Self { + inner: self.inner.clone(), + } + } +} + +impl RouterOpWaiter +where + T: Unpin, + C: Unpin + Clone, +{ + pub fn new() -> Self { + Self { + inner: Arc::new(Mutex::new(RouterOpWaiterInner { + waiting_op_table: HashMap::new(), + })), + } + } + + /// Set up wait for operation to complete + pub fn add_op_waiter(&self, op_id: RouterOpId, context: C) -> RouterOpWaitHandle { + let mut inner = self.inner.lock(); + let (result_sender, result_receiver) = flume::bounded(1); + let waiting_op = RouterWaitingOp { + context, + result_sender, + }; + if inner.waiting_op_table.insert(op_id, waiting_op).is_some() { + error!( + "add_op_waiter collision should not happen for op_id {}", + op_id + ); + } + + RouterOpWaitHandle { + waiter: self.clone(), + op_id, + result_receiver: Some(result_receiver), + } + } + + /// Get operation context + pub fn get_op_context(&self, op_id: RouterOpId) -> Result> { + let inner = self.inner.lock(); + let Some(waiting_op) = inner.waiting_op_table.get(&op_id) else { + return Err(RouterOpWaitError::MissingOpId(op_id)); + }; + Ok(waiting_op.context.clone()) + } + + /// Remove wait for op + #[instrument(level = "trace", target = "rpc", skip_all)] + fn cancel_op_waiter(&self, op_id: RouterOpId) { + let mut inner = self.inner.lock(); + inner.waiting_op_table.remove(&op_id); + } + + /// Complete the waiting op + #[instrument(level = "trace", target = "rpc", skip_all)] + pub fn complete_op_waiter( + &self, + op_id: RouterOpId, + message: T, + ) -> Result<(), RouterOpWaitError> { + let waiting_op = { + let mut inner = self.inner.lock(); + inner + .waiting_op_table + .remove(&op_id) + .ok_or_else(|| RouterOpWaitError::UnmatchedOpId(op_id))? + }; + waiting_op + .result_sender + .send(message) + .map_err(RouterOpWaitError::SendError) + } + + /// Wait for operation to complete + #[instrument(level = "trace", target = "rpc", skip_all)] + pub async fn wait_for_op( + &self, + mut handle: RouterOpWaitHandle, + ) -> Result> { + // Take the receiver + // After this, we must manually cancel since the cancel on handle drop is disabled + let result_receiver = handle.result_receiver.take().unwrap(); + let result_fut = result_receiver.recv_async(); + + // wait for eventualvalue + result_fut.await.map_err(RouterOpWaitError::RecvError) + } +} diff --git a/veilid-tools/src/network_shim/router_server/mod.rs b/veilid-tools/src/virtual_network/router_server/mod.rs similarity index 100% rename from veilid-tools/src/network_shim/router_server/mod.rs rename to veilid-tools/src/virtual_network/router_server/mod.rs diff --git a/veilid-tools/src/virtual_network/serde_io_error.rs b/veilid-tools/src/virtual_network/serde_io_error.rs new file mode 100644 index 00000000..3798db96 --- /dev/null +++ b/veilid-tools/src/virtual_network/serde_io_error.rs @@ -0,0 +1,70 @@ +use serde::*; + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Deserialize)] +#[allow(deprecated)] +#[non_exhaustive] +#[serde(remote = "std::io::ErrorKind")] +pub enum SerdeIoErrorKindDef { + NotFound, + PermissionDenied, + ConnectionRefused, + ConnectionReset, + // #[cfg(feature = "io_error_more")] + // HostUnreachable, + // #[cfg(feature = "io_error_more")] + // NetworkUnreachable, + ConnectionAborted, + NotConnected, + AddrInUse, + AddrNotAvailable, + // #[cfg(feature = "io_error_more")] + // NetworkDown, + BrokenPipe, + AlreadyExists, + WouldBlock, + // #[cfg(feature = "io_error_more")] + // NotADirectory, + // #[cfg(feature = "io_error_more")] + // IsADirectory, + // #[cfg(feature = "io_error_more")] + // DirectoryNotEmpty, + // #[cfg(feature = "io_error_more")] + // ReadOnlyFilesystem, + // #[cfg(feature = "io_error_more")] + // FilesystemLoop, + // #[cfg(feature = "io_error_more")] + // StaleNetworkFileHandle, + InvalidInput, + InvalidData, + TimedOut, + WriteZero, + // #[cfg(feature = "io_error_more")] + // StorageFull, + // #[cfg(feature = "io_error_more")] + // NotSeekable, + // #[cfg(feature = "io_error_more")] + // FilesystemQuotaExceeded, + // #[cfg(feature = "io_error_more")] + // FileTooLarge, + // #[cfg(feature = "io_error_more")] + // ResourceBusy, + // #[cfg(feature = "io_error_more")] + // ExecutableFileBusy, + // #[cfg(feature = "io_error_more")] + // Deadlock, + // #[cfg(feature = "io_error_more")] + // CrossesDevices, + // #[cfg(feature = "io_error_more")] + // TooManyLinks, + // #[cfg(feature = "io_error_more")] + // InvalidFilename, + // #[cfg(feature = "io_error_more")] + // ArgumentListTooLong, + Interrupted, + Unsupported, + UnexpectedEof, + OutOfMemory, + Other, + // #[cfg(feature = "io_error_uncategorized")] + // Uncategorized, +} diff --git a/veilid-tools/src/virtual_network/virtual_network_error.rs b/veilid-tools/src/virtual_network/virtual_network_error.rs new file mode 100644 index 00000000..d1d7fd95 --- /dev/null +++ b/veilid-tools/src/virtual_network/virtual_network_error.rs @@ -0,0 +1,29 @@ +use super::*; + +use std::io; +#[derive(ThisError, Clone, Debug, PartialEq, Eq)] +pub enum VirtualNetworkError { + #[error("Serialization Error: {0}")] + SerializationError(postcard::Error), + #[error("Response Mismatch")] + ResponseMismatch, + #[error("Wait error")] + WaitError, + #[error("Invalid machine id")] + InvalidMachineId, + #[error("Invalid socket id")] + InvalidSocketId, + #[error("Io error: {0}")] + IoError(io::ErrorKind), +} + +impl From for io::Error { + fn from(value: VirtualNetworkError) -> Self { + match value { + VirtualNetworkError::IoError(e) => io::Error::from(e), + e => io::Error::other(e), + } + } +} + +pub type VirtualNetworkResult = Result; diff --git a/veilid-tools/src/virtual_network/virtual_tcp_stream.rs b/veilid-tools/src/virtual_network/virtual_tcp_stream.rs new file mode 100644 index 00000000..f9f88bbb --- /dev/null +++ b/veilid-tools/src/virtual_network/virtual_tcp_stream.rs @@ -0,0 +1,138 @@ +use super::*; +use futures_util::FutureExt; +use serde::*; + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +pub struct VirtualTcpOptions { + linger: Option, + no_delay: bool, + only_v6: bool, + reuse_address_port: bool, +} + +pub struct VirtualTcpStream { + machine: Machine, + socket_id: SocketId, + current_recv_fut: Option, VirtualNetworkError>>>, + current_send_fut: Option>>, + current_close_fut: Option>>, +} + +impl VirtualTcpStream { + pub async fn connect( + remote_address: SocketAddr, + local_address: Option, + timeout_ms: u32, + options: VirtualTcpOptions, + ) -> VirtualNetworkResult { + let machine = default_machine().unwrap(); + Self::connect_with_machine(machine, remote_address, local_address, timeout_ms, options) + .await + } + + pub async fn connect_with_machine( + machine: Machine, + remote_address: SocketAddr, + local_address: Option, + timeout_ms: u32, + options: VirtualTcpOptions, + ) -> VirtualNetworkResult { + machine + .router_client + .clone() + .tcp_connect( + machine.id, + remote_address, + local_address, + timeout_ms, + options, + ) + .await + .map(|socket_id| Self { + machine, + socket_id, + current_recv_fut: None, + current_send_fut: None, + current_close_fut: None, + }) + } +} + +impl futures_util::AsyncRead for VirtualTcpStream { + fn poll_read( + mut self: Pin<&mut Self>, + cx: &mut task::Context<'_>, + buf: &mut [u8], + ) -> task::Poll> { + if self.current_recv_fut.is_none() { + self.current_recv_fut = Some(Box::pin(self.machine.router_client.clone().recv( + self.machine.id, + self.socket_id, + buf.len() as u32, + ))); + } + let fut = self.current_recv_fut.as_mut().unwrap(); + fut.poll_unpin(cx).map(|v| match v { + Ok(v) => { + let len = usize::min(buf.len(), v.len()); + buf[0..len].copy_from_slice(&v[0..len]); + self.current_recv_fut = None; + Ok(len) + } + Err(e) => Err(e.into()), + }) + } +} + +impl futures_util::AsyncWrite for VirtualTcpStream { + fn poll_write( + mut self: Pin<&mut Self>, + cx: &mut task::Context<'_>, + buf: &[u8], + ) -> task::Poll> { + if self.current_send_fut.is_none() { + self.current_send_fut = Some(Box::pin(self.machine.router_client.clone().send( + self.machine.id, + self.socket_id, + buf.to_vec(), + ))); + } + let fut = self.current_send_fut.as_mut().unwrap(); + fut.poll_unpin(cx).map(|v| match v { + Ok(v) => { + self.current_send_fut = None; + Ok(v) + } + Err(e) => Err(e.into()), + }) + } + + fn poll_flush( + self: Pin<&mut Self>, + _cx: &mut task::Context<'_>, + ) -> task::Poll> { + task::Poll::Ready(Ok(())) + } + + fn poll_close( + mut self: Pin<&mut Self>, + cx: &mut task::Context<'_>, + ) -> task::Poll> { + if self.current_close_fut.is_none() { + self.current_close_fut = Some(Box::pin( + self.machine + .router_client + .clone() + .close(self.machine.id, self.socket_id), + )); + } + let fut = self.current_close_fut.as_mut().unwrap(); + fut.poll_unpin(cx).map(|v| match v { + Ok(v) => { + self.current_close_fut = None; + Ok(v) + } + Err(e) => Err(e.into()), + }) + } +} diff --git a/veilid-tools/src/virtual_network/virtual_udp_socket.rs b/veilid-tools/src/virtual_network/virtual_udp_socket.rs new file mode 100644 index 00000000..ed3d3f21 --- /dev/null +++ b/veilid-tools/src/virtual_network/virtual_udp_socket.rs @@ -0,0 +1,56 @@ +use super::*; +use serde::*; + +#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)] +pub struct VirtualUdpOptions { + only_v6: bool, + reuse_address_port: bool, +} + +pub struct VirtualUdpSocket { + machine: Machine, + socket_id: SocketId, +} + +impl VirtualUdpSocket { + // pub async fn connect( + // remote_address: SocketAddr, + // local_address: Option, + // timeout_ms: u32, + // options: VirtualTcpOptions, + // ) -> VirtualNetworkResult { + // let machine = default_machine().unwrap(); + // Self::connect_with_machine(machine, remote_address, local_address, timeout_ms, options) + // .await + // } + + // pub async fn connect_with_machine( + // machine: Machine, + // remote_address: SocketAddr, + // local_address: Option, + // timeout_ms: u32, + // options: VirtualTcpOptions, + // ) -> VirtualNetworkResult { + // machine + // .router_client + // .tcp_connect( + // machine.id, + // remote_address, + // local_address, + // timeout_ms, + // options, + // ) + // .await + // .map(|socket_id| Self { machine, socket_id }) + // } +} + +// impl futures_util::AsyncRead for VirtualUdpSocket { +// fn poll_read( +// self: Pin<&mut Self>, +// cx: &mut task::Context<'_>, +// buf: &mut [u8], +// ) -> task::Poll> { +// todo!() +// } +// }