From 7e65a08711775656e435e854777c5f089dd31a05 Mon Sep 17 00:00:00 2001 From: Mingwei Samuel Date: Fri, 22 Dec 2023 09:14:48 -0800 Subject: [PATCH] refactor(variadics): Improvements prepping for release (#974) - Adds the "spread"/"splat" `...` syntax to the three variadics macros. - Adds `#[sealed]` traits. - Adds testing of error messages. - Improves docs: `README.md` and Rust docs. --- Cargo.lock | 1466 +++++++++-------- .../src/scheduled/handoff/handoff_list.rs | 35 +- .../compile-fail/surface_demuxenum_notenum.rs | 2 +- .../surface_demuxenum_port_duplicate.rs | 2 +- .../surface_demuxenum_port_duplicate.stderr | 8 - .../surface_demuxenum_port_elided.rs | 2 +- .../surface_demuxenum_port_elided.stderr | 8 - .../surface_demuxenum_port_extra.rs | 2 +- .../surface_demuxenum_port_extramissing.rs | 2 +- .../surface_demuxenum_port_missing.rs | 2 +- .../surface_demuxenum_wrongenum.rs | 2 +- .../surface_demuxenum_wrongenum.stderr | 8 - .../surface_demuxenum_wrongitems.rs | 2 +- .../surface_demuxenum_wrongitems.stderr | 8 - .../surface_source_interval_badarg.rs | 2 +- .../surface_source_interval_badarg.stderr | 2 +- ...ace_codegen__sort_by_key@graphvis_dot.snap | 2 +- ...codegen__sort_by_key@graphvis_mermaid.snap | 2 +- ...ace_context__context_ref@graphvis_dot.snap | 2 +- ...context__context_ref@graphvis_mermaid.snap | 2 +- relalg/testdata/compile/compile | 68 +- variadics/Cargo.toml | 6 + variadics/README.md | 74 + variadics/examples/debug_fields.rs | 44 + variadics/src/lib.rs | 401 +++-- variadics/tests/boxed_refed.rs | 43 + .../compile-fail/var_args_spread_middle.rs | 5 + .../var_args_spread_middle.stderr | 7 + .../compile-fail/var_args_spread_twice.rs | 5 + .../compile-fail/var_args_spread_twice.stderr | 7 + .../compile-fail/var_expr_missing_comma.rs | 5 + .../var_expr_missing_comma.stderr | 9 + .../tests/compile-fail/var_type_badtype.rs | 5 + .../compile-fail/var_type_badtype.stderr | 5 + .../compile-fail/var_type_badtype_call.rs | 5 + .../compile-fail/var_type_badtype_call.stderr | 5 + .../compile-fail/var_type_spread_badtype.rs | 6 + .../var_type_spread_badtype.stderr | 9 + variadics/tests/compile_fail.rs | 5 + variadics/var_args.md | 47 + variadics/var_expr.md | 35 + variadics/var_type.md | 35 + 42 files changed, 1453 insertions(+), 939 deletions(-) create mode 100644 variadics/README.md create mode 100644 variadics/examples/debug_fields.rs create mode 100644 variadics/tests/boxed_refed.rs create mode 100644 variadics/tests/compile-fail/var_args_spread_middle.rs create mode 100644 variadics/tests/compile-fail/var_args_spread_middle.stderr create mode 100644 variadics/tests/compile-fail/var_args_spread_twice.rs create mode 100644 variadics/tests/compile-fail/var_args_spread_twice.stderr create mode 100644 variadics/tests/compile-fail/var_expr_missing_comma.rs create mode 100644 variadics/tests/compile-fail/var_expr_missing_comma.stderr create mode 100644 variadics/tests/compile-fail/var_type_badtype.rs create mode 100644 variadics/tests/compile-fail/var_type_badtype.stderr create mode 100644 variadics/tests/compile-fail/var_type_badtype_call.rs create mode 100644 variadics/tests/compile-fail/var_type_badtype_call.stderr create mode 100644 variadics/tests/compile-fail/var_type_spread_badtype.rs create mode 100644 variadics/tests/compile-fail/var_type_spread_badtype.stderr create mode 100644 variadics/tests/compile_fail.rs create mode 100644 variadics/var_args.md create mode 100644 variadics/var_expr.md create mode 100644 variadics/var_type.md diff --git a/Cargo.lock b/Cargo.lock index 87d386f8f7e6..f8aa1dc5ae08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -36,13 +36,19 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -69,49 +75,57 @@ dependencies = [ [[package]] name = "anstream" -version = "0.2.6" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" dependencies = [ "anstyle", "anstyle-parse", + "anstyle-query", "anstyle-wincon", - "concolor-override", - "concolor-query", - "is-terminal", + "colorchoice", "utf8parse", ] [[package]] name = "anstyle" -version = "0.3.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.1.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "anstyle-wincon" -version = "0.2.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" dependencies = [ "backtrace", ] @@ -124,13 +138,26 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "async-channel" -version = "1.8.0" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 4.0.1", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] [[package]] @@ -139,27 +166,57 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "cfg-if 1.0.0", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2 0.4.9", + "socket2 0.4.10", "waker-fn", ] +[[package]] +name = "async-io" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" +dependencies = [ + "async-lock 3.2.0", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-io", + "futures-lite 2.1.0", + "parking", + "polling 3.3.1", + "rustix 0.38.28", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-lock" -version = "2.7.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" dependencies = [ - "event-listener", + "event-listener 4.0.1", + "event-listener-strategy", + "pin-project-lite", ] [[package]] @@ -170,38 +227,55 @@ checksum = "9338790e78aa95a416786ec8389546c4b6a1dfc3dc36071ed9518a9413a542eb" [[package]] name = "async-process" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ - "async-io", - "async-lock", - "autocfg", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", "blocking", "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "rustix", - "signal-hook", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.28", "windows-sys 0.48.0", ] [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.2.2", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if 1.0.0", + "futures-core", + "futures-io", + "rustix 0.38.28", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", ] [[package]] name = "async-ssh2-lite" -version = "0.4.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4bfa10d854be03bb2533fddf0c3329fdbd6370762e77478e3403d545d0dff" +checksum = "6cb43eaa75050ebe27dfd16e6de7078d9796a251f03c77d7a24c05aa9037c29b" dependencies = [ "async-trait", "futures-util", @@ -212,26 +286,26 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46" [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "atty" @@ -246,9 +320,9 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8c1df849285fbacd587de7818cc7d13be6cd2cbcd47a04fb1801b0e2706e33" +checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", "proc-macro2", @@ -264,9 +338,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -285,15 +359,15 @@ checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] name = "base64" -version = "0.13.1" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "basic-toml" -version = "0.1.2" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" +checksum = "2f2139706359229bfa8f19142ac1155b4b80beafb7a60471ac5dd109d4a19778" dependencies = [ "serde", ] @@ -329,6 +403,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "block-buffer" version = "0.10.4" @@ -340,36 +420,37 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ - "async-channel", - "async-lock", + "async-channel 2.1.1", + "async-lock 3.2.0", "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.1.0", + "piper", + "tracing", ] [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "c2rust-bitfields" @@ -393,18 +474,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.4" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] @@ -417,7 +498,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.20", "serde", "serde_json", "thiserror", @@ -431,9 +512,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cc-traits" @@ -461,28 +545,28 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ + "android-tzdata", "iana-time-zone", - "num-integer", "num-traits", "serde", - "winapi 0.3.9", + "windows-targets 0.48.5", ] [[package]] name = "chunked_transfer" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" [[package]] name = "ciborium" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" dependencies = [ "ciborium-io", "ciborium-ll", @@ -491,15 +575,15 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" [[package]] name = "ciborium-ll" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", "half", @@ -513,7 +597,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim 0.8.0", "textwrap 0.11.0", "unicode-width", @@ -522,50 +606,48 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ - "bitflags", + "bitflags 1.3.2", "clap_lex 0.2.4", - "indexmap", + "indexmap 1.9.3", "textwrap 0.16.0", ] [[package]] name = "clap" -version = "4.2.1" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.2.1" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstream", "anstyle", - "bitflags", - "clap_lex 0.4.1", + "clap_lex 0.6.0", "strsim 0.10.0", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -579,29 +661,24 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] -name = "codespan-reporting" -version = "0.11.1" +name = "colorchoice" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "colored" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ - "atty", "lazy_static", - "winapi 0.3.9", + "windows-sys 0.48.0", ] [[package]] @@ -614,41 +691,26 @@ dependencies = [ "memchr", ] -[[package]] -name = "concolor-override" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" - -[[package]] -name = "concolor-query" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" -dependencies = [ - "windows-sys 0.45.0", -] - [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] [[package]] name = "console" -version = "0.15.5" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -663,9 +725,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -673,9 +735,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core_affinity" @@ -691,9 +753,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -717,7 +779,7 @@ dependencies = [ "atty", "cast", "ciborium", - "clap 3.2.23", + "clap 3.2.25", "criterion-plot", "futures", "itertools", @@ -747,9 +809,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "14c3242926edf34aec4ac3a77108ad4854bffaa2e4ddc1824124ce59231302d5" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -757,9 +819,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", @@ -768,22 +830,21 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", - "memoffset 0.8.0", - "scopeguard", + "memoffset 0.9.0", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" dependencies = [ "cfg-if 1.0.0", ] @@ -800,76 +861,32 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1586fa608b1dab41f667475b4a41faec5ba680aee428bfa5de4ea520fdc6e901" -dependencies = [ - "quote", - "syn 2.0.14", -] - -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.14", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" dependencies = [ - "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "dashmap" -version = "5.4.0" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.9", ] [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "datadriven" @@ -881,6 +898,15 @@ dependencies = [ "futures", ] +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + [[package]] name = "difference" version = "2.0.0" @@ -933,15 +959,15 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encode_unicode" @@ -951,9 +977,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" dependencies = [ "humantime", "is-terminal", @@ -962,32 +988,59 @@ dependencies = [ "termcolor", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" -version = "0.3.1" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "event-listener" +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 = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "cc", - "libc", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] name = "event-listener" -version = "2.5.3" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "84f2cdcf274580f2d63697192d744727b3198894b1bf02923643bf59e2c26712" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.1", + "pin-project-lite", +] [[package]] name = "fastrand" @@ -998,11 +1051,17 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -1016,18 +1075,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -1040,9 +1099,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -1050,15 +1109,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -1067,9 +1126,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-lite" @@ -1077,7 +1136,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1086,34 +1145,44 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-channel", "futures-core", @@ -1159,9 +1228,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1172,9 +1241,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -1194,13 +1263,19 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ - "base64 0.13.1", + "base64 0.21.5", "byteorder", "crossbeam-channel", "flate2", @@ -1225,18 +1300,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -1246,11 +1312,11 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1264,9 +1330,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -1281,9 +1347,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -1296,10 +1362,10 @@ name = "hydro_cli" version = "0.5.0" dependencies = [ "anyhow", - "async-channel", + "async-channel 1.9.0", "async-ssh2-lite", "bytes", - "clap 4.2.1", + "clap 4.4.11", "futures", "hydro_deploy", "hydroflow_cli_integration", @@ -1331,7 +1397,7 @@ name = "hydro_deploy" version = "0.5.0" dependencies = [ "anyhow", - "async-channel", + "async-channel 1.9.0", "async-once-cell", "async-process", "async-recursion", @@ -1363,13 +1429,13 @@ dependencies = [ "byteorder", "bytes", "chrono", - "clap 4.2.1", + "clap 4.4.11", "colored", "core_affinity", "criterion", "ctor", "futures", - "getrandom 0.2.9", + "getrandom 0.2.11", "hdrhistogram", "hydroflow_cli_integration", "hydroflow_datalog", @@ -1429,7 +1495,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -1445,7 +1511,7 @@ dependencies = [ "rust-sitter", "rust-sitter-tool", "slotmap", - "syn 2.0.14", + "syn 2.0.42", "tempfile", ] @@ -1454,7 +1520,7 @@ name = "hydroflow_lang" version = "0.5.0" dependencies = [ "auto_impl", - "clap 4.2.1", + "clap 4.4.11", "data-encoding", "itertools", "prettyplease", @@ -1464,7 +1530,7 @@ dependencies = [ "serde", "serde_json", "slotmap", - "syn 2.0.14", + "syn 2.0.42", "webbrowser", ] @@ -1477,7 +1543,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -1492,20 +1558,20 @@ dependencies = [ "quote", "serde", "stageleft", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "hydroflow_plus_cli_integration" version = "0.5.0" dependencies = [ - "async-channel", + "async-channel 1.9.0", "hydro_deploy", "hydroflow_plus", "serde", "stageleft", "stageleft_tool", - "syn 2.0.14", + "syn 2.0.42", "tokio", ] @@ -1539,33 +1605,32 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "cxx", - "cxx-build", + "cc", ] [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1578,14 +1643,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", ] [[package]] name = "indicatif" -version = "0.17.6" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" dependencies = [ "console", "instant", @@ -1602,9 +1677,9 @@ checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" [[package]] name = "insta" -version = "1.29.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972" +checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc" dependencies = [ "console", "lazy_static", @@ -1627,24 +1702,23 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.3", "libc", "windows-sys 0.48.0", ] [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", + "hermit-abi 0.3.3", + "rustix 0.38.28", "windows-sys 0.48.0", ] @@ -1659,9 +1733,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jni" @@ -1687,9 +1761,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -1721,9 +1795,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "libloading" @@ -1737,15 +1811,26 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.6" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "libssh2-sys" -version = "0.2.23" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" dependencies = [ "cc", "libc", @@ -1757,9 +1842,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.8" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" dependencies = [ "cc", "libc", @@ -1767,15 +1852,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -1784,15 +1860,21 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.1" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -1800,12 +1882,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "malloc_buf" @@ -1822,14 +1901,14 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" @@ -1849,6 +1928,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "memory_units" version = "0.4.0" @@ -1863,23 +1951,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.6" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", - "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1912,16 +1999,15 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "nix" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "libc", "memoffset 0.7.1", "pin-utils", - "static_assertions", ] [[package]] @@ -1950,21 +2036,11 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -1972,11 +2048,11 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.3", "libc", ] @@ -1997,9 +2073,9 @@ dependencies = [ [[package]] name = "object" -version = "0.30.3" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -2018,18 +2094,18 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "openssl-src" -version = "111.28.1+1.1.1w" +version = "300.2.1+3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bf7e82ffd6d3d6e6524216a0bfd85509f68b5b28354e8e7800057e44cefa9b4" +checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.85" +version = "0.9.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3d193fb1488ad46ffe3aaabc912cc931d02ee8518fe2959aea8ef52718b0c0" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" dependencies = [ "cc", "libc", @@ -2040,9 +2116,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.5.0" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "overload" @@ -2052,9 +2128,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -2074,7 +2150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.7", + "parking_lot_core 0.9.9", ] [[package]] @@ -2093,41 +2169,41 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.4.1", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.5", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.42", ] [[package]] @@ -2142,17 +2218,28 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" [[package]] name = "plotters" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" dependencies = [ "num-traits", "plotters-backend", @@ -2163,27 +2250,27 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" [[package]] name = "plotters-svg" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" dependencies = [ "plotters-backend", ] [[package]] name = "polling" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if 1.0.0", "concurrent-queue", "libc", @@ -2192,11 +2279,31 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "polling" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e" +dependencies = [ + "cfg-if 1.0.0", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.28", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "portable-atomic" -version = "1.4.3" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" @@ -2206,12 +2313,12 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "prettyplease" -version = "0.2.4" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -2250,9 +2357,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.63" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] @@ -2374,9 +2481,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.26" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -2440,7 +2547,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.11", ] [[package]] @@ -2470,9 +2577,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -2480,14 +2587,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] @@ -2496,58 +2601,59 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", + "getrandom 0.2.11", + "libredox", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "53313ec9f12686aeeffb43462c3ac77aa25f590a5f630eb2cde0de59417b29c7" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "2566c4bf6845f2c2e83b27043c3f5dfcd5ba8f2937d6c00dc009bfb51a079dc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "regex" -version = "1.8.4" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.2", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -2559,6 +2665,17 @@ dependencies = [ "regex-syntax 0.6.29", ] +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + [[package]] name = "regex-syntax" version = "0.6.29" @@ -2567,9 +2684,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "relalg" @@ -2581,14 +2698,14 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "rust-sitter" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dde883cc26efebad05b018863c06b2d2004915d3f0d75dc62a208d3b7b91127" +checksum = "1a0f365b4eb9591dd3e685791389a932041b0dc6ccf5db1ec3d8913f67279365" dependencies = [ "rust-sitter-macro", "tree-sitter-c2rust", @@ -2596,9 +2713,9 @@ dependencies = [ [[package]] name = "rust-sitter-common" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09465c7945d523df2d183379e87954e813432e7b0613048afe548b560ad67077" +checksum = "c3c0a0b1da7317031274502b7c52cbb7cf529e7d1e1f3e23876519372b173a94" dependencies = [ "quote", "syn 1.0.109", @@ -2606,9 +2723,9 @@ dependencies = [ [[package]] name = "rust-sitter-macro" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "981712251a9b1b5005f4daa34cc4eded8a8a99dede6adab3f212871045b16901" +checksum = "d25e213e40efa00713547cc0f3529694aca547cfceb0839bbc9406632e14d410" dependencies = [ "proc-macro2", "quote", @@ -2618,9 +2735,9 @@ dependencies = [ [[package]] name = "rust-sitter-tool" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0455092fcce2f769dceafb71348b80377ea31d6cf844a7c010ced8501da3be72" +checksum = "803c6596476a188a4dd18106eb927a926a202e00077cdaa5648dd620262af158" dependencies = [ "cc", "rust-sitter-common", @@ -2635,9 +2752,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -2656,23 +2773,36 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.11" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.3.8", "windows-sys 0.48.0", ] +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys 0.4.12", + "windows-sys 0.52.0", +] + [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "same-file" @@ -2691,15 +2821,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sealed" @@ -2710,7 +2834,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -2724,9 +2848,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" dependencies = [ "serde", ] @@ -2745,9 +2869,9 @@ checksum = "5a9f47faea3cad316faa914d013d24f471cd90bfca1a0c70f05a3f42c6441e99" [[package]] name = "serde" -version = "1.0.160" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] @@ -2765,22 +2889,22 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.160" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ - "indexmap", + "indexmap 2.1.0", "itoa", "ryu", "serde", @@ -2788,9 +2912,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -2823,9 +2947,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -2836,16 +2960,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" -[[package]] -name = "signal-hook" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -2857,24 +2971,24 @@ dependencies = [ [[package]] name = "similar" -version = "2.2.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "slotmap" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "serde", "version_check", @@ -2888,15 +3002,15 @@ checksum = "75ce4f9dc4a41b4c3476cc925f1efb11b66df373a8fde5d4b8915fa91b5d995e" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi 0.3.9", @@ -2904,9 +3018,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", @@ -2914,11 +3028,11 @@ dependencies = [ [[package]] name = "ssh2" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269343e64430067a14937ae0e3c4ec604c178fb896dde0964b1acd22b3e2eeb1" +checksum = "e7fe461910559f6d5604c3731d00d2aafc4a83d1665922e280f42f9a168d5455" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "libssh2-sys", "parking_lot 0.11.2", @@ -2932,7 +3046,7 @@ dependencies = [ "proc-macro2", "quote", "stageleft_macro", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -2946,7 +3060,7 @@ dependencies = [ "proc-macro2", "quote", "sha256", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -2973,7 +3087,7 @@ dependencies = [ "proc-macro2", "quote", "sha256", - "syn 2.0.14", + "syn 2.0.42", "syn-inline-mod 0.6.0", ] @@ -3008,9 +3122,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.14" +version = "2.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf316d5356ed6847742d036f8a39c3b8435cac10bd528a4bd461928a6ab34d5" +checksum = "5b7d0a2c048d661a1a59fcd7355baa232f7ed34e0ee4df2eef3c1c1c0d3852d8" dependencies = [ "proc-macro2", "quote", @@ -3034,7 +3148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fa6dca1fdb7b2ed46dd534a326725419d4fb10f23d8c85a8b2860e5eb25d0f9" dependencies = [ "proc-macro2", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -3051,28 +3165,28 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.6" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" +checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "tempfile" -version = "3.5.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if 1.0.0", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.28", + "windows-sys 0.48.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] @@ -3104,22 +3218,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] @@ -3134,19 +3248,21 @@ dependencies = [ [[package]] name = "time" -version = "0.3.20" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ + "deranged", + "powerfmt", "serde", "time-core", ] [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "timely" @@ -3233,9 +3349,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.32.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "bytes", @@ -3245,27 +3361,27 @@ dependencies = [ "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "tokio-stream" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite", @@ -3287,9 +3403,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -3311,17 +3427,17 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.19.8" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.1.0", "toml_datetime", "winnow", ] @@ -3343,11 +3459,10 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if 1.0.0", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -3355,20 +3470,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.14", + "syn 2.0.42", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -3376,20 +3491,20 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -3438,13 +3553,13 @@ dependencies = [ "dirs", "glob", "html-escape", - "indexmap", + "indexmap 1.9.3", "lazy_static", "log", "regex", "regex-syntax 0.6.29", "rustc-hash", - "semver 1.0.17", + "semver 1.0.20", "serde", "serde_json", "smallbitvec", @@ -3516,9 +3631,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.80" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" +checksum = "8419ecd263363827c5730386f418715766f584e2f874d32c23c5b00bd9727e7e" dependencies = [ "basic-toml", "glob", @@ -3550,21 +3665,21 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -3577,9 +3692,9 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -3595,9 +3710,9 @@ checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" [[package]] name = "url" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -3612,9 +3727,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8-width" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" [[package]] name = "utf8parse" @@ -3631,6 +3746,10 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "variadics" version = "0.0.2" +dependencies = [ + "sealed", + "trybuild", +] [[package]] name = "vcpkg" @@ -3652,15 +3771,15 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -3680,9 +3799,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -3690,24 +3809,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.42", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -3717,9 +3836,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3727,28 +3846,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.42", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wasm-bindgen-test" -version = "0.3.34" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db36fc0f9fb209e88fb3642590ae0205bb5a56216dabd963ba15879fe53a30b" +checksum = "2cf9242c0d27999b831eae4767b2a146feb0b27d332d553e605864acd2afd403" dependencies = [ "console_error_panic_hook", "js-sys", @@ -3760,19 +3879,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.34" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0734759ae6b3b1717d661fe4f016efcfb9828f5edb4520c18eaee05af3b43be9" +checksum = "794645f5408c9a039fd09f4d113cdfb2e7eba5ff1956b07bcf701cf4b394fe89" dependencies = [ "proc-macro2", "quote", + "syn 2.0.42", ] [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -3780,9 +3900,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2c79b77f525a2d670cb40619d7d9c673d09e0666f72c591ebd7861f84a87e57" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" dependencies = [ "core-foundation", "home", @@ -3809,7 +3929,7 @@ dependencies = [ "quote", "serde", "serde-wasm-bindgen", - "syn 2.0.14", + "syn 2.0.42", "tokio", "wasm-bindgen", "wasm-bindgen-test", @@ -3831,13 +3951,14 @@ dependencies = [ [[package]] name = "which" -version = "4.4.0" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ "either", - "libc", + "home", "once_cell", + "rustix 0.38.28", ] [[package]] @@ -3870,9 +3991,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi 0.3.9", ] @@ -3884,45 +4005,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.42.2", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.42.2", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.52.0", ] [[package]] @@ -3942,17 +4057,32 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -3963,9 +4093,15 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -3975,9 +4111,15 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -3987,9 +4129,15 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -3999,9 +4147,15 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -4011,9 +4165,15 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -4023,9 +4183,15 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -4035,15 +4201,21 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.4.1" +version = "0.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" +checksum = "9b5c3db89721d50d0e2a673f5043fc4722f76dcc352d7b1ab8b8288bed4ed2c5" dependencies = [ "memchr", ] @@ -4059,9 +4231,9 @@ dependencies = [ [[package]] name = "zipf" -version = "7.0.0" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835688a7a1b5d2dfaeb5b7e1b4cfb979e7095a70cd1c72fe083f4904ef3e995e" +checksum = "390e51da0ed8cc3ade001d15fa5ba6f966b99c858fb466ec6b06d1682f1f94dd" dependencies = [ "rand 0.8.5", ] diff --git a/hydroflow/src/scheduled/handoff/handoff_list.rs b/hydroflow/src/scheduled/handoff/handoff_list.rs index 9c4230743e15..60729f995057 100644 --- a/hydroflow/src/scheduled/handoff/handoff_list.rs +++ b/hydroflow/src/scheduled/handoff/handoff_list.rs @@ -2,7 +2,7 @@ use ref_cast::RefCast; use sealed::sealed; -use variadics::Variadic; +use variadics::{variadic_trait, Variadic}; use super::Handoff; use crate::scheduled::graph::HandoffData; @@ -140,24 +140,17 @@ where } } -/// A variadic list of Handoff types, represented using a lisp-style tuple structure. -/// -/// This trait is sealed and not meant to be implemented or used directly. Instead tuple lists (which already implement this trait) should be used, for example: -/// ```ignore -/// type MyHandoffList = (VecHandoff, (VecHandoff, (TeeingHandoff, ()))); -/// ``` -/// The [`var_expr!`](variadics::var_expr) macro simplifies usage of this kind: -/// ```ignore -/// type MyHandoffList = var_expr!(VecHandoff, VecHandoff, TeeingHandoff); -/// ``` -#[sealed] -pub trait HandoffList: Variadic {} -#[sealed] -impl HandoffList for (H, L) -where - H: 'static + Handoff, - L: HandoffList, -{ +variadic_trait! { + /// A variadic list of Handoff types, represented using a lisp-style tuple structure. + /// + /// This trait is sealed and not meant to be implemented or used directly. Instead tuple lists (which already implement this trait) should be used, for example: + /// ```ignore + /// type MyHandoffList = (VecHandoff, (VecHandoff, (TeeingHandoff, ()))); + /// ``` + /// The [`var_expr!`](crate::var) macro simplifies usage of this kind: + /// ```ignore + /// type MyHandoffList = var_expr!(VecHandoff, VecHandoff, TeeingHandoff); + /// ``` + #[sealed] + pub variadic HandoffList where T: 'static + Handoff {} } -#[sealed] -impl HandoffList for () {} diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_notenum.rs b/hydroflow/tests/compile-fail/surface_demuxenum_notenum.rs index a036459754ea..d000a03dad16 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_notenum.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_notenum.rs @@ -1,4 +1,4 @@ -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { struct Shape { diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.rs b/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.rs index 85a81b603a00..28d9d7b3bdcd 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.stderr b/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.stderr index 6a9dc69b91fe..46030abc3bf8 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.stderr +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_duplicate.stderr @@ -9,11 +9,3 @@ error: Output connection conflicts with above ($DIR/tests/compile-fail/surface_d | 21 | my_demux[Square] -> for_each(std::mem::drop); | ^^^^^^ - -warning: unused import: `var_args` - --> tests/compile-fail/surface_demuxenum_port_duplicate.rs:2:35 - | -2 | use hydroflow::{hydroflow_syntax, var_args}; - | ^^^^^^^^ - | - = note: `#[warn(unused_imports)]` on by default diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.rs b/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.rs index 5a2a761eb044..6f6ed8c0718b 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.stderr b/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.stderr index 6b3d97dc4cc8..f0f4901eecaf 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.stderr +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_elided.stderr @@ -3,11 +3,3 @@ error: Output port from `demux_enum(..)` must be specified and must be a valid i | 22 | my_demux -> for_each(std::mem::drop); | ^^^^^^^^ - -warning: unused import: `var_args` - --> tests/compile-fail/surface_demuxenum_port_elided.rs:2:35 - | -2 | use hydroflow::{hydroflow_syntax, var_args}; - | ^^^^^^^^ - | - = note: `#[warn(unused_imports)]` on by default diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_extra.rs b/hydroflow/tests/compile-fail/surface_demuxenum_port_extra.rs index 6298d5807d84..1d25a92b58b3 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_extra.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_extra.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_extramissing.rs b/hydroflow/tests/compile-fail/surface_demuxenum_port_extramissing.rs index b2a162e3d8ae..fcde4a73a020 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_extramissing.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_extramissing.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_port_missing.rs b/hydroflow/tests/compile-fail/surface_demuxenum_port_missing.rs index 855362ee4948..84856d1df77d 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_port_missing.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_port_missing.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.rs b/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.rs index d800da711ae7..b5e6acffc827 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.stderr b/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.stderr index 948c21d3a4ef..04bfaf8bb2d1 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.stderr +++ b/hydroflow/tests/compile-fail/surface_demuxenum_wrongenum.stderr @@ -9,11 +9,3 @@ error: Output connection conflicts with above ($DIR/tests/compile-fail/surface_d | 21 | my_demux[Square] -> for_each(std::mem::drop); | ^^^^^^ - -warning: unused import: `var_args` - --> tests/compile-fail/surface_demuxenum_wrongenum.rs:2:35 - | -2 | use hydroflow::{hydroflow_syntax, var_args}; - | ^^^^^^^^ - | - = note: `#[warn(unused_imports)]` on by default diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.rs b/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.rs index 8265f2e04cda..4c08cab45624 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.rs +++ b/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.rs @@ -1,5 +1,5 @@ use hydroflow::util::demux_enum::DemuxEnum; -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; fn main() { #[derive(DemuxEnum)] diff --git a/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.stderr b/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.stderr index 712f9f846261..6abb71d56aef 100644 --- a/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.stderr +++ b/hydroflow/tests/compile-fail/surface_demuxenum_wrongitems.stderr @@ -9,11 +9,3 @@ error: Output connection conflicts with above ($DIR/tests/compile-fail/surface_d | 17 | my_demux[Square] -> for_each(std::mem::drop); | ^^^^^^ - -warning: unused import: `var_args` - --> tests/compile-fail/surface_demuxenum_wrongitems.rs:2:35 - | -2 | use hydroflow::{hydroflow_syntax, var_args}; - | ^^^^^^^^ - | - = note: `#[warn(unused_imports)]` on by default diff --git a/hydroflow/tests/compile-fail/surface_source_interval_badarg.rs b/hydroflow/tests/compile-fail/surface_source_interval_badarg.rs index 3e6c6030f0a7..e0c1629e53b9 100644 --- a/hydroflow/tests/compile-fail/surface_source_interval_badarg.rs +++ b/hydroflow/tests/compile-fail/surface_source_interval_badarg.rs @@ -1,4 +1,4 @@ -use hydroflow::{hydroflow_syntax, var_args}; +use hydroflow::hydroflow_syntax; #[hydroflow::main] async fn main() { diff --git a/hydroflow/tests/compile-fail/surface_source_interval_badarg.stderr b/hydroflow/tests/compile-fail/surface_source_interval_badarg.stderr index 08a9d452bd3d..69e3aa8c6522 100644 --- a/hydroflow/tests/compile-fail/surface_source_interval_badarg.stderr +++ b/hydroflow/tests/compile-fail/surface_source_interval_badarg.stderr @@ -10,7 +10,7 @@ error[E0308]: mismatched types | |_____- arguments to this function are incorrect | note: function defined here - --> $CARGO/tokio-1.32.0/src/time/interval.rs + --> $CARGO/tokio-1.35.1/src/time/interval.rs | | pub fn interval(period: Duration) -> Interval { | ^^^^^^^^ diff --git a/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_dot.snap b/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_dot.snap index e4b14707a385..30f95df8758a 100644 --- a/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_dot.snap +++ b/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_dot.snap @@ -5,7 +5,7 @@ expression: "df.meta_graph().unwrap().to_dot(&Default::default())" digraph { node [fontname="Monaco,Menlo,Consolas,"Droid Sans Mono",Inconsolata,"Courier New",monospace", style=filled]; edge [fontname="Monaco,Menlo,Consolas,"Droid Sans Mono",Inconsolata,"Courier New",monospace"]; - n1v1 [label="(n1v1) source_iter(vec!((2, 'y'), (3, 'x'), (1, 'z')))", shape=invhouse, fillcolor="#88aaff"] + n1v1 [label="(n1v1) source_iter(vec![(2, 'y'), (3, 'x'), (1, 'z')])", shape=invhouse, fillcolor="#88aaff"] n2v1 [label="(n2v1) sort_by_key(|(k, _v)| k)", shape=invhouse, fillcolor="#88aaff"] n3v1 [label="(n3v1) for_each(|v| println!(\"{:?}\", v))", shape=house, fillcolor="#ffff88"] n4v1 [label="(n4v1) handoff", shape=parallelogram, fillcolor="#ddddff"] diff --git a/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_mermaid.snap b/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_mermaid.snap index 213626113d5a..e60c88ce080b 100644 --- a/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_mermaid.snap +++ b/hydroflow/tests/snapshots/surface_codegen__sort_by_key@graphvis_mermaid.snap @@ -8,7 +8,7 @@ classDef pullClass fill:#8af,stroke:#000,text-align:left,white-space:pre classDef pushClass fill:#ff8,stroke:#000,text-align:left,white-space:pre classDef otherClass fill:#fdc,stroke:#000,text-align:left,white-space:pre linkStyle default stroke:#aaa -1v1[\"(1v1) source_iter(vec!((2, 'y'), (3, 'x'), (1, 'z')))"/]:::pullClass +1v1[\"(1v1) source_iter(vec![(2, 'y'), (3, 'x'), (1, 'z')])"/]:::pullClass 2v1[\"(2v1) sort_by_key(|(k, _v)| k)"/]:::pullClass 3v1[/"(3v1) for_each(|v| println!("{:?}", v))"\]:::pushClass 4v1["(4v1) handoff"]:::otherClass diff --git a/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_dot.snap b/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_dot.snap index f9dca3354745..e043a2e18344 100644 --- a/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_dot.snap +++ b/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_dot.snap @@ -6,7 +6,7 @@ digraph { node [fontname="Monaco,Menlo,Consolas,"Droid Sans Mono",Inconsolata,"Courier New",monospace", style=filled]; edge [fontname="Monaco,Menlo,Consolas,"Droid Sans Mono",Inconsolata,"Courier New",monospace"]; n1v1 [label="(n1v1) source_iter([()])", shape=invhouse, fillcolor="#88aaff"] - n2v1 [label="(n2v1) for_each(|()| {\l println!(\l \"Current tick: {}, stratum: {}\", context.current_tick(), context\l .current_stratum()\l )\l})\l", shape=house, fillcolor="#ffff88"] + n2v1 [label="(n2v1) for_each(|()| {\l println!(\l \"Current tick: {}, stratum: {}\",\l context.current_tick(),\l context.current_stratum(),\l )\l})\l", shape=house, fillcolor="#ffff88"] n1v1 -> n2v1 subgraph "cluster n1v1" { fillcolor="#dddddd" diff --git a/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_mermaid.snap b/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_mermaid.snap index fea13611ec88..0198b1b208fa 100644 --- a/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_mermaid.snap +++ b/hydroflow/tests/snapshots/surface_context__context_ref@graphvis_mermaid.snap @@ -9,7 +9,7 @@ classDef pushClass fill:#ff8,stroke:#000,text-align:left,white-space:pre classDef otherClass fill:#fdc,stroke:#000,text-align:left,white-space:pre linkStyle default stroke:#aaa 1v1[\"(1v1) source_iter([()])"/]:::pullClass -2v1[/"
(2v1)
for_each(|()| {
println!(
"Current tick: {}, stratum: {}", context.current_tick(), context
.current_stratum()
)
})
"\]:::pushClass +2v1[/"
(2v1)
for_each(|()| {
println!(
"Current tick: {}, stratum: {}",
context.current_tick(),
context.current_stratum(),
)
})
"\]:::pushClass 1v1-->2v1 subgraph sg_1v1 ["sg_1v1 stratum 0"] 1v1 diff --git a/relalg/testdata/compile/compile b/relalg/testdata/compile/compile index 09e4a609a186..3aab08b60dfa 100644 --- a/relalg/testdata/compile/compile +++ b/relalg/testdata/compile/compile @@ -4,9 +4,11 @@ compile ---- fn main() { let __values_1 = vec![ - vec![ScalarExpr::Literal(Datum::Int(1i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(2i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(3i64)).eval(& Vec::new())] + vec![ + ScalarExpr::Literal(Datum::Int(1i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(2i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(3i64)).eval(&Vec::new()), + ], ] .into_iter(); for row in __values_1 { @@ -24,9 +26,11 @@ compile ---- fn main() { let __values_2 = vec![ - vec![ScalarExpr::Literal(Datum::Int(1i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(2i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(3i64)).eval(& Vec::new())] + vec![ + ScalarExpr::Literal(Datum::Int(1i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(2i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(3i64)).eval(&Vec::new()), + ], ] .into_iter(); let __filter_1 = __values_2 @@ -53,12 +57,16 @@ compile ---- fn main() { let __values_2 = vec![ - vec![ScalarExpr::Literal(Datum::Int(1i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(2i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(3i64)).eval(& Vec::new())], - vec![ScalarExpr::Literal(Datum::Int(4i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(5i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(6i64)).eval(& Vec::new())] + vec![ + ScalarExpr::Literal(Datum::Int(1i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(2i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(3i64)).eval(&Vec::new()), + ], + vec![ + ScalarExpr::Literal(Datum::Int(4i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(5i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(6i64)).eval(&Vec::new()), + ], ] .into_iter(); let __filter_1 = __values_2 @@ -96,22 +104,36 @@ compile ---- fn main() { let __values_2 = vec![ - vec![ScalarExpr::Literal(Datum::Int(1i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(2i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(3i64)).eval(& Vec::new())], - vec![ScalarExpr::Literal(Datum::Int(4i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(5i64)).eval(& Vec::new()), - ScalarExpr::Literal(Datum::Int(6i64)).eval(& Vec::new())] + vec![ + ScalarExpr::Literal(Datum::Int(1i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(2i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(3i64)).eval(&Vec::new()), + ], + vec![ + ScalarExpr::Literal(Datum::Int(4i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(5i64)).eval(&Vec::new()), + ScalarExpr::Literal(Datum::Int(6i64)).eval(&Vec::new()), + ], ] .into_iter(); let __project_1 = __values_2 .map(|row| { vec![ - ScalarExpr::Plus(Box::new(ScalarExpr::ColRef(0usize)), - Box::new(ScalarExpr::Literal(Datum::Int(1i64)))).eval(& row), - ScalarExpr::Plus(Box::new(ScalarExpr::Literal(Datum::Int(5i64))), - Box::new(ScalarExpr::Plus(Box::new(ScalarExpr::ColRef(1usize)), - Box::new(ScalarExpr::ColRef(2usize))))).eval(& row) + ScalarExpr::Plus( + Box::new(ScalarExpr::ColRef(0usize)), + Box::new(ScalarExpr::Literal(Datum::Int(1i64))), + ) + .eval(&row), + ScalarExpr::Plus( + Box::new(ScalarExpr::Literal(Datum::Int(5i64))), + Box::new( + ScalarExpr::Plus( + Box::new(ScalarExpr::ColRef(1usize)), + Box::new(ScalarExpr::ColRef(2usize)), + ), + ), + ) + .eval(&row), ] }); for row in __project_1 { diff --git a/variadics/Cargo.toml b/variadics/Cargo.toml index 983b05c7ab02..2e12816455e7 100644 --- a/variadics/Cargo.toml +++ b/variadics/Cargo.toml @@ -6,3 +6,9 @@ edition = "2021" license = "Apache-2.0" documentation = "https://docs.rs/variadics/" description = "Variadic generics on stable Rust using tuple lists" + +[dependencies] +sealed = "0.5" + +[dev-dependencies] +trybuild = "1.0" \ No newline at end of file diff --git a/variadics/README.md b/variadics/README.md new file mode 100644 index 000000000000..c42ab1a50169 --- /dev/null +++ b/variadics/README.md @@ -0,0 +1,74 @@ +# Variadics + +Variadic generics in stable Rust + +## Variadic Generics? + +Variadic generics are one of the most discussed potential Rust features. They would enable +traits, functions, and data structures to be generic over variable length tuples of arbitrary +types. + +Currently you can only implement generic code for tuples of a specific length. If you want to +handle tuples of varying lengths you must write a separate implementation for each length. This +leads to the notorious limitation that traits in Rust generally +[only apply for tuples up to length 12](https://doc.rust-lang.org/std/primitive.tuple.html#impl-From%3C(T,+T,+T,+T,+T,+T,+T,+T,+T,+T,+T,+T)%3E-for-%5BT;+12%5D). + +Variadic generics allow generic code to handle tuples of any length. + +## Tuple lists + +Although variadic generics fundamentally require changing the Rust compiler, we can emulate +pretty well with tuple lists. + +Any tuple `(A, B, C, D)` can be mapped to (and from) a recursive tuple `(A, (B, (C, (D, ()))))`. + +Each element consists of a nested pair `(Item, Rest)`, where `Item` is tuple element and `Rest` +is the rest of the list. For last element `Rest` is a unit tuple `()`. Unlike regular flat +tuples, these recursive tuples can be effectively reasoned about in stable Rust. + +You may recognize this fundamental structure from [`cons` lists in Lisp](https://en.wikipedia.org/wiki/Cons#Lists) +as well as [`HList`s in Haskell](https://hackage.haskell.org/package/HList/docs/Data-HList-HList.html). + +This crate calls these lists "variadics" and provides traits and macros to allow simple, +ergonimc use of them. + +## Usage + +[`var_expr!`] creates variadic values/expressions, +[`var_type!`] creates variadic types, +and [`var_args!`] creates variadic patterns (used in unpacking arguments, on the left side of `let` +declarations, etc.). + +These macros support the "spread" syntax `...`, also known as "splat". For example, `var_expr!(a, ...var_b, ...var_c, d)` +will concatenate `a`, the items of `var_b`, the items of `var_c` and `d` together into a single +variadic list. + +## Acknowledgements + +This crate is based on [`tuple_list` by VFLashM](https://github.com/VFLashM/tuple_list), which is MIT licensed: + +
+ MIT license + +```text +Copyright (c) 2020 Valerii Lashmanov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE +``` +
diff --git a/variadics/examples/debug_fields.rs b/variadics/examples/debug_fields.rs new file mode 100644 index 000000000000..2db460433171 --- /dev/null +++ b/variadics/examples/debug_fields.rs @@ -0,0 +1,44 @@ +//! https://poignardazur.github.io/2023/11/08/time-for-variadic-generics/ + +use std::fmt::{Debug, DebugTuple, Formatter, Result}; + +use variadics::{var_args, var_expr, var_type, Variadic}; + +#[sealed::sealed] +pub trait DebugVariadicTrait { + fn apply(&self, f: &mut DebugTuple); +} +#[sealed::sealed] +impl DebugVariadicTrait for () { + fn apply(&self, _f: &mut DebugTuple) {} +} +#[sealed::sealed] +impl DebugVariadicTrait for var_type!(Head, ...Tail) { + fn apply(&self, f: &mut DebugTuple) { + let var_args!(head, ...tail) = self; + f.field(head); + tail.apply(f); + } +} + +pub struct DebugVariadic(V); +impl Debug for DebugVariadic { + fn fmt(&self, f: &mut Formatter<'_>) -> Result { + self.0.apply(&mut f.debug_tuple("")); + Ok(()) + } +} + +fn main() { + let var_tuple = var_expr!("hello", 1, 'w'); + let var_tuple = DebugVariadic(var_tuple); + println!("{:?}", var_tuple); +} + +// impl Debug for Ts { +// fn fmt(&self, f: &mut Formatter<'_>) -> Result { +// let mut f = f.debug_tuple(""); +// self.apply(f); +// f.finish() +// } +// } diff --git a/variadics/src/lib.rs b/variadics/src/lib.rs index b8f6692fed33..454afec00c2e 100644 --- a/variadics/src/lib.rs +++ b/variadics/src/lib.rs @@ -1,172 +1,82 @@ -//! Crate for macro-free variadic tuple metaprogramming. +#![warn(missing_docs)] +#![doc = include_str!("../README.md")] +//!   //! -//! # Rationale +//! # Main Macros //! -//! As of writing this crate, Rust does not support variadic generics -//! and does not allow to reason about tuples in general. -//! -//! Most importantly, Rust does not allow one to generically -//! implement a trait for all tuples whose elements implement it. -//! -//! This crate attempts to fill the gap by providing a way -//! to recursively define traits for tuples. -//! -//! # Tuple lists -//! -//! Tuple `(A, B, C, D)` can be unambiguously mapped into recursive tuple `(A, (B, (C, (D, ()))))`. -//! -//! On each level it consists of a pair `(Head, Tail)`, where `Head` is tuple element and -//! `Tail` is a remainder of the list. For last element `Tail` is an empty list. -//! -//! Unlike regular flat tuples, such recursive tuples can be effectively reasoned about in Rust. -//! -//! This crate calls such structures "variadics" and provides a set of traits and macros -//! allowing one to conveniently work with them. -//! -//! # Acknowledgements -//! -//! This crate is based on [`tuple_list` by VFLashM](https://github.com/VFLashM/tuple_list) -//! ```text -//! MIT License -//! -//! Copyright (c) 2020 Valerii Lashmanov -//! -//! Permission is hereby granted, free of charge, to any person obtaining a copy -//! of this software and associated documentation files (the "Software"), to deal -//! in the Software without restriction, including without limitation the rights -//! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -//! copies of the Software, and to permit persons to whom the Software is -//! furnished to do so, subject to the following conditions: -//! -//! The above copyright notice and this permission notice shall be included in all -//! copies or substantial portions of the Software. -//! -//! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -//! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -//! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -//! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -//! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -//! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -//! SOFTWARE. -//! ``` +//! ## [`var_expr!`] +#![doc = include_str!("../var_expr.md")] +//! ## [`var_type!`] +#![doc = include_str!("../var_type.md")] +//! ## [`var_args!`] +#![doc = include_str!("../var_args.md")] -/// Macro creating a variadic tuple value from a list of expressions. -/// -/// # Examples -/// -/// Main use of this macro is to create variadic tuple values: -/// ```rust -/// use variadics::var_expr; -/// -/// let list = var_expr!(10, false, "foo"); -/// -/// assert_eq!(list, (10, (false, ("foo", ()))),) -/// ``` -/// -/// It can also be used to unpack tuples: -/// ``` -/// # use variadics::var_expr; -/// let var_expr!(a, b, c) = var_expr!(10, false, "foo"); -/// -/// assert_eq!(a, 10); -/// assert_eq!(b, false); -/// assert_eq!(c, "foo"); -/// ``` +use sealed::sealed; + +#[doc = include_str!("../var_expr.md")] #[macro_export] macro_rules! var_expr { () => ( () ); - ($a:ident $(, $b:ident)* $(,)?) => ( ($a, $crate::var_expr!($($b),*)) ); - ($a:expr $(, $b:expr )* $(,)?) => ( ($a, $crate::var_expr!($($b),*)) ); + + (...$a:ident $(,)? ) => ( $a ); + (...$a:expr $(,)? ) => ( $a ); + (...$a:ident, $( $b:tt )+) => ( $crate::VariadicExt::extend($a, $crate::var_expr!( $( $b )* )) ); + (...$a:expr, $( $b:tt )+) => ( $crate::VariadicExt::extend($a, $crate::var_expr!( $( $b )* )) ); + + ($a:ident $(,)? ) => ( ($a, ()) ); + ($a:expr $(,)? ) => ( ($a, ()) ); + ($a:ident, $( $b:tt )+) => ( ($a, $crate::var_expr!( $( $b )* )) ); + ($a:expr, $( $b:tt )+) => ( ($a, $crate::var_expr!( $( $b )* )) ); } -/// Macro for pattern-matching with variadic tuples. This is mainly used for function arguments, -/// but it can also be used in `match`, `if let ...`, and `let ... else` expressions. -/// -/// Although it may somtimes be possible to use `var_expr!` in place of this macro, doing so may -/// cause confusing errors. -/// -/// # Examples -/// -/// ```rust -/// use variadics::{var_args, var_expr, var_type}; -/// -/// fn my_fn(var_args!(a, b, c): var_type!(usize, &str, bool)) { -/// println!("{} {} {}", a, b, c); -/// } -/// my_fn(var_expr!(12, "hello", false)); -/// ``` -/// -/// ```rust -/// use variadics::{var_args, var_expr}; -/// -/// let val = var_expr!(true, Some("foo"), 2); -/// if let var_args!(true, Some(item), 0..=3) = val { -/// println!("{}", item); -/// } else { -/// unreachable!(); -/// } -/// ``` -/// -/// ```rust -/// # use variadics::{var_expr, var_args}; -/// match var_expr!(true, Some(100), 5) { -/// var_args!(false, _, _) => unreachable!(), -/// var_args!(true, None, _) => unreachable!(), -/// var_args!(true, Some(0..=10), _) => unreachable!(), -/// var_args!(true, Some(a), b) => println!("{} {}", a, b), -/// } +#[doc = include_str!("../var_type.md")] #[macro_export] -macro_rules! var_args { +macro_rules! var_type { () => ( () ); - ($a:pat $(, $b:pat)* $(,)?) => ( ($a, $crate::var_args!($($b),*)) ); + + (...$a:ty $(,)? ) => ( $a ); + (...$a:ty, $( $b:tt )+) => ( <$a as $crate::VariadicExt>::Extend::<$crate::var_type!( $( $b )* )> ); + + ($a:ty $(,)? ) => ( ($a, ()) ); + ($a:ty, $( $b:tt )+) => ( ($a, $crate::var_type!( $( $b )* )) ); } -/// Macro creating a variadic tuple type from a list of types. -/// -/// `var_expr!` can be used to define simple types but will result in confusing errors for more -/// complex types. Use this macro, `var_type!` instead. -/// -/// # Examples -/// -/// ```rust -/// # use std::collections::HashMap; -/// use variadics::{var_expr, var_type}; -/// -/// // A simple variadic type. Although `var_expr!` would work in this case, it cannot handle -/// // more complex types i.e. ones with generics. -/// let list: var_type!(i32, bool, String) = Default::default(); -/// -/// // A more complex type: -/// let list: var_type!( -/// &'static str, -/// HashMap, -/// as IntoIterator>::Item, -/// ) = var_expr!("foo", HashMap::new(), false); -/// ``` -/// -/// Unfortunately, expressions and types cannot be handled using the same macro due to the -/// undefeated [bastion of the turbofish](https://github.com/rust-lang/rust/blob/7fd15f09008dd72f40d76a5bebb60e3991095a5f/src/test/ui/parser/bastion-of-the-turbofish.rs). +#[doc = include_str!("../var_args.md")] #[macro_export] -macro_rules! var_type { +macro_rules! var_args { () => ( () ); - ($a:ty $(, $b:ty)* $(,)?) => ( ($a, $crate::var_type!($($b),*)) ); + + (...$a:pat $(,)? ) => ( $a ); + (...$a:ty, $( $b:tt )+) => ( ::core::compile_error!("`var_args!` can only have the `...` spread syntax on the last field.") ); + + ($a:pat $(,)? ) => ( ($a, ()) ); + ($a:pat, $( $b:tt )+) => ( ($a, $crate::var_args!( $( $b )* )) ); } -/// This macro generates a basic variadic trait where each element must fulfill the trait clause. -/// Currently of limited usefulness. +/// This macro generates a basic variadic trait where each element must fulfill the `where` clause. /// /// ```rust /// use variadics::{var_expr, variadic_trait}; /// /// variadic_trait! { /// /// A variadic list of `Debug` items. -/// pub variadic DebugList where T: std::fmt::Debug {} +/// pub variadic DebugList where Item: std::fmt::Debug {} /// } /// /// let x = &var_expr!(1, "hello", 5.6); /// let _: &dyn DebugList = x; /// println!("{:?}", x); /// ``` +/// +/// This uses a special syntax similar to traits, but with the `trait` keyword replaced with +/// `variadic` where `T` is the generic parameter name for each item in the variadic list. `T` +/// can be changed to any valid generic identifier. The bounds on `T` must be put in the where +/// clause; they cannot be expressed directly-- `variadic` is invalid. +/// +/// For now this can only create traits which bounds the `Item`s and cannot have associated +/// methods. This means the body of the variadic trait must be empty. But in the future this +/// declarative macro may be converted into a more powerful procedural macro with associated +/// method support. #[macro_export] macro_rules! variadic_trait { ( @@ -175,97 +85,175 @@ macro_rules! variadic_trait { ) => { $( #[$( $attrs )*] )* $vis trait $name: $crate::Variadic {} - impl $name for () {} - impl<$item, __Rest: $name> $name for ($item, __Rest) $( $clause )* + $( #[$( $attrs )*] )* + impl $name for $crate::var_type!() {} + $( #[$( $attrs )*] )* + impl<$item, __Rest: $name> $name for $crate::var_type!($item, ...__Rest) $( $clause )* }; } +/// A variadic tuple list. +/// +/// This is a sealed trait, implemented only for `(Item, Rest) where Rest: Variadic` and `()`. +#[sealed] pub trait Variadic {} +#[sealed] +impl Variadic for (Item, Rest) where Rest: Variadic {} +#[sealed] impl Variadic for () {} -impl Variadic for (X, T) where T: Variadic {} -pub trait Extend: Variadic -where - U: Variadic, -{ - type Extended: Variadic; - fn extend(self, input: U) -> Self::Extended; -} +/// Extension methods/types for [`Variadic`]s. +/// +/// This is a sealed trait. +#[sealed] +pub trait VariadicExt: Variadic { + /// The number of items in this variadic (its length). + const LEN: usize; -impl Extend for (X, T) + /// Creates a new (longer) variadic type by appending `Suffix` onto the end of this variadc. + type Extend: VariadicExt + where + Suffix: VariadicExt; + /// Extends this variadic value by appending `suffix` onto the end. + fn extend(self, suffix: Suffix) -> Self::Extend + where + Suffix: VariadicExt; + + /// The reverse of this variadic type. + type Reverse: VariadicExt; + /// Reverses this variadic value. + fn reverse(self) -> Self::Reverse; +} +#[sealed] +impl VariadicExt for (Item, Rest) where - T: Variadic + Extend, - U: Variadic, + Rest: VariadicExt, { - type Extended = (X, >::Extended); - fn extend(self, input: U) -> Self::Extended { - let (x, t) = self; - (x, t.extend(input)) + const LEN: usize = 1 + Rest::LEN; + + type Extend = (Item, Rest::Extend) where Suffix: VariadicExt; + fn extend(self, suffix: Suffix) -> Self::Extend + where + Suffix: VariadicExt, + { + let (item, rest) = self; + (item, rest.extend(suffix)) + } + + type Reverse = ::Extend<(Item, ())>; + fn reverse(self) -> Self::Reverse { + let (item, rest) = self; + rest.reverse().extend((item, ())) } } -impl Extend for () -where - U: Variadic, -{ - type Extended = U; - fn extend(self, input: U) -> Self::Extended { - input +#[sealed] +impl VariadicExt for () { + const LEN: usize = 0; + + type Extend = Suffix where Suffix: VariadicExt; + fn extend(self, suffix: Suffix) -> Self::Extend + where + Suffix: VariadicExt, + { + suffix } + + type Reverse = (); + fn reverse(self) -> Self::Reverse {} } -pub trait SplitPrefix: Variadic -where - U: Variadic, -{ - type Suffix: Variadic; - fn split(self) -> (U, Self::Suffix); +/// A variadic where all elements are the same type, `T`. +/// +/// This is a sealed trait. +#[sealed] +pub trait HomogenousVariadic: Variadic { + /// Returns a reference to an element. + fn get(&self, i: usize) -> Option<&T>; + /// Returns an exclusive reference to an element. + fn get_mut(&mut self, i: usize) -> Option<&mut T>; + + /// Iterator type returned by `into_iter`. + type IntoIter: Iterator; + /// Turns this `HomogenousVariadic` into an iterator of items `T`. + fn into_iter(self) -> Self::IntoIter; } -impl SplitPrefix<(X, U)> for (X, T) -where - U: Variadic, - T: SplitPrefix, -{ - type Suffix = >::Suffix; - fn split(self) -> ((X, U), Self::Suffix) { - let (x, t) = self; - let (t, u) = t.split(); - ((x, t), u) +#[sealed] +impl HomogenousVariadic for () { + fn get(&self, _i: usize) -> Option<&T> { + None + } + fn get_mut(&mut self, _i: usize) -> Option<&mut T> { + None + } + + type IntoIter = std::iter::Empty; + fn into_iter(self) -> Self::IntoIter { + std::iter::empty() } } -impl SplitPrefix<()> for T +#[sealed] +impl HomogenousVariadic for (T, Rest) where - T: Variadic, + Rest: HomogenousVariadic, { - type Suffix = T; - fn split(self) -> ((), Self::Suffix) { - ((), self) + fn get(&self, i: usize) -> Option<&T> { + let (item, rest) = self; + if i == 0 { + Some(item) + } else { + rest.get(i) + } + } + fn get_mut(&mut self, i: usize) -> Option<&mut T> { + let (item, rest) = self; + if i == 0 { + Some(item) + } else { + rest.get_mut(i) + } + } + + type IntoIter = std::iter::Chain, Rest::IntoIter>; + fn into_iter(self) -> Self::IntoIter { + let (item, rest) = self; + std::iter::once(item).chain(rest.into_iter()) } } -pub trait Split: Variadic +/// Helper trait for splitting a variadic into two parts. `Prefix` is the first part, everything +/// after is the `Suffix` or second part. +/// +/// This is a sealed trait. +#[sealed] +pub trait Split: Variadic where - U: Variadic, - V: Variadic, + Prefix: Variadic, { - fn split(self) -> (U, V); + /// The second part when splitting this variadic by `Prefix`. + type Suffix: Variadic; + /// Splits this variadic into two parts, first the `Prefix`, and second the `Suffix`. + fn split(self) -> (Prefix, Self::Suffix); } -impl Split<(X, U), V> for (X, T) +#[sealed] +impl Split<(Item, PrefixRest)> for (Item, Rest) where - T: Split, - U: Variadic, - V: Variadic, + PrefixRest: Variadic, + Rest: Split, { - fn split(self) -> ((X, U), V) { - let (x, t) = self; - let (u, v) = t.split(); - ((x, u), v) + type Suffix = >::Suffix; + fn split(self) -> ((Item, PrefixRest), Self::Suffix) { + let (item, rest) = self; + let (prefix_rest, suffix) = rest.split(); + ((item, prefix_rest), suffix) } } -impl Split<(), T> for T +#[sealed] +impl Split<()> for Rest where - T: Variadic, + Rest: Variadic, { - fn split(self) -> ((), T) { + type Suffix = Rest; + fn split(self) -> ((), Self::Suffix) { ((), self) } } @@ -277,7 +265,7 @@ mod test { type MyList = var_type!(u8, u16, u32, u64); type MyPrefix = var_type!(u8, u16); - type MySuffix = >::Suffix; + type MySuffix = >::Suffix; #[allow(dead_code)] const _: MySuffix = var_expr!(0_u32, 0_u64); @@ -291,4 +279,13 @@ mod test { let _ = var_expr!("a",); let _ = var_expr!(false, true, 1 + 2); } + + variadic_trait! { + /// Variaidic list of futures. + pub variadic FuturesList where F: std::future::Future {} + } + + type _ListA = var_type!(u32, u8, i32); + type _ListB = var_type!(..._ListA, bool, Option<()>); + type _ListC = var_type!(..._ListA, bool, Option::<()>); } diff --git a/variadics/tests/boxed_refed.rs b/variadics/tests/boxed_refed.rs new file mode 100644 index 000000000000..17366b177dc5 --- /dev/null +++ b/variadics/tests/boxed_refed.rs @@ -0,0 +1,43 @@ +use variadics::*; + +pub trait Boxed: Variadic { + type Boxed; + fn boxed(self) -> Self::Boxed; +} +impl Boxed for (Item, Rest) +where + Rest: Boxed, +{ + type Boxed = var_type!(Box, ...Rest::Boxed); + fn boxed(self) -> Self::Boxed { + let (item, rest) = self; + var_expr!(Box::new(item), ...rest.boxed()) + } +} +impl Boxed for () { + type Boxed = (); + fn boxed(self) -> Self::Boxed {} +} + +pub trait Refed: Variadic { + type Refed<'a> + where + Self: 'a; + fn refed(&self) -> Self::Refed<'_>; +} +impl Refed for (Item, Rest) +where + Rest: Refed, +{ + type Refed<'a> = (&'a Item, Rest::Refed<'a>) + where + Self: 'a; + fn refed(&self) -> Self::Refed<'_> { + let (item, rest) = self; + (item, rest.refed()) + } +} +impl Refed for () { + type Refed<'a> = (); + fn refed(&self) -> Self::Refed<'_> {} +} diff --git a/variadics/tests/compile-fail/var_args_spread_middle.rs b/variadics/tests/compile-fail/var_args_spread_middle.rs new file mode 100644 index 000000000000..f76f54595a4d --- /dev/null +++ b/variadics/tests/compile-fail/var_args_spread_middle.rs @@ -0,0 +1,5 @@ +use variadics::*; + +fn main() { + let var_args!(a, ...b, c) = var_expr!(1, 2.0, "three", false); +} \ No newline at end of file diff --git a/variadics/tests/compile-fail/var_args_spread_middle.stderr b/variadics/tests/compile-fail/var_args_spread_middle.stderr new file mode 100644 index 000000000000..50f860200781 --- /dev/null +++ b/variadics/tests/compile-fail/var_args_spread_middle.stderr @@ -0,0 +1,7 @@ +error: `var_args!` can only have the `...` spread syntax on the last field. + --> tests/compile-fail/var_args_spread_middle.rs:4:9 + | +4 | let var_args!(a, ...b, c) = var_expr!(1, 2.0, "three", false); + | ^^^^^^^^^^^^^^^^^^^^^ + | + = note: this error originates in the macro `$crate::var_args` which comes from the expansion of the macro `var_args` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/variadics/tests/compile-fail/var_args_spread_twice.rs b/variadics/tests/compile-fail/var_args_spread_twice.rs new file mode 100644 index 000000000000..d77a679088e1 --- /dev/null +++ b/variadics/tests/compile-fail/var_args_spread_twice.rs @@ -0,0 +1,5 @@ +use variadics::*; + +fn main() { + let var_args!(a, ...b, ...c) = var_expr!(1, 2.0, "three", false); +} \ No newline at end of file diff --git a/variadics/tests/compile-fail/var_args_spread_twice.stderr b/variadics/tests/compile-fail/var_args_spread_twice.stderr new file mode 100644 index 000000000000..ca0be9132aba --- /dev/null +++ b/variadics/tests/compile-fail/var_args_spread_twice.stderr @@ -0,0 +1,7 @@ +error: `var_args!` can only have the `...` spread syntax on the last field. + --> tests/compile-fail/var_args_spread_twice.rs:4:9 + | +4 | let var_args!(a, ...b, ...c) = var_expr!(1, 2.0, "three", false); + | ^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: this error originates in the macro `$crate::var_args` which comes from the expansion of the macro `var_args` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/variadics/tests/compile-fail/var_expr_missing_comma.rs b/variadics/tests/compile-fail/var_expr_missing_comma.rs new file mode 100644 index 000000000000..074e45190e8e --- /dev/null +++ b/variadics/tests/compile-fail/var_expr_missing_comma.rs @@ -0,0 +1,5 @@ +use variadics::*; + +fn main() { + let _ = var_expr!(1, 2.0 "three", false); +} \ No newline at end of file diff --git a/variadics/tests/compile-fail/var_expr_missing_comma.stderr b/variadics/tests/compile-fail/var_expr_missing_comma.stderr new file mode 100644 index 000000000000..4652ff01cef3 --- /dev/null +++ b/variadics/tests/compile-fail/var_expr_missing_comma.stderr @@ -0,0 +1,9 @@ +error: no rules expected the token `"three"` + --> tests/compile-fail/var_expr_missing_comma.rs:4:30 + | +4 | let _ = var_expr!(1, 2.0 "three", false); + | -^^^^^^^ no rules expected this token in macro call + | | + | help: missing comma here + | + = note: while trying to match sequence start diff --git a/variadics/tests/compile-fail/var_type_badtype.rs b/variadics/tests/compile-fail/var_type_badtype.rs new file mode 100644 index 000000000000..ebc3c1652999 --- /dev/null +++ b/variadics/tests/compile-fail/var_type_badtype.rs @@ -0,0 +1,5 @@ +use variadics::*; + +fn main() { + type _List = var_type!(String, u32, MyIdent, bool); +} diff --git a/variadics/tests/compile-fail/var_type_badtype.stderr b/variadics/tests/compile-fail/var_type_badtype.stderr new file mode 100644 index 000000000000..380e22f7376c --- /dev/null +++ b/variadics/tests/compile-fail/var_type_badtype.stderr @@ -0,0 +1,5 @@ +error[E0412]: cannot find type `MyIdent` in this scope + --> tests/compile-fail/var_type_badtype.rs:4:41 + | +4 | type _List = var_type!(String, u32, MyIdent, bool); + | ^^^^^^^ not found in this scope diff --git a/variadics/tests/compile-fail/var_type_badtype_call.rs b/variadics/tests/compile-fail/var_type_badtype_call.rs new file mode 100644 index 000000000000..caa48bb61927 --- /dev/null +++ b/variadics/tests/compile-fail/var_type_badtype_call.rs @@ -0,0 +1,5 @@ +use variadics::*; + +fn main() { + type _List = var_type!(String, u32, MyIdent(), bool); +} diff --git a/variadics/tests/compile-fail/var_type_badtype_call.stderr b/variadics/tests/compile-fail/var_type_badtype_call.stderr new file mode 100644 index 000000000000..2c8d01b43e17 --- /dev/null +++ b/variadics/tests/compile-fail/var_type_badtype_call.stderr @@ -0,0 +1,5 @@ +error[E0412]: cannot find type `MyIdent` in this scope + --> tests/compile-fail/var_type_badtype_call.rs:4:41 + | +4 | type _List = var_type!(String, u32, MyIdent(), bool); + | ^^^^^^^ not found in this scope diff --git a/variadics/tests/compile-fail/var_type_spread_badtype.rs b/variadics/tests/compile-fail/var_type_spread_badtype.rs new file mode 100644 index 000000000000..736f1a967f7b --- /dev/null +++ b/variadics/tests/compile-fail/var_type_spread_badtype.rs @@ -0,0 +1,6 @@ +use variadics::*; + +fn main() { + type List = var_type!(String, u32, ...f64, bool); + fn check(_: List) {} +} diff --git a/variadics/tests/compile-fail/var_type_spread_badtype.stderr b/variadics/tests/compile-fail/var_type_spread_badtype.stderr new file mode 100644 index 000000000000..c8ff38c3d5e5 --- /dev/null +++ b/variadics/tests/compile-fail/var_type_spread_badtype.stderr @@ -0,0 +1,9 @@ +error[E0277]: the trait bound `f64: VariadicExt` is not satisfied + --> tests/compile-fail/var_type_spread_badtype.rs:5:17 + | +5 | fn check(_: List) {} + | ^^^^ the trait `VariadicExt` is not implemented for `f64` + | + = help: the following other types implement trait `VariadicExt`: + () + (Item, Rest) diff --git a/variadics/tests/compile_fail.rs b/variadics/tests/compile_fail.rs new file mode 100644 index 000000000000..14eb8e619563 --- /dev/null +++ b/variadics/tests/compile_fail.rs @@ -0,0 +1,5 @@ +#[test] +fn test_compile_fail() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/compile-fail/*.rs"); +} diff --git a/variadics/var_args.md b/variadics/var_args.md new file mode 100644 index 000000000000..ce53adeb1c99 --- /dev/null +++ b/variadics/var_args.md @@ -0,0 +1,47 @@ +Variadic patterns macro. + +Used to [pattern-match](https://doc.rust-lang.org/reference/patterns.html) or "unpack" variadic +tuples. This is used for function arguments, as well as in `match`, `if/while let ...`, +`let ... else`, and `for` expressions. + +Although it may somtimes be possible to use `var_expr!` in place of this macro, doing so may +cause confusing errors. + +```rust +use variadics::{var_args, var_expr, var_type}; + +fn my_fn(var_args!(a, b, c): var_type!(usize, &str, bool)) { + println!("{} {} {}", a, b, c); +} +my_fn(var_expr!(12, "hello", false)); +``` + +```rust +use variadics::{var_args, var_expr}; + +let val = var_expr!(true, Some("foo"), 2); +if let var_args!(true, Some(item), 0..=3) = val { + println!("{}", item); +} else { + unreachable!(); +} +``` + +```rust +# use variadics::{var_args, var_expr}; +match var_expr!(true, Some(100), 5) { + var_args!(false, _, _) => unreachable!(), + var_args!(true, None, _) => unreachable!(), + var_args!(true, Some(0..=10), _) => unreachable!(), + var_args!(true, Some(a), b) => println!("{} {}", a, b), +} +``` + +The "spread" (or "splat") syntax `...` can be used to unpack the tail of a variadic. Note that +unlike with the other macros, this macro (`var_args!`) only allows the spread syntax on the +final argument. +```rust +# use variadics::{var_args, var_expr}; +let var_args!(a, b, ...list_c) = var_expr!("hi", 100, 0.5, false); +assert_eq!(var_expr!(0.5, false), list_c); +``` \ No newline at end of file diff --git a/variadics/var_expr.md b/variadics/var_expr.md new file mode 100644 index 000000000000..58511f6cf393 --- /dev/null +++ b/variadics/var_expr.md @@ -0,0 +1,35 @@ +Variadic expressions (values) macro. + +Creates a variadic tuple value from a list of expressions. + +Create a variadic tuple value: +```rust +use variadics::var_expr; + +let list = var_expr!(10, false, "foo"); + +assert_eq!(list, (10, (false, ("foo", ()))),) +``` + +Although this can be used as a pattern to unpack tuples, [`var_args!`] should be used instead: +``` +# use variadics::*; +// Ok... +let var_expr!(a, b, c) = var_expr!(10, false, "foo"); +// Better: +let var_args!(a, b, c) = var_expr!(10, false, "foo"); + +assert_eq!(a, 10); +assert_eq!(b, false); +assert_eq!(c, "foo"); +``` + +The "spread" (or "splat") syntax `...` can be used to concatenate variadics together: +```rust +# use variadics::var_expr; +let list_a = var_expr!(0.5, "foo"); +let list_b = var_expr!(-5, false); +// Spread syntax: +let list_c = var_expr!(...list_a, ...list_b, "bar"); +// Equals `var_expr!(0.5, "foo", -5, false, "bar)`. +``` \ No newline at end of file diff --git a/variadics/var_type.md b/variadics/var_type.md new file mode 100644 index 000000000000..efb1e4c54638 --- /dev/null +++ b/variadics/var_type.md @@ -0,0 +1,35 @@ +Variadic types macro. + +Creates a variadic tuple type from a list of types. + +`var_expr!` can be used to define simple types but will result in confusing errors for more +complex types. Use this macro, `var_type!` instead. + +```rust +# use std::collections::HashMap; +use variadics::{var_expr, var_type}; + +// A simple variadic type. Although `var_expr!` would work in this case, it cannot handle +// more complex types i.e. ones with generics. +let list: var_type!(i32, bool, String) = Default::default(); + +// A more complex type: +let list: var_type!( + &'static str, + HashMap, + as IntoIterator>::Item, +) = var_expr!("foo", HashMap::new(), false); +``` + +The "spread" (or "splat") syntax `...` can be used to concatenate variadics together: +```rust +# use variadics::var_type; +type ListA = var_type!(f32, &'static str); +type ListB = var_type!(i32, bool); +// Spread syntax: +type ListC = var_type!(...ListA, ...ListB, Option::<()>); +// Equals `var_type!(f32, &'static str, i32, bool, Option::<()>)`. +``` + +Unfortunately, expressions and types cannot be handled using the same macro due to the +undefeated [bastion of the turbofish](https://github.com/rust-lang/rust/blob/7fd15f09008dd72f40d76a5bebb60e3991095a5f/src/test/ui/parser/bastion-of-the-turbofish.rs). \ No newline at end of file