diff --git a/Cargo.lock b/Cargo.lock index 5fe88a4a..cbd3e1a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "cpp_demangle", "fallible-iterator", @@ -74,21 +74,22 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "version_check", + "zerocopy", ] [[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", ] @@ -128,9 +129,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.5.0" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", @@ -142,15 +143,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -166,9 +167,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "2.1.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -176,9 +177,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "arc-swap" @@ -186,6 +187,12 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +[[package]] +name = "array-init" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" + [[package]] name = "arrayvec" version = "0.5.2" @@ -208,36 +215,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener", + "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 = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +dependencies = [ + "concurrent-queue", + "event-listener 4.0.0", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-executor" -version = "1.5.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock", + "async-lock 3.1.2", "async-task", "concurrent-queue", - "fastrand 1.9.0", - "futures-lite", + "fastrand 2.0.1", + "futures-lite 2.0.1", "slab", ] [[package]] name = "async-global-executor" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" +checksum = "9b4353121d5644cdf2beb5726ab752e79a8db1ebb52031770ec47db31d245526" dependencies = [ - "async-channel", + "async-channel 2.1.1", "async-executor", - "async-io", - "async-lock", + "async-io 2.2.1", + "async-lock 3.1.2", "blocking", - "futures-lite", + "futures-lite 2.0.1", "once_cell", ] @@ -247,75 +267,121 @@ 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 1.1.0", "cfg-if 1.0.0", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix 0.37.20", + "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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6d3b15875ba253d1110c740755e246537483f152fa334f91abd7fe84c88b3ff" +dependencies = [ + "async-lock 3.1.2", + "cfg-if 1.0.0", + "concurrent-queue", + "futures-io", + "futures-lite 2.0.1", + "parking", + "polling 3.3.1", + "rustix 0.38.25", + "slab", + "tracing 0.1.40", + "windows-sys 0.52.0", +] + [[package]] name = "async-lock" -version = "2.7.0" +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 = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "dea8b3453dd7cc96711834b75400d671b73e3656975fa68d9f277163b7f7e316" dependencies = [ - "event-listener", + "event-listener 4.0.0", + "event-listener-strategy", + "pin-project-lite", ] [[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 1.1.0", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", "blocking", "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "rustix 0.37.20", - "signal-hook", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.25", "windows-sys 0.48.0", ] [[package]] name = "async-scoped" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7a6a57c8aeb40da1ec037f5d455836852f7a57e69e1b1ad3d8f38ac1d6cadf" +checksum = "2bb5d44cd33a5095cf47aa2a90455ea3f9141f45e24d092425fef2bf4fd9c98e" dependencies = [ "futures", "pin-project", - "slab", "tokio", ] +[[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.1", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if 1.0.0", + "futures-core", + "futures-io", + "rustix 0.38.25", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + [[package]] name = "async-std" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-global-executor", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "async-process", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite", + "futures-lite 1.13.0", "gloo-timers", "kv-log-macro", "log", @@ -329,19 +395,19 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" [[package]] name = "async-trait" -version = "0.1.72" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -355,17 +421,17 @@ dependencies = [ [[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 = "atomicwrites" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1163d9d7c51de51a2b79d6df5e8888d11e9df17c752ce4a285fb6ca1580734e" +checksum = "f4d45f362125ed144544e57b0ec6de8fd6a296d41a6252fc4a20c0cf12e9ed3a" dependencies = [ - "rustix 0.37.20", + "rustix 0.38.25", "tempfile", "windows-sys 0.48.0", ] @@ -398,20 +464,20 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a1de45611fdb535bfde7b7de4fd54f4fd2b17b1737c0a59b69bf9b92074b8c" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" dependencies = [ "async-trait", "axum-core", - "base64 0.21.2", + "base64 0.21.5", "bitflags 1.3.2", "bytes", "futures-util", "http", "http-body", "hyper", - "itoa 1.0.6", + "itoa 1.0.9", "matchit", "memchr", "mime", @@ -425,7 +491,7 @@ dependencies = [ "sha1", "sync_wrapper", "tokio", - "tokio-tungstenite", + "tokio-tungstenite 0.20.1", "tower", "tower-layer", "tower-service", @@ -456,9 +522,9 @@ checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -498,9 +564,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -510,9 +576,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bfc506e7a2370ec239e1d072507b2a80c833083699d3c6fa176fbb4de8448c6" +checksum = "2f2139706359229bfa8f19142ac1155b4b80beafb7a60471ac5dd109d4a19778" dependencies = [ "serde", ] @@ -536,22 +602,24 @@ dependencies = [ ] [[package]] -name = "binread" -version = "2.2.0" +name = "binrw" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16598dfc8e6578e9b597d9910ba2e73618385dc9f4b1d43dd92c349d6be6418f" +checksum = "9e8318fda24dc135cdd838f57a2b5ccb6e8f04ff6b6c65528c4bd9b5fcdc5cf6" dependencies = [ - "binread_derive", - "rustversion", + "array-init", + "binrw_derive", + "bytemuck", ] [[package]] -name = "binread_derive" -version = "2.1.0" +name = "binrw_derive" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9672209df1714ee804b1f4d4f68c8eb2a90b1f7a07acf472f88ce198ef1fed" +checksum = "db0832bed83248115532dfb25af54fae1c83d67a2e4e3e2f591c13062e372e7e" dependencies = [ "either", + "owo-colors", "proc-macro2", "quote", "syn 1.0.109", @@ -592,9 +660,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "bitmaps" @@ -628,17 +696,18 @@ 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.1.2", "async-task", - "atomic-waker", - "fastrand 1.9.0", - "futures-lite", - "log", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.0.1", + "piper", + "tracing 0.1.40", ] [[package]] @@ -688,12 +757,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" dependencies = [ "memchr", - "regex-automata 0.3.7", + "regex-automata 0.4.3", "serde", ] @@ -708,47 +777,47 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytecount" -version = "0.6.3" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[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 = "bytesize" @@ -777,6 +846,23 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "calliope" +version = "0.1.0" +source = "git+https://github.com/tosc-rs/mgnp?branch=eliza/pub-reqresp#73fbb249aa420a92bd546a166b8167dc9807b604" +dependencies = [ + "cobs", + "futures", + "heapless", + "maitake-sync 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "postcard 1.0.8", + "serde", + "spitebuf 0.1.0 (git+https://github.com/tosc-rs/mnemos?rev=416b7d59fbc7fa889a774f54133786a584eb8732)", + "tracing 0.1.40", + "tricky-pipe", + "uuid 1.6.1", +] + [[package]] name = "camino" version = "1.1.6" @@ -788,9 +874,9 @@ dependencies = [ [[package]] name = "camino-tempfile" -version = "1.0.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ab15a83d13f75dbd86f082bdefd160b628476ef58d3b900a0ef74e001bb097" +checksum = "cb905055fa81e4d427f919b2cd0d76a998267de7d225ea767a1894743a5263c2" dependencies = [ "camino", "tempfile", @@ -798,16 +884,16 @@ dependencies = [ [[package]] name = "cargo" -version = "0.72.2" +version = "0.73.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171aca76a3199e771ea0b94ec260984ed9cba62af8e478142974dbaa594d583b" +checksum = "77a6fe1f5394d14b81d2f3f605832a3ce35ed0bf120bc7ef437ce27fd4929c6a" dependencies = [ "anyhow", - "base64 0.21.2", + "base64 0.21.5", "bytesize", "cargo-platform", "cargo-util", - "clap 4.4.0", + "clap 4.4.10", "crates-io", "curl", "curl-sys", @@ -828,10 +914,8 @@ dependencies = [ "ignore", "im-rc", "indexmap 1.9.3", - "is-terminal", "itertools 0.10.5", "jobserver", - "lazy_static", "lazycell", "libc", "libgit2-sys", @@ -842,6 +926,7 @@ dependencies = [ "os_info", "pasetors", "pathdiff", + "pulldown-cmark", "rand 0.8.5", "rustfix", "semver", @@ -851,13 +936,14 @@ dependencies = [ "serde_json", "sha1", "shell-escape", - "strip-ansi-escapes", + "strip-ansi-escapes 0.1.1", + "syn 2.0.39", "tar", "tempfile", "termcolor", - "time 0.3.22", - "toml 0.7.6", - "toml_edit", + "time", + "toml 0.7.8", + "toml_edit 0.19.15", "unicode-width", "unicode-xid", "url", @@ -884,13 +970,13 @@ dependencies = [ [[package]] name = "cargo-espflash" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "067165f2734b9a645b877d0bb06a8101d27007328b514f7f9fcac1a9684f1671" +checksum = "04f3322da0596591abeb520c988811add71c362fec5b66b7b7abf2f84a151f2a" dependencies = [ "cargo", - "cargo_metadata 0.15.4", - "clap 4.4.0", + "cargo_metadata 0.18.1", + "clap 4.4.10", "env_logger", "esp-idf-part", "espflash", @@ -898,7 +984,7 @@ dependencies = [ "miette", "serde", "thiserror", - "toml 0.7.6", + "toml 0.8.8", ] [[package]] @@ -909,26 +995,26 @@ checksum = "e11c675378efb449ed3ce8de78d75d0d80542fc98487c26aba28eb3b82feac72" dependencies = [ "semver", "serde", - "toml 0.7.6", + "toml 0.7.8", "url", ] [[package]] name = "cargo-nextest" -version = "0.9.57" +version = "0.9.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a993eaf0d9dc88ee1bdfe1496be53a40b0da9c065e1383e773e69b3ce17860" +checksum = "7137f08396cc9156c4888fe57c65ed7d2b23fa63a09853e28fbfd016deb292f6" dependencies = [ "camino", "cfg-if 1.0.0", - "clap 4.4.0", + "clap 4.4.10", "color-eyre", - "dialoguer", + "dialoguer 0.11.0", "duct", "enable-ansi-support", "env_logger", "guppy", - "itertools 0.11.0", + "itertools 0.12.0", "log", "miette", "nextest-filtering", @@ -941,25 +1027,25 @@ dependencies = [ "semver", "serde_json", "shell-words", - "supports-color 2.0.0", + "supports-color 2.1.0", "supports-unicode", "thiserror", ] [[package]] name = "cargo-platform" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] [[package]] name = "cargo-util" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd54c8b94a0c851d687924460637361c355afafa72d973fe8644499fbdee8fae" +checksum = "ce8c7905217be3315c7adb1f195a74fc38f586eefd8adfe398921eee8472d348" dependencies = [ "anyhow", "core-foundation", @@ -967,12 +1053,12 @@ dependencies = [ "hex", "jobserver", "libc", - "log", "miow", "same-file", "sha2", "shell-escape", "tempfile", + "tracing 0.1.40", "walkdir", "windows-sys 0.48.0", ] @@ -1006,9 +1092,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", @@ -1020,18 +1106,19 @@ dependencies = [ [[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 = [ "jobserver", + "libc", ] [[package]] name = "cfg-expr" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9" +checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3" dependencies = [ "smallvec", "target-lexicon", @@ -1051,17 +1138,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] @@ -1109,35 +1195,34 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.0" +version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d5f1946157a96594eb2d2c10eb7ad9a2b27518cb3000209dec700c35df9197d" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" dependencies = [ "clap_builder", - "clap_derive 4.4.0", - "once_cell", + "clap_derive 4.4.7", ] [[package]] name = "clap_builder" -version = "4.4.0" +version = "4.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78116e32a042dd73c2901f0dc30790d20ff3447f3e3472fad359e8c3d282bcd6" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" dependencies = [ "anstream", "anstyle", - "clap_lex 0.5.0", + "clap_lex 0.6.0", "strsim 0.10.0", - "terminal_size 0.2.6", + "terminal_size 0.3.0", ] [[package]] name = "clap_complete" -version = "4.4.0" +version = "4.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "586a385f7ef2f8b4d86bddaa0c094794e7ccbfe5ffef1f434fe928143fc783a5" +checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae" dependencies = [ - "clap 4.4.0", + "clap 4.4.10", ] [[package]] @@ -1155,14 +1240,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.0" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -1176,9 +1261,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "cloudabi" @@ -1228,36 +1313,39 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "7.0.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b" +checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686" dependencies = [ - "crossterm 0.26.1", - "strum 0.24.1", - "strum_macros 0.24.3", + "crossterm 0.27.0", + "strum 0.25.0", + "strum_macros 0.25.3", "unicode-width", ] [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" dependencies = [ "crossbeam-utils", ] [[package]] name = "config" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" +checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" dependencies = [ "async-trait", + "indexmap 1.9.3", "lazy_static", "nom", "pathdiff", + "ron", "serde", + "serde_json", "toml 0.5.11", ] @@ -1283,7 +1371,7 @@ dependencies = [ "prost", "prost-types", "tonic", - "tracing-core 0.1.31", + "tracing-core 0.1.32", ] [[package]] @@ -1305,8 +1393,8 @@ dependencies = [ "tokio", "tokio-stream", "tonic", - "tracing 0.1.37", - "tracing-core 0.1.31", + "tracing 0.1.40", + "tracing-core 0.1.32", "tracing-subscriber", ] @@ -1328,18 +1416,18 @@ checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "const_format" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ "proc-macro2", "quote", @@ -1363,17 +1451,17 @@ name = "cordyceps" version = "0.3.2" source = "git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064#101a4abaa19afdd131b334a16d92c9fb4909c064" dependencies = [ - "loom", - "tracing 0.1.37", + "loom 0.5.6", + "tracing 0.1.40", ] [[package]] name = "cordyceps" version = "0.3.2" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ - "loom", - "tracing 0.1.37", + "loom 0.7.1", + "tracing 0.1.40", ] [[package]] @@ -1403,9 +1491,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1435,9 +1523,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" @@ -1515,17 +1603,14 @@ dependencies = [ [[package]] name = "crossterm" -version = "0.26.1" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "crossterm_winapi", "libc", - "mio", "parking_lot", - "signal-hook", - "signal-hook-mio", "winapi", ] @@ -1542,25 +1627,25 @@ dependencies = [ name = "crowtty" version = "0.1.0" dependencies = [ - "clap 4.4.0", + "clap 4.4.10", "cobs", "mnemos-trace-proto", "owo-colors", - "postcard 1.0.6", + "postcard 1.0.8", "serde", "serialport 4.0.1", - "serialport 4.2.1", + "serialport 4.2.2", "sermux-proto", - "tracing 0.1.37", + "tracing 0.1.40", "tracing-serde-structured", "tracing-subscriber", ] [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -1602,26 +1687,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "csv" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ "csv-core", - "itoa 1.0.6", + "itoa 1.0.9", "ryu", "serde", ] [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] @@ -1634,11 +1719,11 @@ checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df" [[package]] name = "ctrlc" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e" +checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf" dependencies = [ - "nix 0.26.2", + "nix 0.27.1", "windows-sys 0.48.0", ] @@ -1653,15 +1738,15 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "socket2 0.4.9", + "socket2 0.4.10", "winapi", ] [[package]] name = "curl-sys" -version = "0.4.65+curl-8.2.1" +version = "0.4.68+curl-8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "961ba061c9ef2fe34bbd12b807152d96f0badd2bebe7b90ce6c8c8b7572a0986" +checksum = "b4a0d18d88360e374b16b2273c832b5e57258ffc1d4aa4f96b108e0738d5752f" dependencies = [ "cc", "libc", @@ -1670,7 +1755,35 @@ dependencies = [ "openssl-sys", "pkg-config", "vcpkg", - "winapi", + "windows-sys 0.48.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", ] [[package]] @@ -1745,7 +1858,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -1767,14 +1880,14 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[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 = "debug-ignore" @@ -1812,7 +1925,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -1858,6 +1971,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", +] + [[package]] name = "derivative" version = "2.2.0" @@ -1894,6 +2016,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + [[package]] name = "digest" version = "0.10.7" @@ -1947,6 +2082,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "display-error-chain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f77af9e75578c1ab34f5f04545a8b05be0c36fbd7a9bb3cf2d2a971e435fdbb9" + [[package]] name = "doc-comment" version = "0.3.3" @@ -2002,9 +2143,9 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", "digest", @@ -2014,13 +2155,38 @@ dependencies = [ "spki", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + [[package]] name = "ed25519-compact" version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a3d382e8464107391c8706b4c14b087808ecb909f6c15c34114bc42e53a9e4c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2", + "signature", + "subtle", + "zeroize", ] [[package]] @@ -2037,9 +2203,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -2088,7 +2254,7 @@ dependencies = [ "byteorder", "embedded-graphics-core 0.4.0", "float-cmp 0.9.0", - "micromath 2.0.0", + "micromath 2.1.0", ] [[package]] @@ -2125,8 +2291,8 @@ dependencies = [ [[package]] name = "embedded-graphics-web-simulator" -version = "0.3.0" -source = "git+https://github.com/spookyvision/embedded-graphics-web-simulator#0f07b1efb8181860c16b3edf8293aff9515cc480" +version = "0.4.0" +source = "git+https://github.com/spookyvision/embedded-graphics-web-simulator#c1d63e8b0fe956f3af01db8e2bf7aeba84dd2b12" dependencies = [ "embedded-graphics 0.8.1", "js-sys", @@ -2159,6 +2325,12 @@ dependencies = [ "embedded-hal 1.0.0-alpha.11", ] +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + [[package]] name = "embedded-io" version = "0.5.0" @@ -2191,21 +2363,21 @@ dependencies = [ [[package]] name = "enum-as-inner" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" dependencies = [ "heck", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.39", ] [[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", @@ -2231,23 +2403,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -2276,12 +2437,12 @@ source = "git+https://github.com/esp-rs/esp-hal?rev=5a8be302b4049a6ebc17bd712d97 dependencies = [ "basic-toml", "bitfield", - "bitflags 2.3.3", + "bitflags 2.4.1", "cfg-if 1.0.0", "critical-section", "embedded-dma", "embedded-hal 0.2.7", - "embedded-io", + "embedded-io 0.5.0", "esp-hal-procmacros", "esp-riscv-rt", "esp32c3", @@ -2305,7 +2466,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -2365,20 +2526,20 @@ dependencies = [ [[package]] name = "espflash" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ffcda1657e04a141ba03c2314164fa9eb638dc879cb9cf6cb8d33b03553cc70" +checksum = "76acb8029cc0571b926262ba45bce67686bc41081a40ae286779a664373d6132" dependencies = [ "addr2line", - "base64 0.21.2", - "binread", + "base64 0.21.5", + "binrw", "bytemuck", - "clap 4.4.0", + "clap 4.4.10", "clap_complete", "comfy-table", "crossterm 0.25.0", "ctrlc", - "dialoguer", + "dialoguer 0.10.4", "directories", "env_logger", "esp-idf-part", @@ -2391,12 +2552,12 @@ dependencies = [ "parse_int", "regex", "serde", - "serialport 4.2.1", + "serialport 4.2.2", "sha2", "slip-codec", "strum 0.25.0", "thiserror", - "toml 0.7.6", + "toml 0.8.8", "update-informer", "xmas-elf", ] @@ -2408,27 +2569,59 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "eyre" -version = "0.6.8" +name = "event-listener" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "indenter", - "once_cell", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "f3repl" -version = "0.1.0" +name = "event-listener" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae" dependencies = [ - "forth3", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "failure" -version = "0.1.8" +name = "event-listener-strategy" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.0", + "pin-project-lite", +] + +[[package]] +name = "eyre" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f656be11ddf91bd709454d15d5bd896fbaf4cc3314e69349e4d1569f5b46cd" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "f3repl" +version = "0.1.0" +dependencies = [ + "forth3", +] + +[[package]] +name = "failure" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ "backtrace", "failure_derive", @@ -2448,15 +2641,15 @@ dependencies = [ [[package]] name = "fallible-iterator" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "faster-hex" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9042d281a5eec0f2387f8c3ea6c4514e2cf2732c90a85aaf383b761ee3b290d" +checksum = "239f7bfb930f820ab16a9cd95afc26f88264cf6905c960b340a615384aa3338a" dependencies = [ "serde", ] @@ -2472,9 +2665,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fatfs" @@ -2499,9 +2692,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.20" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" [[package]] name = "file-id" @@ -2532,9 +2725,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "libz-sys", @@ -2582,9 +2775,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -2601,15 +2794,15 @@ dependencies = [ [[package]] name = "fs_at" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13865faf9bae9729a623b591520adb9c5b1b0ecbec8a48394f47f6801a458f9f" +checksum = "982f82cc75107eef84f417ad6c53ae89bf65b561937ca4a3b3b0fd04d0aa2425" dependencies = [ "aligned", "cfg-if 1.0.0", "cvt", "libc", - "nix 0.26.2", + "nix 0.26.4", "windows-sys 0.48.0", ] @@ -2672,9 +2865,9 @@ dependencies = [ [[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", @@ -2687,9 +2880,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", @@ -2697,26 +2890,28 @@ dependencies = [ [[package]] name = "futures-concurrency" -version = "7.3.0" +version = "7.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b726119e6cd29cf120724495b2085e1ed3d17821ea17b86de54576d1aa565f5e" +checksum = "ef6712e11cdeed5c8cf21ea0b90fec40fbe64afc9bbf2339356197eeca829fc3" dependencies = [ "bitvec", "futures-core", "pin-project", + "slab", + "smallvec", ] [[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", @@ -2725,9 +2920,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" @@ -2744,34 +2939,48 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "memchr", + "parking", + "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.29", + "syn 2.0.39", ] [[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", @@ -2812,9 +3021,9 @@ checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a" [[package]] name = "generator" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" dependencies = [ "cc", "libc", @@ -2847,9 +3056,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2870,9 +3079,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" dependencies = [ "fallible-iterator", "stable_deref_trait", @@ -2907,12 +3116,13 @@ dependencies = [ [[package]] name = "gix" -version = "0.44.1" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf41b61f7df395284f7a579c0fa1a7e012c5aede655174d4e91299ef1cac643" +checksum = "bf2a03ec66ee24d1b2bae3ab718f8d14f141613810cb7ff6756f7db667f1cd82" dependencies = [ "gix-actor", "gix-attributes", + "gix-commitgraph", "gix-config", "gix-credentials", "gix-date", @@ -2927,6 +3137,7 @@ dependencies = [ "gix-index", "gix-lock", "gix-mailmap", + "gix-negotiate", "gix-object", "gix-odb", "gix-pack", @@ -2955,25 +3166,25 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848efa0f1210cea8638f95691c82a46f98a74b9e3524f01d4955ebc25a8f84f3" +checksum = "9fe73f9f6be1afbf1bd5be919a9636fa560e2f14d42262a934423ed6760cd838" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "btoi", "gix-date", - "itoa 1.0.6", + "itoa 1.0.9", "nom", "thiserror", ] [[package]] name = "gix-attributes" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3015baa01ad2122fbcaab7863c857a603eb7b7ec12ac8141207c42c6439805e2" +checksum = "78b79590ac382f80d87e06416f5fcac6fee5d83dcb152a00ed0bdbaa988acc31" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-glob", "gix-path", "gix-quote", @@ -3004,20 +3215,34 @@ dependencies = [ [[package]] name = "gix-command" -version = "0.2.9" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c576cfbf577f72c097b5f88aedea502cd62952bdc1fb3adcab4531d5525a4c7" +dependencies = [ + "bstr 1.8.0", +] + +[[package]] +name = "gix-commitgraph" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f28f654184b5f725c5737c7e4f466cbd8f0102ac352d5257eeab19647ee4256" +checksum = "e8490ae1b3d55c47e6a71d247c082304a2f79f8d0332c1a2f5693d42a2021a09" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", + "gix-chunk", + "gix-features", + "gix-hash", + "memmap2", + "thiserror", ] [[package]] name = "gix-config" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d252a0eddb6df74600d3d8872dc9fe98835a7da43110411d705b682f49d4ac1" +checksum = "51f310120ae1ba8f0ca52fb22876ce9bad5b15c8ffb3eb7302e4b64a3b9f681c" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-config-value", "gix-features", "gix-glob", @@ -3039,8 +3264,8 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e874f41437441c02991dcea76990b9058fadfc54b02ab4dd06ab2218af43897" dependencies = [ - "bitflags 2.3.3", - "bstr 1.6.0", + "bitflags 2.4.1", + "bstr 1.8.0", "gix-path", "libc", "thiserror", @@ -3048,11 +3273,11 @@ dependencies = [ [[package]] name = "gix-credentials" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4874a4fc11ffa844a3c2b87a66957bda30a73b577ef1acf15ac34df5745de5ff" +checksum = "c6f89fea8acd28f5ef8fa5042146f1637afd4d834bc8f13439d8fd1e5aca0d65" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-command", "gix-config-value", "gix-path", @@ -3068,17 +3293,17 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc164145670e9130a60a21670d9b6f0f4f8de04e5dd256c51fa5a0340c625902" dependencies = [ - "bstr 1.6.0", - "itoa 1.0.6", + "bstr 1.8.0", + "itoa 1.0.9", "thiserror", - "time 0.3.22", + "time", ] [[package]] name = "gix-diff" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644a0f2768bc42d7a69289ada80c9e15c589caefc6a315d2307202df83ed1186" +checksum = "9029ad0083cc286a4bd2f5b3bf66bb66398abc26f2731a2824cd5edfc41a0e33" dependencies = [ "gix-hash", "gix-object", @@ -3088,11 +3313,11 @@ dependencies = [ [[package]] name = "gix-discover" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a6b61363e63e7cdaa3e6f96acb0257ebdb3d8883e21eba5930c99f07f0a5fc0" +checksum = "aba9c6c0d1f2b2efe65581de73de4305004612d49c83773e783202a7ef204f46" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "dunce", "gix-hash", "gix-path", @@ -3103,9 +3328,9 @@ dependencies = [ [[package]] name = "gix-features" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf69b0f5c701cc3ae22d3204b671907668f6437ca88862d355eaf9bc47a4f897" +checksum = "3a8c493409bf6060d408eec9bbdd1b12ea351266b50012e2a522f75dfc7b8314" dependencies = [ "bytes", "crc32fast", @@ -3123,21 +3348,21 @@ dependencies = [ [[package]] name = "gix-fs" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b37a1832f691fdc09910bd267f9a2e413737c1f9ec68c6e31f9e802616278a9" +checksum = "30da8997008adb87f94e15beb7ee229f8a48e97af585a584bfee4a5a1880aab5" dependencies = [ "gix-features", ] [[package]] name = "gix-glob" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07c98204529ac3f24b34754540a852593d2a4c7349008df389240266627a72a" +checksum = "cd0ade1e80ab1f079703d1824e1daf73009096386aa7fd2f0477f6e4ac0a558e" dependencies = [ - "bitflags 2.3.3", - "bstr 1.6.0", + "bitflags 2.4.1", + "bstr 1.8.0", "gix-features", "gix-path", ] @@ -3159,17 +3384,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "385f4ce6ecf3692d313ca3aa9bd3b3d8490de53368d6d94bedff3af8b6d9c58d" dependencies = [ "gix-hash", - "hashbrown 0.14.0", + "hashbrown 0.14.3", "parking_lot", ] [[package]] name = "gix-ignore" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba205b6df563e2906768bb22834c82eb46c5fdfcd86ba2c347270bc8309a05b2" +checksum = "fc6f7f101a0ccce808dbf7008ba131dede94e20257e7bde7a44cbb2f8c775625" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-glob", "gix-path", "unicode-bom", @@ -3177,12 +3402,12 @@ dependencies = [ [[package]] name = "gix-index" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f39c1ccc8f1912cbbd5191efc28dbc5f0d0598042aa56bc09427b7c34efab3ba" +checksum = "616ba958fabfb11263fa042c35690d48a6c7be4e9277e2c7e24ff263b3fe7b82" dependencies = [ - "bitflags 2.3.3", - "bstr 1.6.0", + "bitflags 2.4.1", + "bstr 1.8.0", "btoi", "filetime", "gix-bitmap", @@ -3191,7 +3416,7 @@ dependencies = [ "gix-lock", "gix-object", "gix-traverse", - "itoa 1.0.6", + "itoa 1.0.9", "memmap2", "smallvec", "thiserror", @@ -3199,9 +3424,9 @@ dependencies = [ [[package]] name = "gix-lock" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c693d7f05730fa74a7c467150adc7cea393518410c65f0672f80226b8111555" +checksum = "3ec5d5e6f07316d3553aa7425e3ecd935ec29882556021fe1696297a448af8d2" dependencies = [ "gix-tempfile", "gix-utils", @@ -3210,29 +3435,44 @@ dependencies = [ [[package]] name = "gix-mailmap" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8856cec3bdc3610c06970d28b6cb20a0c6621621cf9a8ec48cbd23f2630f362" +checksum = "4653701922c920e009f1bc4309feaff14882ade017770788f9a150928da3fa6a" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-actor", "thiserror", ] +[[package]] +name = "gix-negotiate" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "945c3ef1e912e44a5f405fc9e924edf42000566a1b257ed52cb1293300f6f08c" +dependencies = [ + "bitflags 2.4.1", + "gix-commitgraph", + "gix-hash", + "gix-object", + "gix-revision", + "smallvec", + "thiserror", +] + [[package]] name = "gix-object" -version = "0.29.2" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d96bd620fd08accdd37f70b2183cfa0b001b4f1c6ade8b7f6e15cb3d9e261ce" +checksum = "8926c8f51c44dec3e709cb5dbc93deb9e8d4064c43c9efc54c158dcdfe8446c7" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "btoi", "gix-actor", "gix-features", "gix-hash", "gix-validate", "hex", - "itoa 1.0.6", + "itoa 1.0.9", "nom", "smallvec", "thiserror", @@ -3240,9 +3480,9 @@ dependencies = [ [[package]] name = "gix-odb" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2f324aa67672b6d0f2c0fa93f96eb6a7029d260e4c1df5dce3c015f5e5add" +checksum = "4b234d806278eeac2f907c8b5a105c4ba537230c1a9d9236d822bf0db291f8f3" dependencies = [ "arc-swap", "gix-features", @@ -3258,9 +3498,9 @@ dependencies = [ [[package]] name = "gix-pack" -version = "0.35.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164a515900a83257ae4aa80e741655bee7a2e39113fb535d7a5ac623b445ff20" +checksum = "7d2a14cb3156037eedb17d6cb7209b7180522b8949b21fd0fe3184c0a1d0af88" dependencies = [ "clru", "gix-chunk", @@ -3280,11 +3520,11 @@ dependencies = [ [[package]] name = "gix-packetline" -version = "0.16.5" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a374cb5eba089e3c123df4d996eb00da411bb90ec92cb35bffeeb2d22ee106a" +checksum = "8a8384b1e964151aff0d5632dd9b191059d07dff358b96bd940f1b452600d7ab" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "faster-hex", "thiserror", ] @@ -3295,7 +3535,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18609c8cbec8508ea97c64938c33cd305b75dfc04a78d0c3b78b8b3fd618a77c" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-trace", "home", "once_cell", @@ -3311,17 +3551,17 @@ dependencies = [ "gix-command", "gix-config-value", "parking_lot", - "rustix 0.38.8", + "rustix 0.38.25", "thiserror", ] [[package]] name = "gix-protocol" -version = "0.32.0" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877e49417f1730f4dbc2f7d9a2ab0f8b2f49ef08f97270691403ecde3d961e3a" +checksum = "92a17058b45c461f0847528c5fb6ee6e76115e026979eb2d2202f98ee94f6c24" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "btoi", "gix-credentials", "gix-features", @@ -3338,16 +3578,16 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "475c86a97dd0127ba4465fbb239abac9ea10e68301470c9791a6dd5351cdc905" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "btoi", "thiserror", ] [[package]] name = "gix-ref" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e03989e9d49954368e1b526578230fc7189d1634acdfbe79e9ba1de717e15d5" +checksum = "ebdd999256f4ce8a5eefa89999879c159c263f3493a951d62aa5ce42c0397e1c" dependencies = [ "gix-actor", "gix-features", @@ -3365,11 +3605,11 @@ dependencies = [ [[package]] name = "gix-refspec" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6ea733820df67e4cd7797deb12727905824d8f5b7c59d943c456d314475892" +checksum = "72bfd622abc86dd8ad1ec51b9eb77b4f1a766b94e3a1b87cf4a022c5b5570cf4" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-hash", "gix-revision", "gix-validate", @@ -3379,15 +3619,30 @@ dependencies = [ [[package]] name = "gix-revision" -version = "0.13.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810f35e9afeccca999d5d348b239f9c162353127d2e13ff3240e31b919e35476" +checksum = "5044f56cd7a487ce9b034cbe0252ae0b6b47ff56ca3dabd79bc30214d0932cd7" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-date", "gix-hash", "gix-hashtable", "gix-object", + "gix-revwalk", + "thiserror", +] + +[[package]] +name = "gix-revwalk" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2623ba8747914f151f5e12b65adac576ab459dbed5f50a36c7a3e9cbf2d3ca" +dependencies = [ + "gix-commitgraph", + "gix-hash", + "gix-hashtable", + "gix-object", + "smallvec", "thiserror", ] @@ -3397,7 +3652,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9615cbd6b456898aeb942cd75e5810c382fbfc48dbbff2fa23ebd2d33dcbe9c7" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "gix-path", "libc", "windows", @@ -3405,9 +3660,9 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "5.0.3" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71a0d32f34e71e86586124225caefd78dabc605d0486de580d717653addf182" +checksum = "b3785cb010e9dc5c446dfbf02bc1119fc17d3a48a27c029efcb3a3c32953eb10" dependencies = [ "gix-fs", "libc", @@ -3426,12 +3681,12 @@ checksum = "96b6d623a1152c3facb79067d6e2ecdae48130030cf27d6eb21109f13bd7b836" [[package]] name = "gix-transport" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f01c2bf7b989c679695ef635fc7d9e80072e08101be4b53193c8e8b649900102" +checksum = "64a39ffed9a9078ed700605e064b15d7c6ae50aa65e7faa36ca6919e8081df15" dependencies = [ - "base64 0.21.2", - "bstr 1.6.0", + "base64 0.21.5", + "bstr 1.8.0", "curl", "gix-command", "gix-credentials", @@ -3445,9 +3700,9 @@ dependencies = [ [[package]] name = "gix-traverse" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5be1e807f288c33bb005075111886cceb43ed8a167b3182a0f62c186e2a0dd1" +checksum = "b0842e984cb4bf26339dc559f3a1b8bf8cdb83547799b2b096822a59f87f33d9" dependencies = [ "gix-hash", "gix-hashtable", @@ -3457,11 +3712,11 @@ dependencies = [ [[package]] name = "gix-url" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc77f89054297cc81491e31f1bab4027e554b5ef742a44bd7035db9a0f78b76" +checksum = "f1663df25ac42047a2547618d2a6979a26f478073f6306997429235d2cd4c863" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "gix-features", "gix-path", "home", @@ -3475,7 +3730,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b85d89dc728613e26e0ed952a19583744e7f5240fcd4aa30d6c824ffd8b52f0f" dependencies = [ - "fastrand 2.0.0", + "fastrand 2.0.1", ] [[package]] @@ -3484,17 +3739,17 @@ version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba9b3737b2cef3dcd014633485f0034b0f1a931ee54aeb7d8f87f177f3c89040" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "thiserror", ] [[package]] name = "gix-worktree" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69eaff0ae973a9d37c40f02ae5ae50fa726c8fc2fd3ab79d0a19eb61975aafa" +checksum = "d388ad962e8854402734a7387af8790f6bdbc8d05349052dab16ca4a0def50f6" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "filetime", "gix-attributes", "gix-features", @@ -3517,15 +3772,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", - "bstr 1.6.0", - "fnv", + "bstr 1.8.0", "log", - "regex", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3721,7 +3976,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -3730,10 +3985,10 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8283e7331b8c93b9756e0cfdbcfb90312852f953c6faf9bf741e684cc3b6ad69" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "crc", "log", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -3749,18 +4004,19 @@ dependencies = [ [[package]] name = "guppy" -version = "0.17.1" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0831ad7ff3b6af88fdc493844f02f7ca0ccfe0852cdf19f8c80a0f6223d41fa3" +checksum = "f2e77d05e22e97b4d677c2f95ff6886e6edb498ef77b159affc64141db97d871" dependencies = [ + "ahash", "camino", - "cargo_metadata 0.17.0", + "cargo_metadata 0.18.1", "cfg-if 1.0.0", "debug-ignore", "fixedbitset", "guppy-workspace-hack", - "indexmap 1.9.3", - "itertools 0.11.0", + "indexmap 2.1.0", + "itertools 0.12.0", "nested", "once_cell", "pathdiff", @@ -3781,9 +4037,9 @@ checksum = "92620684d99f750bae383ecb3be3748142d6095760afd5cbcf2261e9a279d780" [[package]] name = "h2" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -3791,17 +4047,17 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] name = "hal-core" version = "0.1.0" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ "embedded-graphics-core 0.3.3", "mycelium-util 0.1.0 (git+https://github.com/hawkw/mycelium)", @@ -3811,7 +4067,7 @@ dependencies = [ [[package]] name = "hal-x86_64" version = "0.1.0" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ "acpi", "hal-core", @@ -3849,17 +4105,17 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +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", "flate2", "nom", @@ -3877,7 +4133,7 @@ dependencies = [ "hash32 0.2.1", "rustc_version", "serde", - "spin 0.9.8", + "spin", "stable_deref_trait", ] @@ -3898,9 +4154,9 @@ dependencies = [ [[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" @@ -3965,13 +4221,13 @@ 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", - "itoa 1.0.6", + "itoa 1.0.9", ] [[package]] @@ -4008,9 +4264,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" @@ -4043,20 +4299,20 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.6", + "itoa 1.0.9", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", - "tracing 0.1.37", + "tracing 0.1.40", "want", ] [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -4093,16 +4349,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -4122,20 +4378,19 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -4143,17 +4398,16 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +checksum = "747ad1b4ae841a78e8aba0d63adbfbeaea26b517b63705d47856b73015d27060" dependencies = [ + "crossbeam-deque", "globset", - "lazy_static", "log", "memchr", - "regex", + "regex-automata 0.4.3", "same-file", - "thread_local", "walkdir", "winapi-util", ] @@ -4221,23 +4475,25 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg 1.1.0", "hashbrown 0.12.3", + "serde", ] [[package]] name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", + "serde", ] [[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", @@ -4305,7 +4561,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.3", "libc", "windows-sys 0.48.0", ] @@ -4316,7 +4572,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.3", + "socket2 0.5.5", "widestring", "windows-sys 0.48.0", "winreg", @@ -4324,9 +4580,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-docker" @@ -4339,13 +4595,12 @@ dependencies = [ [[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 0.37.20", + "hermit-abi 0.3.3", + "rustix 0.38.25", "windows-sys 0.48.0", ] @@ -4376,9 +4631,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" dependencies = [ "either", ] @@ -4391,15 +4646,15 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] @@ -4415,18 +4670,18 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] [[package]] name = "just" -version = "1.14.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ad25fe62999a7972b8cfac6608e1a18ad9245c353e1e8b9e6c7c9fa0f6a4e4d" +checksum = "b4f04852a4e3a28f5ed14365dd5ff73d8a17f7a4834d91283e4b3c25d2529069" dependencies = [ "ansi_term", "atty", @@ -4441,18 +4696,20 @@ dependencies = [ "lexiclean", "libc", "log", + "num_cpus", "regex", + "semver", "serde", "serde_json", "sha2", "similar", "snafu", - "strum 0.24.1", + "strum 0.25.0", "target", "tempfile", "typed-arena", "unicode-width", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -4513,9 +4770,9 @@ checksum = "441225017b106b9f902e97947a6d31e44ebcf274b91bdbfb51e5c477fcd468e5" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libgit2-sys" @@ -4533,9 +4790,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libnghttp2-sys" @@ -4547,6 +4804,17 @@ dependencies = [ "libc", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "libssh2-sys" version = "0.3.0" @@ -4623,9 +4891,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "llvm-tools" @@ -4635,9 +4903,9 @@ checksum = "955be5d0ca0465caf127165acb47964f911e2bc26073e865deb8be7189302faf" [[package]] name = "local-ip-address" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "885efb07efcd6ae1c6af70be7565544121424fa9e5b1c3e4b58bbbf141a58cef" +checksum = "66357e687a569abca487dc399a9c9ac19beb3f13991ed49f00c144e02cbd42ab" dependencies = [ "libc", "neli", @@ -4647,9 +4915,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg 1.1.0", "scopeguard", @@ -4673,7 +4941,20 @@ dependencies = [ "cfg-if 1.0.0", "generator", "scoped-tls", - "tracing 0.1.37", + "tracing 0.1.40", + "tracing-subscriber", +] + +[[package]] +name = "loom" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e045d70ddfbc984eacfa964ded019534e8f6cbf36f6410aee0ed5cefa5a9175" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "tracing 0.1.40", "tracing-subscriber", ] @@ -4729,7 +5010,32 @@ dependencies = [ "mycelium-util 0.1.0 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", "pin-project", "portable-atomic", - "tracing 0.1.37", + "tracing 0.1.40", +] + +[[package]] +name = "maitake-sync" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68d76dcfa3b14b75b60ff187f5df11c10fa76f227741a42070f3d36215756f24" +dependencies = [ + "cordyceps 0.3.2 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", + "loom 0.7.1", + "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", + "pin-project", + "portable-atomic", +] + +[[package]] +name = "maitake-sync" +version = "0.1.0" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" +dependencies = [ + "cordyceps 0.3.2 (git+https://github.com/hawkw/mycelium)", + "loom 0.7.1", + "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium)", + "pin-project", + "portable-atomic", ] [[package]] @@ -4781,9 +5087,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "maybe-async" @@ -4844,20 +5150,20 @@ dependencies = [ "mnemos-alloc", "mnemos-config", "mnemos-std", - "postcard 1.0.6", + "postcard 1.0.8", "serde", "tokio", - "tracing 0.1.37", + "tracing 0.1.40", "tracing-modality", "tracing-subscriber", - "uuid 1.4.1", + "uuid 1.6.1", ] [[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 = "memmap2" @@ -4894,9 +5200,9 @@ checksum = "bc4010833aea396656c2f91ee704d51a6f1329ec2ab56ffd00bfd56f7481ea94" [[package]] name = "micromath" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39617bc909d64b068dcffd0e3e31679195b5576d0c83fadc52690268cc2b2b55" +checksum = "c3c8dda44ff03a2f238717214da50f65d5a53b45cd213a7370424ffdb6fae815" [[package]] name = "miette" @@ -4910,7 +5216,7 @@ dependencies = [ "miette-derive", "once_cell", "owo-colors", - "supports-color 2.0.0", + "supports-color 2.1.0", "supports-hyperlinks", "supports-unicode", "terminal_size 0.1.17", @@ -4927,7 +5233,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -5002,9 +5308,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", @@ -5014,17 +5320,18 @@ dependencies = [ [[package]] name = "miow" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ffbca2f655e33c08be35d87278e5b18b89550a37dbd598c20db92f6a471123" +checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] name = "mnemos" version = "0.1.0" dependencies = [ + "calliope", "cobs", "embedded-graphics 0.7.1", "embedded-hal-async", @@ -5039,17 +5346,17 @@ dependencies = [ "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", "mycelium-util 0.1.0 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", "portable-atomic", - "postcard 1.0.6", + "postcard 1.0.8", "profont", "ring-drawer", "serde", "sermux-proto", - "spitebuf", - "tracing 0.1.37", - "tracing-core 0.1.31", + "spitebuf 0.1.0", + "tracing 0.1.40", + "tracing-core 0.1.32", "tracing-serde-structured", "tracing-subscriber", - "uuid 1.4.1", + "uuid 1.6.1", "vergen", ] @@ -5058,7 +5365,7 @@ name = "mnemos-abi" version = "0.1.0" dependencies = [ "defmt", - "postcard 1.0.6", + "postcard 1.0.8", "serde", ] @@ -5081,8 +5388,8 @@ dependencies = [ "futures", "mnemos", "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", - "tracing 0.1.37", - "uuid 1.4.1", + "tracing 0.1.40", + "uuid 1.6.1", ] [[package]] @@ -5093,15 +5400,24 @@ dependencies = [ "proptest", ] +[[package]] +name = "mnemos-bitslab" +version = "0.1.0" +source = "git+https://github.com/tosc-rs/mnemos?branch=eliza/bitslab-loom#8cfca666d1f3db5a5272746f5a15b472917cb2c4" +dependencies = [ + "loom 0.7.1", + "portable-atomic", +] + [[package]] name = "mnemos-config" version = "0.1.0" dependencies = [ "miette", "mnemos", - "postcard 1.0.6", + "postcard 1.0.8", "serde", - "toml 0.7.6", + "toml 0.7.8", ] [[package]] @@ -5119,7 +5435,7 @@ dependencies = [ "riscv", "riscv-rt", "serde", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -5131,14 +5447,14 @@ dependencies = [ "embedded-graphics 0.7.1", "futures", "mnemos", - "mnemos-bitslab", + "mnemos-bitslab 0.1.0", "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", "proptest", "proptest-derive", "riscv", "riscv-rt", "serde", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -5154,7 +5470,7 @@ dependencies = [ "mnemos", "portable-atomic", "riscv", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -5167,7 +5483,7 @@ dependencies = [ "maitake", "mnemos-abi", "mnemos-alloc", - "postcard 1.0.6", + "postcard 1.0.8", ] [[package]] @@ -5175,7 +5491,7 @@ name = "mnemos-trace-proto" version = "0.1.0" dependencies = [ "serde", - "tracing-core 0.1.31", + "tracing-core 0.1.32", "tracing-serde-structured", ] @@ -5185,7 +5501,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bootloader", - "clap 4.4.0", + "clap 4.4.10", "mnemos-x86_64-core", "ovmf-prebuilt", ] @@ -5204,7 +5520,7 @@ dependencies = [ "mycelium-alloc", "mycelium-util 0.1.0 (git+https://github.com/hawkw/mycelium)", "profont", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -5224,19 +5540,20 @@ dependencies = [ [[package]] name = "mukti-metadata" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eff38cdb6843983df19a14b015249acdbcf18516a0fee429631948165687644" +checksum = "37641d3aa0d362dbcee34569471914be1b9acaa6b0b05d833a64854e0444bc6d" dependencies = [ "semver", "serde", + "serde_json", "thiserror", ] [[package]] name = "mycelium-alloc" version = "0.1.0" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ "hal-core", "mycelium-util 0.1.0 (git+https://github.com/hawkw/mycelium)", @@ -5251,12 +5568,12 @@ source = "git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a1 [[package]] name = "mycelium-bitfield" version = "0.1.3" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" [[package]] name = "mycelium-trace" version = "0.1.0" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ "embedded-graphics 0.7.1", "hal-core", @@ -5271,7 +5588,7 @@ version = "0.1.0" source = "git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064#101a4abaa19afdd131b334a16d92c9fb4909c064" dependencies = [ "cordyceps 0.3.2 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", - "loom", + "loom 0.5.6", "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", "tracing 0.2.0", ] @@ -5279,10 +5596,11 @@ dependencies = [ [[package]] name = "mycelium-util" version = "0.1.0" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ "cordyceps 0.3.2 (git+https://github.com/hawkw/mycelium)", - "loom", + "loom 0.7.1", + "maitake-sync 0.1.0 (git+https://github.com/hawkw/mycelium)", "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium)", "tracing 0.2.0", ] @@ -5290,9 +5608,9 @@ dependencies = [ [[package]] name = "mycotest" version = "0.1.0" -source = "git+https://github.com/hawkw/mycelium#1f125194902cd4970b72eab0aa1d85d1b6ec1489" +source = "git+https://github.com/hawkw/mycelium#54871d4bffa7ba5b824c17db67685c186bc6c8e0" dependencies = [ - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -5367,9 +5685,9 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nextest-filtering" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61296f30435d58799488afa8e9723c9cdc9cc8de70e8fef2173dbca26f74cf66" +checksum = "72eadf204bd11c2df992520e3df951cf13a89861254428d5f30e2736155ff0fe" dependencies = [ "guppy", "miette", @@ -5379,15 +5697,15 @@ dependencies = [ "nom_locate", "recursion", "regex", - "regex-syntax 0.7.5", + "regex-syntax 0.8.2", "thiserror", ] [[package]] name = "nextest-metadata" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af196cd6b31ad643163a736f16962aff3fbdb2f05e6d044925a658801fd83066" +checksum = "fc62bebf1847def97628d41f4644b56ed8eb02e65bde1068ace7babfa5a70148" dependencies = [ "camino", "nextest-workspace-hack", @@ -5399,9 +5717,9 @@ dependencies = [ [[package]] name = "nextest-runner" -version = "0.45.0" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0318cc1de8b03526f3613ff62cf6b6a985f5f1e4b7f0a30c01570b93e16a373" +checksum = "5ec01de287f013e09975d27d0bac3a5b33bbde5cca29050c64e9e648696c9035" dependencies = [ "aho-corasick", "async-scoped", @@ -5409,11 +5727,12 @@ dependencies = [ "bytes", "camino", "camino-tempfile", - "cargo_metadata 0.17.0", + "cargo_metadata 0.18.1", "cfg-if 1.0.0", "chrono", "config", "debug-ignore", + "display-error-chain", "dunce", "either", "future-queue", @@ -5423,10 +5742,10 @@ dependencies = [ "http", "humantime-serde", "indent_write", - "indexmap 2.0.0", + "indexmap 2.1.0", "indicatif", "is_ci", - "itertools 0.11.0", + "itertools 0.12.0", "libc", "log", "miette", @@ -5434,7 +5753,7 @@ dependencies = [ "nextest-filtering", "nextest-metadata", "nextest-workspace-hack", - "nix 0.26.2", + "nix 0.27.1", "once_cell", "owo-colors", "pin-project-lite", @@ -5450,21 +5769,22 @@ dependencies = [ "shell-words", "smallvec", "smol_str", - "strip-ansi-escapes", + "strip-ansi-escapes 0.2.0", "tar", "target-spec", "target-spec-miette", "thiserror", "tokio", - "toml 0.7.6", - "toml_edit", + "toml 0.8.8", + "toml_edit 0.21.0", "twox-hash", "unicode-ident", "unicode-normalization", - "uuid 1.4.1", + "uuid 1.6.1", "win32job", + "winapi", "windows", - "zstd 0.12.4", + "zstd 0.13.0", ] [[package]] @@ -5501,14 +5821,24 @@ dependencies = [ [[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 1.3.2", "cfg-if 1.0.0", "libc", - "static_assertions", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if 1.0.0", + "libc", ] [[package]] @@ -5574,7 +5904,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "crossbeam-channel", "filetime", "fsevent-sys", @@ -5656,9 +5986,9 @@ dependencies = [ [[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 1.1.0", "libm", @@ -5670,7 +6000,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.3", "libc", ] @@ -5691,9 +6021,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "flate2", "memchr", @@ -5708,9 +6038,9 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "open" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfabf1927dce4d6fdf563d63328a0a506101ced3ec780ca2135747336c98cef8" +checksum = "90878fb664448b54c4e592455ad02831e23a3f7e157374a8b95654731aac7349" dependencies = [ "is-wsl", "libc", @@ -5723,17 +6053,17 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "293c15678e37254c15bd2f092314abb4e51d7fdde05c2021279c12631b54f005" dependencies = [ - "bstr 1.6.0", + "bstr 1.8.0", "winapi", ] [[package]] name = "openssl" -version = "0.10.55" +version = "0.10.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if 1.0.0", "foreign-types", "libc", @@ -5750,7 +6080,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -5761,18 +6091,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.27.0+1.1.1v" +version = "300.1.6+3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e8f197c82d7511c5b014030c9b1efeda40d7d5f99d23b4ceed3524a5e63f02" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.90" +version = "0.9.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" dependencies = [ "cc", "libc", @@ -5789,18 +6119,18 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" -version = "2.10.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" dependencies = [ "num-traits", ] [[package]] name = "orion" -version = "0.17.5" +version = "0.17.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11468cc6afd61a126fe3f91cc4cc8a0dbe7917d0a4b5e8357ba91cc47444462" +checksum = "7abdb10181903c8c4b016ba45d6d6d5af1a1e2a461aa4763a83b87f5df4695e5" dependencies = [ "fiat-crypto", "subtle", @@ -5830,9 +6160,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.5.1" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" [[package]] name = "overload" @@ -5869,9 +6199,9 @@ dependencies = [ [[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" @@ -5885,15 +6215,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] @@ -5913,7 +6243,7 @@ checksum = "ba765699a309908d55950919a3445e9491453e89b2587b1b2abe4143a48894c0" dependencies = [ "ct-codecs", "ed25519-compact", - "getrandom 0.2.10", + "getrandom 0.2.11", "orion", "p384", "rand_core 0.6.4", @@ -5922,7 +6252,7 @@ dependencies = [ "serde_json", "sha2", "subtle", - "time 0.3.22", + "time", "zeroize", ] @@ -5975,9 +6305,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" @@ -5986,7 +6316,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.0", + "indexmap 2.1.0", ] [[package]] @@ -6064,22 +6394,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -6106,8 +6436,19 @@ dependencies = [ ] [[package]] -name = "pkcs8" -version = "0.10.2" +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 = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ @@ -6121,6 +6462,12 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "platforms" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" + [[package]] name = "png" version = "0.16.8" @@ -6149,6 +6496,20 @@ 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.25", + "tracing 0.1.40", + "windows-sys 0.52.0", +] + [[package]] name = "pomelo" version = "0.1.0" @@ -6167,13 +6528,13 @@ dependencies = [ "maitake", "mnemos", "mnemos-alloc", - "postcard 1.0.6", + "postcard 1.0.8", "serde", "sermux-proto", - "tracing 0.1.37", + "tracing 0.1.40", "tracing-subscriber", "tracing-wasm", - "uuid 1.4.1", + "uuid 1.6.1", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -6181,9 +6542,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.4.2" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f32154ba0af3a075eefa1eda8bb414ee928f62303a54ea85b8d6638ff1a6ee9e" +checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b" dependencies = [ "critical-section", ] @@ -6201,12 +6562,13 @@ dependencies = [ [[package]] name = "postcard" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9ee729232311d3cd113749948b689627618133b1c5012b77342c1950b25eaeb" +checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" dependencies = [ "cobs", "const_format", + "embedded-io 0.4.0", "heapless", "postcard-derive", "serde", @@ -6229,6 +6591,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -6243,9 +6611,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "primeorder" -version = "0.13.2" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ "elliptic-curve", ] @@ -6257,7 +6625,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] @@ -6292,18 +6660,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] [[package]] name = "prodash" -version = "23.1.2" +version = "25.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9516b775656bc3e8985e19cd4b8c0c0de045095074e453d2c0a513b5f978392d" +checksum = "1d67eb4220992a4a052a4bb03cf776e493ecb1a3a36bab551804153d63486af7" dependencies = [ "parking_lot", ] @@ -6319,19 +6687,19 @@ dependencies = [ [[package]] name = "proptest" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e35c06b98bf36aba164cc17cb25f7e232f5c4aeea73baa14b8a9f0d92dbfa65" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", - "bitflags 1.3.2", - "byteorder", + "bit-vec", + "bitflags 2.4.1", "lazy_static", "num-traits", "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift 0.3.0", - "regex-syntax 0.6.29", + "regex-syntax 0.8.2", "rusty-fork", "tempfile", "unarray", @@ -6380,6 +6748,17 @@ dependencies = [ "prost", ] +[[package]] +name = "pulldown-cmark" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" +dependencies = [ + "bitflags 1.3.2", + "memchr", + "unicase", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -6388,16 +6767,17 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-junit" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf780b59d590c25f8c59b44c124166a2a93587868b619fb8f5b47fb15e9ed6d" +checksum = "1b9599bffc2cd7511355996e0cfd979266b2cfa3f3ff5247d07a3a6e1ded6158" dependencies = [ "chrono", - "indexmap 2.0.0", + "indexmap 2.1.0", "nextest-workspace-hack", - "quick-xml 0.29.0", + "quick-xml 0.31.0", + "strip-ansi-escapes 0.2.0", "thiserror", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -6411,18 +6791,18 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -6543,7 +6923,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", ] [[package]] @@ -6655,9 +7035,9 @@ dependencies = [ [[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", @@ -6665,14 +7045,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]] @@ -6686,52 +7064,49 @@ dependencies = [ [[package]] name = "recursion" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90cacf5ac2a9a00425506c7adf1d06ccab8a8fc7117cd2c0c6517ca6ac86d60c" -dependencies = [ - "futures", -] +checksum = "f53e857b2b1b92a9265c645b3d5aa76d8435f81d06af5ca08f9027b1225351c2" [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "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 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.10", - "redox_syscall 0.2.16", + "getrandom 0.2.11", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.9.4" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.7", - "regex-syntax 0.7.5", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -6745,13 +7120,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.7" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.5", + "regex-syntax 0.8.2", ] [[package]] @@ -6762,9 +7137,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "remove_dir_all" @@ -6784,11 +7159,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.20" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "bytes", "encoding_rs", "futures-core", @@ -6812,6 +7187,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tokio-rustls", @@ -6823,7 +7199,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.25.2", + "webpki-roots", "winreg", ] @@ -6849,17 +7225,16 @@ dependencies = [ [[package]] name = "ring" -version = "0.16.20" +version = "0.17.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866" dependencies = [ "cc", + "getrandom 0.2.11", "libc", - "once_cell", - "spin 0.5.2", + "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -6885,9 +7260,9 @@ dependencies = [ [[package]] name = "riscv-atomic-emulation-trap" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da39f4a5642a62e8e16bb438c37e6f90ea388ca0b7960fe875ea39887155d6ba" +checksum = "7979127070e70f34c0ad6cc5a3a13f09af8dab1e9e154c396eb818f478504143" [[package]] name = "riscv-rt" @@ -6922,11 +7297,23 @@ dependencies = [ "regex", ] +[[package]] +name = "ron" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" +dependencies = [ + "base64 0.13.1", + "bitflags 1.3.2", + "indexmap 1.9.3", + "serde", +] + [[package]] name = "rsdp" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d3add2fc55ef37511bcf81a08ee7a09eff07b23aae38b06a29024a38c604b1" +checksum = "1ed5f33bb98eace335c13cdd159fbfc73ce203b597981a76832dfbb9cbd8101b" dependencies = [ "log", ] @@ -6969,9 +7356,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.20" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", @@ -6983,53 +7370,43 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.8" +version = "0.38.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" +checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.5", + "linux-raw-sys 0.4.11", "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.21.6" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", "ring", - "rustls-webpki 0.101.4", + "rustls-webpki", "sct", ] [[package]] name = "rustls-pemfile" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" -dependencies = [ - "base64 0.21.2", -] - -[[package]] -name = "rustls-webpki" -version = "0.100.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "ring", - "untrusted", + "base64 0.21.5", ] [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", @@ -7037,9 +7414,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "rusty-fork" @@ -7055,12 +7432,12 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" dependencies = [ "byteorder", - "thiserror", + "thiserror-core", "twox-hash", ] @@ -7102,15 +7479,15 @@ checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -7203,11 +7580,22 @@ dependencies = [ "thin-slice", ] +[[package]] +name = "self-replace" +version = "1.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525db198616b2bcd0f245daf7bfd8130222f7ee6af9ff9984c19a61bf1160c55" +dependencies = [ + "fastrand 1.9.0", + "tempfile", + "windows-sys 0.48.0", +] + [[package]] name = "self_update" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a667e18055120bcc9a658d55d36f2f6bfc82e07968cc479ee7774e3bfb501e14" +checksum = "1a34ad8e4a86884ab42e9b8690e9343abdcfe5fa38a0318cfe1565ba9ad437b4" dependencies = [ "either", "flate2", @@ -7217,27 +7605,29 @@ dependencies = [ "quick-xml 0.23.1", "regex", "reqwest", + "self-replace", "semver", "serde_json", "tar", "tempfile", "urlencoding", + "zipsign-api", ] [[package]] name = "semver" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.188" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] @@ -7274,13 +7664,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7294,11 +7684,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ - "itoa 1.0.6", + "indexmap 2.1.0", + "itoa 1.0.9", "ryu", "serde", ] @@ -7309,7 +7700,7 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" dependencies = [ - "itoa 1.0.6", + "itoa 1.0.9", "serde", ] @@ -7324,9 +7715,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -7338,7 +7729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.6", + "itoa 1.0.9", "ryu", "serde", ] @@ -7361,9 +7752,9 @@ dependencies = [ [[package]] name = "serialport" -version = "4.2.1" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353dc2cbfc67c9a14a89a1292a9d8e819bd51066b083e08c1974ba08e3f48c62" +checksum = "c32634e2bd4311420caa504404a55fad2131292c485c97014cbed89a5899885f" dependencies = [ "CoreFoundation-sys", "IOKit-sys", @@ -7371,7 +7762,7 @@ dependencies = [ "cfg-if 1.0.0", "libudev 0.3.0", "mach2", - "nix 0.26.2", + "nix 0.26.4", "regex", "scopeguard", "winapi", @@ -7397,9 +7788,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", @@ -7414,9 +7805,9 @@ checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" [[package]] name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -7425,9 +7816,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", ] @@ -7486,9 +7877,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", "rand_core 0.6.4", @@ -7496,9 +7887,9 @@ 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" dependencies = [ "bstr 0.2.17", "unicode-segmentation", @@ -7522,9 +7913,9 @@ dependencies = [ [[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 1.1.0", ] @@ -7537,15 +7928,15 @@ checksum = "399892aa22101014dcebb84944dc950f6d02695e91ea5f7e11baf02998fc59e2" [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "smawk" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "smol_str" @@ -7580,9 +7971,9 @@ dependencies = [ [[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", @@ -7590,20 +7981,14 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -7620,11 +8005,19 @@ dependencies = [ "maitake", ] +[[package]] +name = "spitebuf" +version = "0.1.0" +source = "git+https://github.com/tosc-rs/mnemos?rev=416b7d59fbc7fa889a774f54133786a584eb8732#416b7d59fbc7fa889a774f54133786a584eb8732" +dependencies = [ + "maitake", +] + [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", @@ -7674,7 +8067,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8" dependencies = [ - "vte", + "vte 0.10.1", +] + +[[package]] +name = "strip-ansi-escapes" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa" +dependencies = [ + "vte 0.11.1", ] [[package]] @@ -7704,7 +8106,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ - "strum_macros 0.25.2", + "strum_macros 0.25.3", ] [[package]] @@ -7722,15 +8124,15 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7751,9 +8153,9 @@ dependencies = [ [[package]] name = "supports-color" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4950e7174bffabe99455511c39707310e7e9b440364a2fcb1cc21521be57b354" +checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89" dependencies = [ "is-terminal", "is_ci", @@ -7790,9 +8192,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.29" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", @@ -7817,6 +8219,27 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -7842,9 +8265,9 @@ checksum = "ba852e71502340e2eaf2fa51f9b3ec6aa25750da1aa65771491c69d67789b05c" [[package]] name = "target-lexicon" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" +checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "target-spec" @@ -7873,15 +8296,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ - "autocfg 1.1.0", "cfg-if 1.0.0", - "fastrand 1.9.0", - "redox_syscall 0.3.5", - "rustix 0.37.20", + "fastrand 2.0.1", + "redox_syscall 0.4.1", + "rustix 0.38.25", "windows-sys 0.48.0", ] @@ -7908,9 +8330,9 @@ dependencies = [ [[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", ] @@ -7927,11 +8349,11 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ - "rustix 0.37.20", + "rustix 0.38.25", "windows-sys 0.48.0", ] @@ -7970,22 +8392,42 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "thiserror-impl" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -8011,24 +8453,15 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" -dependencies = [ - "itoa 1.0.6", + "deranged", + "itoa 1.0.9", "libc", "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -8036,15 +8469,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -8066,11 +8499,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ - "autocfg 1.1.0", "backtrace", "bytes", "libc", @@ -8079,9 +8511,9 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.4.9", + "socket2 0.5.5", "tokio-macros", - "tracing 0.1.37", + "tracing 0.1.40", "windows-sys 0.48.0", ] @@ -8097,13 +8529,13 @@ dependencies = [ [[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.29", + "syn 2.0.39", ] [[package]] @@ -8147,21 +8579,33 @@ dependencies = [ "futures-util", "log", "tokio", - "tungstenite", + "tungstenite 0.19.0", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.20.1", ] [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -8170,37 +8614,63 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ + "indexmap 1.9.3", "serde", ] [[package]] name = "toml" -version = "0.7.6" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.1.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -8215,7 +8685,7 @@ checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" dependencies = [ "async-trait", "axum", - "base64 0.21.2", + "base64 0.21.5", "bytes", "futures-core", "futures-util", @@ -8232,7 +8702,7 @@ dependencies = [ "tower", "tower-layer", "tower-service", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -8252,16 +8722,16 @@ dependencies = [ "tokio-util", "tower-layer", "tower-service", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] name = "tower-http" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.1", "bytes", "futures-core", "futures-util", @@ -8277,7 +8747,7 @@ dependencies = [ "tokio-util", "tower-layer", "tower-service", - "tracing 0.1.37", + "tracing 0.1.40", ] [[package]] @@ -8294,21 +8764,20 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[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", "log", "pin-project-lite", - "tracing-attributes 0.1.26", - "tracing-core 0.1.31", + "tracing-attributes 0.1.27", + "tracing-core 0.1.32", ] [[package]] name = "tracing" version = "0.2.0" -source = "git+https://github.com/tokio-rs/tracing#941b1591faeea55d62c1c8cf524ffa3e95b66887" +source = "git+https://github.com/tokio-rs/tracing#bac25085fcea68ca30b8e19b8981fbd689f53735" dependencies = [ "pin-project-lite", "tracing-attributes 0.2.0", @@ -8317,30 +8786,30 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "tracing-attributes" version = "0.2.0" -source = "git+https://github.com/tokio-rs/tracing#941b1591faeea55d62c1c8cf524ffa3e95b66887" +source = "git+https://github.com/tokio-rs/tracing#bac25085fcea68ca30b8e19b8981fbd689f53735" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -8349,17 +8818,17 @@ dependencies = [ [[package]] name = "tracing-core" version = "0.2.0" -source = "git+https://github.com/tokio-rs/tracing#941b1591faeea55d62c1c8cf524ffa3e95b66887" +source = "git+https://github.com/tokio-rs/tracing#bac25085fcea68ca30b8e19b8981fbd689f53735" [[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", - "tracing-core 0.1.31", + "once_cell", + "tracing-core 0.1.32", ] [[package]] @@ -8375,11 +8844,11 @@ dependencies = [ "serde_json", "thiserror", "tokio", - "tracing 0.1.37", - "tracing-core 0.1.31", + "tracing 0.1.40", + "tracing-core 0.1.32", "tracing-subscriber", "url", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -8390,14 +8859,14 @@ dependencies = [ "hash32 0.2.1", "heapless", "serde", - "tracing-core 0.1.31", + "tracing-core 0.1.32", ] [[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", @@ -8406,8 +8875,8 @@ dependencies = [ "sharded-slab", "smallvec", "thread_local", - "tracing 0.1.37", - "tracing-core 0.1.31", + "tracing 0.1.40", + "tracing-core 0.1.32", "tracing-log", ] @@ -8417,11 +8886,25 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" dependencies = [ - "tracing 0.1.37", + "tracing 0.1.40", "tracing-subscriber", "wasm-bindgen", ] +[[package]] +name = "tricky-pipe" +version = "0.1.0" +source = "git+https://github.com/tosc-rs/mgnp?branch=eliza/pub-reqresp#73fbb249aa420a92bd546a166b8167dc9807b604" +dependencies = [ + "futures", + "maitake-sync 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mnemos-bitslab 0.1.0 (git+https://github.com/tosc-rs/mnemos?branch=eliza/bitslab-loom)", + "mycelium-bitfield 0.1.3 (git+https://github.com/hawkw/mycelium.git?rev=101a4abaa19afdd131b334a16d92c9fb4909c064)", + "portable-atomic", + "postcard 1.0.8", + "serde", +] + [[package]] name = "trunk" version = "0.17.5" @@ -8434,7 +8917,7 @@ dependencies = [ "bytes", "cargo-lock", "cargo_metadata 0.15.4", - "clap 4.4.0", + "clap 4.4.10", "console", "directories", "dunce", @@ -8455,10 +8938,10 @@ dependencies = [ "tar", "tokio", "tokio-stream", - "tokio-tungstenite", - "toml 0.7.6", + "tokio-tungstenite 0.19.0", + "toml 0.7.8", "tower-http", - "tracing 0.1.37", + "tracing 0.1.40", "tracing-subscriber", "which", "zip", @@ -8466,9 +8949,9 @@ dependencies = [ [[package]] name = "trust-dns-proto" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" +checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" dependencies = [ "async-trait", "cfg-if 1.0.0", @@ -8477,35 +8960,36 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 0.2.3", + "idna 0.4.0", "ipnet", - "lazy_static", + "once_cell", "rand 0.8.5", "smallvec", "thiserror", "tinyvec", "tokio", - "tracing 0.1.37", + "tracing 0.1.40", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" +checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" dependencies = [ "cfg-if 1.0.0", "futures-util", "ipconfig", - "lazy_static", "lru-cache", + "once_cell", "parking_lot", + "rand 0.8.5", "resolv-conf", "smallvec", "thiserror", "tokio", - "tracing 0.1.37", + "tracing 0.1.40", "trust-dns-proto", ] @@ -8534,13 +9018,32 @@ dependencies = [ "utf-8", ] +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "sha1", + "thiserror", + "url", + "utf-8", +] + [[package]] name = "twox-hash" version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "static_assertions", ] @@ -8552,9 +9055,9 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[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 = "unarray" @@ -8579,15 +9082,15 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-bom" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98e90c70c9f0d4d1ee6d0a7d04aa06cb9bbd53d8cfbdd62a0269a7c2eb640552" +checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-linebreak" @@ -8612,9 +9115,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[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" @@ -8624,9 +9127,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "update-informer" @@ -8644,30 +9147,30 @@ dependencies = [ [[package]] name = "ureq" -version = "2.7.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "flate2", "log", "once_cell", "rustls", - "rustls-webpki 0.100.2", + "rustls-webpki", "serde", "serde_json", "url", - "webpki-roots 0.23.1", + "webpki-roots", ] [[package]] name = "url" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna 0.4.0", + "idna 0.5.0", "percent-encoding", ] @@ -8695,16 +9198,16 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", ] [[package]] name = "uuid" -version = "1.4.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "serde", ] @@ -8716,9 +9219,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3" +checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe" [[package]] name = "vcell" @@ -8740,14 +9243,14 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "vergen" -version = "8.2.1" +version = "8.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b3c89c2c7e50f33e4d35527e5bf9c11d6d132226dbbd1753f0fbe9f19ef88c6" +checksum = "1290fd64cc4e7d3c9b07d7f333ce0ce0007253e32870e632624835cc80b83939" dependencies = [ "anyhow", "rustc_version", "rustversion", - "time 0.3.22", + "time", ] [[package]] @@ -8779,6 +9282,16 @@ dependencies = [ "vte_generate_state_changes", ] +[[package]] +name = "vte" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" +dependencies = [ + "utf8parse", + "vte_generate_state_changes", +] + [[package]] name = "vte_generate_state_changes" version = "0.1.1" @@ -8800,15 +9313,15 @@ dependencies = [ [[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", @@ -8829,12 +9342,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -8843,9 +9350,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -8853,24 +9360,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -8880,9 +9387,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8890,22 +9397,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.29", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wasm-streams" @@ -8922,9 +9429,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -8932,18 +9439,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" -dependencies = [ - "rustls-webpki 0.100.2", -] - -[[package]] -name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "weezl" @@ -8953,13 +9451,14 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" [[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.25", ] [[package]] @@ -8996,9 +9495,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", ] @@ -9015,7 +9514,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", ] [[package]] @@ -9048,7 +9556,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -9068,17 +9585,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]] @@ -9089,9 +9621,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" @@ -9101,9 +9639,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" @@ -9113,9 +9657,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 = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -9125,9 +9675,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 = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -9137,9 +9693,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 = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -9149,9 +9711,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" @@ -9161,15 +9729,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.5.2" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd122eb777186e60c3fdf765a58ac76e41c582f1f535fbf3314434c6b58f3f7" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -9204,9 +9778,9 @@ dependencies = [ [[package]] name = "xmas-elf" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f820cc767d65b32eef9d7ce7201448f28501c59edc55d47b71375fea579fc2df" +checksum = "42c49817e78342f7f30a181573d82ff55b88a35f86ccaf07fc64b3008f56d1c6" dependencies = [ "zero", ] @@ -9217,11 +9791,31 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fe21bcc34ca7fe6dd56cc2cb1261ea59d6b93620215aefb5ea6032265527784" +[[package]] +name = "zerocopy" +version = "0.7.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" [[package]] name = "zip" @@ -9239,10 +9833,21 @@ dependencies = [ "hmac", "pbkdf2", "sha1", - "time 0.3.22", + "time", "zstd 0.11.2+zstd.1.5.2", ] +[[package]] +name = "zipsign-api" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba5aa1827d6b1a35a29b3413ec69ce5f796e4d897e3e5b38f461bef41d225ea" +dependencies = [ + "base64 0.21.5", + "ed25519-dalek", + "thiserror", +] + [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" @@ -9254,11 +9859,11 @@ dependencies = [ [[package]] name = "zstd" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" dependencies = [ - "zstd-safe 6.0.6", + "zstd-safe 7.0.0", ] [[package]] @@ -9273,21 +9878,19 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "6.0.6" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" dependencies = [ - "libc", "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] diff --git a/flake.lock b/flake.lock index a24bfd75..b42ece59 100644 --- a/flake.lock +++ b/flake.lock @@ -27,11 +27,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1692799911, - "narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=", + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", - "rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "type": "github" }, "original": { @@ -60,11 +60,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1692734709, - "narHash": "sha256-SCFnyHCyYjwEmgUsHDDuU0TsbVMKeU1vwkR+r7uS2Rg=", + "lastModified": 1701068326, + "narHash": "sha256-vmMceA+q6hG1yrjb+MP8T0YFDQIrW3bl45e7z24IEts=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b85ed9dcbf187b909ef7964774f8847d554fab3b", + "rev": "8cfef6986adfb599ba379ae53c9f5631ecd2fd9c", "type": "github" }, "original": { @@ -132,11 +132,11 @@ ] }, "locked": { - "lastModified": 1693015707, - "narHash": "sha256-SFr93DYn502sVT9nB5U8/cKg1INyEk/jCeq8tHioz7Y=", + "lastModified": 1701224160, + "narHash": "sha256-qnMmxNMKmd6Soel0cfauyMJ+LzuZbvmiDQPSIuTbQ+M=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e90223633068a44f0fb62374e0fa360ccc987292", + "rev": "4a080e26d55eaedb95ab1bf8eeaeb84149c10f12", "type": "github" }, "original": { diff --git a/platforms/allwinner-d1/d1-core/src/drivers/spim.rs b/platforms/allwinner-d1/d1-core/src/drivers/spim.rs index 1bb6f8eb..4fc809a0 100644 --- a/platforms/allwinner-d1/d1-core/src/drivers/spim.rs +++ b/platforms/allwinner-d1/d1-core/src/drivers/spim.rs @@ -15,7 +15,7 @@ use kernel::{ comms::oneshot::Reusable, maitake::sync::WaitCell, mnemos_alloc::containers::FixedVec, - registry::{self, uuid, Envelope, KernelHandle, Message, RegisteredDriver, ReplyTo, Uuid}, + registry::{self, uuid, Envelope, KernelHandle, Message, ReplyTo, Service, Uuid}, Kernel, }; @@ -89,7 +89,7 @@ pub unsafe fn kernel_spim1(mut spi1: SPI_DBI, ccu: &mut Ccu, gpio: &mut GPIO) -> Spim1 { _x: () } } -impl RegisteredDriver for SpiSender { +impl Service for SpiSender { type Request = SpiSenderRequest; type Response = SpiSenderResponse; type Error = SpiSenderError; diff --git a/platforms/beepy/src/i2c_puppet.rs b/platforms/beepy/src/i2c_puppet.rs index 7ac87ac0..28201e96 100644 --- a/platforms/beepy/src/i2c_puppet.rs +++ b/platforms/beepy/src/i2c_puppet.rs @@ -12,7 +12,7 @@ use kernel::{ embedded_hal_async::i2c::{self, I2c}, maitake::sync::WaitCell, mnemos_alloc::containers::FixedVec, - registry::{self, Envelope, KernelHandle, RegisteredDriver}, + registry::{self, Envelope, KernelHandle, Service}, retry::{AlwaysRetry, ExpBackoff, Retry, WithMaxRetries}, services::{ i2c::{I2cClient, I2cError, I2cService}, @@ -31,7 +31,7 @@ use uuid::{uuid, Uuid}; //////////////////////////////////////////////////////////////////////////////// pub struct I2cPuppetService; -impl RegisteredDriver for I2cPuppetService { +impl Service for I2cPuppetService { type Request = Request; type Response = Response; type Error = Error; diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 74ee909f..5f5ffa77 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2023-08-08" +channel = "nightly-2023-10-28" profile = "minimal" components = [ "clippy", diff --git a/source/alloc/src/containers.rs b/source/alloc/src/containers.rs index 95bf599b..e31cb391 100644 --- a/source/alloc/src/containers.rs +++ b/source/alloc/src/containers.rs @@ -82,6 +82,12 @@ impl Arc { pub unsafe fn increment_strong_count(ptr: *const T) { alloc::sync::Arc::increment_strong_count(ptr) } + + #[inline(always)] + #[must_use] + pub fn into_inner(self) -> alloc::sync::Arc { + self.inner + } } impl Clone for Arc { diff --git a/source/kernel/Cargo.toml b/source/kernel/Cargo.toml index 239b9881..139c908d 100644 --- a/source/kernel/Cargo.toml +++ b/source/kernel/Cargo.toml @@ -35,6 +35,11 @@ serial-trace = ["mnemos-trace-proto", "tracing-core", "tracing-serde-structured" [dependencies] +[dependencies.calliope] +git = "https://github.com/tosc-rs/mgnp" +branch = "eliza/pub-reqresp" +features = ["alloc"] + [dependencies.futures] version = "0.3.21" features = ["async-await"] diff --git a/source/kernel/src/comms/mod.rs b/source/kernel/src/comms/mod.rs index e38cfe84..a6d67293 100644 --- a/source/kernel/src/comms/mod.rs +++ b/source/kernel/src/comms/mod.rs @@ -3,3 +3,4 @@ pub mod bbq; pub mod kchannel; pub mod oneshot; +pub use calliope::tricky_pipe::{bidi, mpsc}; diff --git a/source/kernel/src/registry/listener.rs b/source/kernel/src/registry/listener.rs index 0db220e6..66c75818 100644 --- a/source/kernel/src/registry/listener.rs +++ b/source/kernel/src/registry/listener.rs @@ -1,17 +1,17 @@ //! A [`Listener`] is used by a [`RegisteredDriver`] to [accept incoming //! connections](Handshake) from clients. #![warn(missing_docs)] -use super::{Message, RegisteredDriver}; -use crate::comms::{ - kchannel::{KChannel, KConsumer, KProducer}, - oneshot, +use super::Service; +use calliope::{ + req_rsp::{Request, Response}, + tricky_pipe::{bidi::BiDi, mpsc, oneshot}, }; use futures::{select_biased, FutureExt}; /// A listener for incoming connection [`Handshake`]s to a [`RegisteredDriver`]. #[must_use = "a `Listener` does nothing if incoming connections are not accepted"] -pub struct Listener { - rx: KConsumer>, +pub struct Listener { + rx: mpsc::Receiver>, } /// A registration for a [`RegisteredDriver`]. This type is provided to @@ -19,8 +19,8 @@ pub struct Listener { /// /// [`Registry::register`]: crate::registry::Registry::register #[must_use = "a `Registration` does nothing if not registered with a `Registry`"] -pub struct Registration { - pub(super) tx: KProducer>, +pub struct Registration { + pub(super) tx: mpsc::Sender>, } /// A connection request received from a [`Listener`]. @@ -33,10 +33,10 @@ pub struct Registration { /// [`Hello`]: RegisteredDriver::Hello #[must_use = "a `Handshake` does nothing if not `accept`ed or `reject`ed"] #[non_exhaustive] -pub struct Handshake { +pub struct Handshake { /// The [`RegisteredDriver::Hello`] message sent by the client to identify /// the requested incoming connection. - pub hello: D::Hello, + pub hello: S::Hello, /// [Accepts](Accept::accept) or [rejects](Accept::reject) the handshake. /// @@ -45,49 +45,49 @@ pub struct Handshake { /// on a separate type, so that the [`Hello` message](#structfield.hello) /// can be moved out of the `Handshake` value while still allowing the /// connection to be accepted. - pub accept: Accept, + pub accept: Accept, // TODO(eliza): consider adding client metadata here? } /// Accepts or rejects an incoming connection [`Handshake`]. #[must_use = "an `Accept` does nothing if not `accept`ed or `reject`ed"] -pub struct Accept { - pub(super) reply: oneshot::Sender, D::ConnectError>>, +pub struct Accept { + pub(super) reply: oneshot::Sender>, } -/// A stream of incoming requests from all clients. -/// -/// This type is used when a service wishes all clients to send requests to the -/// same channel. It automatically accepts all incoming connections with the -/// same request channel, and returns any received requests to the service. -/// -/// A [`Listener`] can be converted into a [`RequestStream`] using the -/// [`Listener::into_request_stream`] method. -/// -/// Any [`Hello`] messages received from new connections are discarded by the -/// [`RequestStream`], and connections are never [`reject`]ed with a -/// [`ConnectError`]. -/// -/// Note, however, that this type does *not* require that the -/// [`RegisteredDriver`] type's [`RegisteredDriver::Hello`] type is [`()`], or -/// that its [`RegisteredDriver::ConnectError`] type is -/// [`core::convert::Infallible`]. This is because a [`RegisteredDriver`] -/// *declaration* which includes a [`Hello`] and/or [`ConnectError`] type may be -/// implemented by a server that does not care about [`Hello`]s or about -/// [`reject`]ing connections on some platforms. Other platforms may -/// implement the same [`RegisteredDriver`] declaration with a service that does -/// consume [`Hello`]s or [`reject`] connections, but `RequestStream` is still -/// usable with that `RegisteredDriver` in cases where the implementation does -/// not need those features. -/// -/// [`reject`]: Handshake::reject -/// [`Hello`]: RegisteredDriver::Hello -/// [`ConnectError`]: RegisteredDriver::ConnectError -#[must_use = "a `RequestStream` does nothing if `next_request` is not called"] -pub struct RequestStream { - chan: KConsumer>, - listener: Listener, -} +// /// A stream of incoming requests from all clients. +// /// +// /// This type is used when a service wishes all clients to send requests to the +// /// same channel. It automatically accepts all incoming connections with the +// /// same request channel, and returns any received requests to the service. +// /// +// /// A [`Listener`] can be converted into a [`RequestStream`] using the +// /// [`Listener::into_request_stream`] method. +// /// +// /// Any [`Hello`] messages received from new connections are discarded by the +// /// [`RequestStream`], and connections are never [`reject`]ed with a +// /// [`ConnectError`]. +// /// +// /// Note, however, that this type does *not* require that the +// /// [`RegisteredDriver`] type's [`RegisteredDriver::Hello`] type is [`()`], or +// /// that its [`RegisteredDriver::ConnectError`] type is +// /// [`core::convert::Infallible`]. This is because a [`RegisteredDriver`] +// /// *declaration* which includes a [`Hello`] and/or [`ConnectError`] type may be +// /// implemented by a server that does not care about [`Hello`]s or about +// /// [`reject`]ing connections on some platforms. Other platforms may +// /// implement the same [`RegisteredDriver`] declaration with a service that does +// /// consume [`Hello`]s or [`reject`] connections, but `RequestStream` is still +// /// usable with that `RegisteredDriver` in cases where the implementation does +// /// not need those features. +// /// +// /// [`reject`]: Handshake::reject +// /// [`Hello`]: RegisteredDriver::Hello +// /// [`ConnectError`]: RegisteredDriver::ConnectError +// #[must_use = "a `RequestStream` does nothing if `next_request` is not called"] +// pub struct RequestStream { +// // chan: KConsumer>, +// listener: Listener, +// } /// Errors returned by [`Handshake::accept`], [`Accept::accept`], /// [`Handshake::reject`], and [`Accept::reject`]. @@ -97,18 +97,23 @@ pub enum AcceptError { Canceled, } -type Channel = KProducer>; +pub type Channel = + BiDi<::ServerMsg, ::ClientMsg, calliope::message::Reset>; + +pub(super) type HandshakeResult = Result, ::ConnectError>; // === impl Listener === -impl Listener { +impl Listener { /// Returns a new `Listener` and an associated [`Registration`]. /// /// The `Listener`'s channel will have capacity for up to /// `incoming_capacity` un-accepted connections before clients have to wait /// to send a connection. - pub async fn new(incoming_capacity: usize) -> (Self, Registration) { - let (tx, rx) = KChannel::new(incoming_capacity).split(); + pub async fn new(incoming_capacity: u8) -> (Self, Registration) { + let pipe = mpsc::TrickyPipe::new(incoming_capacity); + let tx = pipe.sender(); + let rx = pipe.receiver().unwrap(); let registration = Registration { tx }; let listener = Self { rx }; (listener, registration) @@ -122,9 +127,9 @@ impl Listener { /// /// To return an incoming connection if one is available, *without* waiting, /// use the [`try_handshake`](Self::try_handshake) method. - pub async fn handshake(&self) -> Handshake { + pub async fn handshake(&self) -> Handshake { self.rx - .dequeue_async() + .recv() .await // The sender end of the incoming connection channel is owned by the // kernel, so this never closes. @@ -141,37 +146,38 @@ impl Listener { /// - [`Some`]`(`[`Handshake`]`)` if a new incoming connection is /// available without waiting. /// - [`None`] if no incoming connection is available without waiting. - pub async fn try_handshake(&self) -> Option> { - self.rx.dequeue_sync() + pub async fn try_handshake(&self) -> Option> { + self.rx.recv().await.ok() } - /// Converts this `Listener` into a [`RequestStream`] --- a simple stream of - /// incoming requests, which [accepts](Handshake::accept) all connections - /// with the same [`KChannel`]. - /// - /// The next request from any client may be awaited from the - /// [`RequestStream`] using the [`RequestStream::next_request`] method. - /// - /// This is useful when a service wishes to handle all requests with the - /// same channel, rather than spawning separate worker tasks for each - /// client, or routing requests based on a connection's [`Hello`] message. - /// - /// **Note**: Any [`Hello`] messages received from new connections are - /// discarded by the [`RequestStream`]. - /// - /// [`Hello`]: RegisteredDriver::Hello - pub async fn into_request_stream(self, capacity: usize) -> RequestStream { - let chan = KChannel::new(capacity).into_consumer(); - RequestStream { - chan, - listener: self, - } - } + // /// Converts this `Listener` into a [`RequestStream`] --- a simple stream of + // /// incoming requests, which [accepts](Handshake::accept) all connections + // /// with the same [`KChannel`]. + // /// + // /// The next request from any client may be awaited from the + // /// [`RequestStream`] using the [`RequestStream::next_request`] method. + // /// + // /// This is useful when a service wishes to handle all requests with the + // /// same channel, rather than spawning separate worker tasks for each + // /// client, or routing requests based on a connection's [`Hello`] message. + // /// + // /// **Note**: Any [`Hello`] messages received from new connections are + // /// discarded by the [`RequestStream`]. + // /// + // /// [`Hello`]: RegisteredDriver::Hello + // pub async fn into_request_stream(self, capacity: usize) -> RequestStream { + // // let chan = KChannel::new(capacity).into_consumer(); + // // RequestStream { + // // chan, + // // listener: self, + // // } + // todo!() + // } } // === impl Handshake === -impl Handshake { +impl Handshake { /// Accept the connection, returning the provided `channel` to the client. /// /// Any requests sent by the client once the connection has been accepted @@ -185,7 +191,7 @@ impl Handshake { /// client. In this case, the client is no longer interested in the /// connection (and may or may not still exist), and the service may /// ignore this connection request. - pub fn accept(self, channel: Channel) -> Result<(), AcceptError> { + pub fn accept(self, channel: Channel) -> Result<(), AcceptError> { self.accept.accept(channel) } @@ -197,14 +203,14 @@ impl Handshake { /// error was received by the client. /// - [`Err`]`(`[`AcceptError`]`)` if the connection was canceled by the /// client. - pub fn reject(self, error: D::ConnectError) -> Result<(), AcceptError> { + pub fn reject(self, error: S::ConnectError) -> Result<(), AcceptError> { self.accept.reject(error) } } // === impl Accept === -impl Accept { +impl Accept { /// Accept the connection, returning the provided `channel` to the client. /// /// Any requests sent by the client once the connection has been accepted @@ -218,14 +224,10 @@ impl Accept { /// client. In this case, the client is no longer interested in the /// connection (and may or may not still exist), and the service may /// ignore this connection request. - pub fn accept(self, channel: Channel) -> Result<(), AcceptError> { - match self.reply.send(Ok(channel)) { - Ok(()) => Ok(()), - Err(oneshot::ReusableError::ChannelClosed) => Err(AcceptError::Canceled), - Err(error) => unreachable!( - "we are the sender, so we should only ever see `ChannelClosed` errors: {error:?}" - ), - } + pub fn accept(self, channel: Channel) -> Result<(), AcceptError> { + self.reply + .send(Ok(channel)) + .map_err(|_| AcceptError::Canceled) } /// Reject the connection, returning the provided `error` to the client. @@ -236,57 +238,53 @@ impl Accept { /// error was received by the client. /// - [`Err`]`(`[`AcceptError`]`)` if the connection was canceled by the /// client. - pub fn reject(self, error: D::ConnectError) -> Result<(), AcceptError> { - match self.reply.send(Err(error)) { - Ok(()) => Ok(()), - Err(oneshot::ReusableError::ChannelClosed) => Err(AcceptError::Canceled), - Err(error) => unreachable!( - "we are the sender, so we should only ever see `ChannelClosed` errors: {error:?}" - ), - } + pub fn reject(self, error: S::ConnectError) -> Result<(), AcceptError> { + self.reply + .send(Err(error)) + .map_err(|_| AcceptError::Canceled) } } // === impl RequestStream === -impl RequestStream { - /// Returns the next incoming message, accepting any new connections until a - /// message is received. - /// - /// If all request senders have been dropped, this method waits until a new - /// connection is available to accept, and then waits for a message from a - /// client. - /// - /// **Note**: Any [`Hello`] messages received from new connections are - /// discarded. - /// - /// [`Hello`]: RegisteredDriver::Hello - pub async fn next_request(&self) -> Message { - loop { - let conn = select_biased! { - msg = self.chan.dequeue_async().fuse() => { - match msg { - Ok(msg) => return msg, - Err(_) => { - // if the request stream is "closed", that just - // means that all the senders are dropped. That - // doesn't mean that it's time for the service to - // die --- new receivers may be created by new - // incoming connections. So, wait for the next - // connection request. - self.listener.handshake().await - } - } - }, - conn = self.listener.handshake().fuse() => { - conn - } - }; +// impl RequestStream { +// /// Returns the next incoming message, accepting any new connections until a +// /// message is received. +// /// +// /// If all request senders have been dropped, this method waits until a new +// /// connection is available to accept, and then waits for a message from a +// /// client. +// /// +// /// **Note**: Any [`Hello`] messages received from new connections are +// /// discarded. +// /// +// /// [`Hello`]: RegisteredDriver::Hello +// pub async fn next_request(&self) -> Message { +// loop { +// let conn = select_biased! { +// msg = self.chan.dequeue_async().fuse() => { +// match msg { +// Ok(msg) => return msg, +// Err(_) => { +// // if the request stream is "closed", that just +// // means that all the senders are dropped. That +// // doesn't mean that it's time for the service to +// // die --- new receivers may be created by new +// // incoming connections. So, wait for the next +// // connection request. +// self.listener.handshake().await +// } +// } +// }, +// conn = self.listener.handshake().fuse() => { +// conn +// } +// }; - tracing::trace!("accepting new connection..."); - if conn.accept(self.chan.producer()).is_err() { - tracing::debug!("incoming connection canceled"); - } - } - } -} +// tracing::trace!("accepting new connection..."); +// if conn.accept(self.chan.producer()).is_err() { +// tracing::debug!("incoming connection canceled"); +// } +// } +// } +// } diff --git a/source/kernel/src/registry/mod.rs b/source/kernel/src/registry/mod.rs index baa21405..41bfb2a3 100644 --- a/source/kernel/src/registry/mod.rs +++ b/source/kernel/src/registry/mod.rs @@ -1,28 +1,29 @@ use core::{ any::{self, TypeId}, fmt, - marker::PhantomData, - mem, ptr, }; -use crate::comms::{kchannel, oneshot::Reusable}; +use crate::comms::{ + bidi, + mpsc::{self, error::RecvError, ErasedSender}, +}; +pub use calliope::{ + message::Reset, + req_rsp::{Request, Response}, + tricky_pipe::oneshot, + Service as UserService, +}; use maitake::sync::{RwLock, WaitQueue}; -use mnemos_alloc::containers::FixedVec; +use mnemos_alloc::containers::{Arc, FixedVec}; use portable_atomic::{AtomicU32, Ordering}; use postcard::experimental::max_size::MaxSize; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use spitebuf::EnqueueError; -use tracing::{self, debug, info, trace, warn, Level}; +use tracing::{self, debug, info, warn, Level}; pub use uuid::{uuid, Uuid}; -use crate::comms::{ - bbq, - kchannel::{ErasedKProducer, KProducer}, - oneshot::{ReusableError, Sender}, -}; - pub mod listener; pub use self::listener::{Listener, Registration}; +mod req_rsp; #[cfg(test)] mod tests; @@ -67,16 +68,9 @@ pub mod known_uuids { /// [`Registry::try_connect`], [`Registry::connect_userspace`], or /// [`Registry::try_connect_userspace] (depending on the service), after /// the service has been registered. -pub trait RegisteredDriver { - /// This is the type of the request sent TO the driver service - type Request: 'static; - - /// This is the type of a SUCCESSFUL response sent FROM the driver service - type Response: 'static; - - /// This is the type of an UNSUCCESSFUL response sent FROM the driver service - type Error: 'static; - +pub trait Service: Send + Sync + 'static { + type ClientMsg: Send + Sync + 'static; + type ServerMsg: Send + Sync + 'static; /// An initial message sent to the service by a client when establishing a /// connection. /// @@ -86,36 +80,17 @@ pub trait RegisteredDriver { /// data from the client, this type can be set to [`()`]. // XXX(eliza): ideally, we could default `Hello` to () and `ConnectError` to // `Infallible`...do we want to do that? it requires a nightly feature. - type Hello: 'static; + type Hello: Send + Sync + 'static; /// Errors returned by the service if an incoming connection handshake is /// rejected. /// /// If the service does not reject connections, this should be set to /// [`core::convert::Infallible`]. - type ConnectError: 'static; + type ConnectError: Send + Sync + 'static; /// This is the UUID of the driver service const UUID: Uuid; - - /// Get the [`TypeId`] used to make sure that driver instances are correctly typed. - /// Corresponds to the same type ID as `(`[`Self::Request`]`, `[`Self::Response`]`, - /// `[`Self::Error`]`, `[`Self::Hello`]`, `[`Self::ConnectError`]`)`. - fn type_id() -> RegistryType { - RegistryType { - tuple_type_id: TypeId::of::<( - Self::Request, - Self::Response, - Self::Error, - Self::Hello, - Self::ConnectError, - )>(), - } - } -} - -pub struct RegistryType { - tuple_type_id: TypeId, } /// The driver registry used by the kernel. @@ -125,6 +100,10 @@ pub struct Registry { service_added: WaitQueue, } +pub struct RegistryType { + tuple_type_id: TypeId, +} + // TODO: This probably goes into the ABI crate, here is fine for now #[derive(Serialize, Deserialize)] pub struct UserRequest<'a> { @@ -135,6 +114,8 @@ pub struct UserRequest<'a> { req_bytes: &'a [u8], } +pub type KernelSendError = mpsc::error::SendError; + // TODO: This probably goes into the ABI crate, here is fine for now #[derive(Serialize, Deserialize)] pub struct UserResponse { @@ -199,6 +180,7 @@ impl RequestResponseId { } } +/* /// A wrapper for a message TO and FROM a driver service. /// Used to be able to add additional message metadata without /// changing the fundamental message type. @@ -224,7 +206,7 @@ pub struct OpenEnvelope

{ /// It contains the Request, e.g. [RegisteredDriver::Request], as well /// as a [ReplyTo] that allows the driver service to respond to a given /// request -pub struct Message { +pub struct Message { pub msg: Envelope, pub reply: ReplyTo, } @@ -233,7 +215,7 @@ pub struct Message { /// way that the driver SERVICE replies to us. Essentially, this acts /// as a "self addressed stamped envelope" for the SERVICE to use to /// reply to the CLIENT. -pub enum ReplyTo { +pub enum ReplyTo { // This can be used to reply directly to another kernel entity, // without a serialization step KChannel(KProducer>>), @@ -250,6 +232,7 @@ pub enum ReplyTo { }, } +*/ #[derive(Debug, Eq, PartialEq)] pub enum ReplyError { KOnlyUserspaceResponse, @@ -271,7 +254,7 @@ pub enum RegistrationError { } /// Errors returned by [`Registry::connect`] and [`Registry::try_connect`]. -pub enum ConnectError { +pub enum ConnectError { /// No [`RegisteredDriver`] of this type was found! /// /// The [`RegisteredDriver::Hello`] message is returned, so that it can be @@ -286,53 +269,11 @@ pub enum ConnectError { /// Errors returned by [`Registry::connect_userspace`] and /// [`Registry::try_connect_userspace`]. -pub enum UserConnectError { - /// No [`RegisteredDriver`] of this type was found! - NotFound, - /// The remote [`RegisteredDriver`] rejected the connection. - Rejected(D::ConnectError), - /// The remote [`RegisteredDriver`] has been registered, but the service - /// task has terminated. - DriverDead, +pub enum UserConnectError { /// Deserializing the userspace `Hello` message failed. DeserializationFailed(postcard::Error), - /// The requested driver is not exposed. - NotUserspace, -} - -#[derive(Debug, Eq, PartialEq)] -pub enum OneshotRequestError { - /// An error occurred while acquiring a sender. - Sender(ReusableError), - /// Sending the request failed. - Send, - /// An error occurred while receiving the response. - Receive(ReusableError), -} - -#[derive(Debug, Eq, PartialEq)] -pub enum SendError { - /// The service on the other end of the [`KernelHandle`] has terminated! - Closed, -} - -impl From for ReplyError { - fn from(err: ReusableError) -> Self { - match err { - ReusableError::ChannelClosed => ReplyError::ReplyChannelClosed, - _ => ReplyError::InternalError, - } - } -} - -impl From> for ReplyError { - fn from(enq: EnqueueError) -> Self { - match enq { - // Should not be possible with async calls - EnqueueError::Full(_) => ReplyError::InternalError, - EnqueueError::Closed(_) => ReplyError::ReplyChannelClosed, - } - } + /// Connecting to the service failed. + Connect(ConnectError), } /// A UserspaceHandle is used to process incoming serialized messages from @@ -340,60 +281,30 @@ impl From> for ReplyError { /// from a given UUID, and send that request (if the deserialization is /// successful) to a given driver service. pub struct UserspaceHandle { - req_producer_leaked: ErasedKProducer, - req_deser: ErasedReqDeser, + chan: bidi::SerBiDi, service_id: ServiceId, client_id: ClientId, } /// A KernelHandle is used to send typed messages to a kernelspace Driver /// service. -pub struct KernelHandle { - prod: KProducer>, +pub struct KernelHandle { + chan: bidi::BiDi, service_id: ServiceId, client_id: ClientId, - request_ctr: u32, } -type ErasedReqDeser = unsafe fn( - UserRequest<'_>, - &ErasedKProducer, - &bbq::MpscProducer, - ServiceId, - ClientId, -) -> Result<(), UserHandlerError>; - -type ErasedHandshake = unsafe fn( - &maitake::scheduler::LocalScheduler, - &[u8], - &ErasedKProducer, - ptr::NonNull<()>, -) -> maitake::task::JoinHandle>; - /// The payload of a registry item. /// /// The typeid is stored here to allow the userspace handle to look up the UUID key /// without knowing the proper typeid. Kernel space drivers should always check that the /// tuple type id is correct. struct RegistryValue { - req_resp_tuple_id: TypeId, - conn_prod: ErasedKProducer, - user_vtable: Option, + type_id: TypeId, + conns: ErasedSender, service_id: ServiceId, } -/// A [virtual function pointer table][vtable] (vtable) that specifies how -/// userspace requests are serialized and deserialized. -/// -/// [vtable]: https://en.wikipedia.org/wiki/Virtual_method_table -#[derive(Copy, Clone)] -struct UserVtable { - /// Deserializes userspace requests. - req_deser: ErasedReqDeser, - /// Deserializes handshakes from userspace. - handshake: ErasedHandshake, -} - /// Right now we don't use a real HashMap, but rather a hand-rolled index map. /// Therefore our registry is basically a `Vec`. struct RegistryItem { @@ -422,124 +333,64 @@ impl Registry { } } - /// Bind a kernel-only [`Listener`] for a driver service of type `RD`. - /// - /// This is a helper method which creates a [`Listener`] using - /// [`Listener::new`] and then registers that [`Listener`]'s - /// [`listener::Registration`] with the registry using - /// [`Registry::register_konly`]. - /// - /// Driver services registered with [`Registry::bind_konly`] can NOT be queried - /// or interfaced with from Userspace. If a registered service has request - /// and response types that are serializable, it can instead be registered - /// with [`Registry::bind`] which allows for userspace access. - pub async fn bind_konly(&self, capacity: usize) -> Result, RegistrationError> - where - RD: RegisteredDriver, - { - let (listener, registration) = Listener::new(capacity).await; - self.register_konly(registration).await?; - Ok(listener) - } - - /// Bind a [`Listener`] for a driver service of type `RD`. + /// Bind a [`Listener`] for a driver service of type `S`. /// /// This is a helper method which creates a [`Listener`] using /// [`Listener::new`] and then registers that [`Listener`]'s /// [`listener::Registration`] with the registry using /// [`Registry::register`]. - /// - /// Driver services registered with [`Registry::bind`] can be accessed both - /// by the kernel and by userspace. This requires that the - /// [`RegisteredDriver`]'s message types implement [`Serialize`] and - /// [`DeserializeOwned`]. Driver services whose message types are *not* - /// serializable may still bind listeners using [`Registry::bind_konly`], - /// but these listeners will not be accessible from userspace. - pub async fn bind(&self, capacity: usize) -> Result, RegistrationError> - where - RD: RegisteredDriver + 'static, - RD::Hello: Serialize + DeserializeOwned, - RD::ConnectError: Serialize + DeserializeOwned, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, - { + pub async fn bind(&self, capacity: u8) -> Result, RegistrationError> { let (listener, registration) = Listener::new(capacity).await; self.register(registration).await?; Ok(listener) } - /// Register a driver service ONLY for use in the kernel, including drivers. - /// - /// Driver services registered with [Registry::register_konly] can NOT be queried - /// or interfaced with from Userspace. If a registered service has request - /// and response types that are serializable, it can instead be registered - /// with [Registry::register] which allows for userspace access. + /// Register a service with this registry. #[tracing::instrument( - name = "Registry::register_konly", + name = "Registry::register", level = Level::INFO, skip(self, registration), - fields(svc = %any::type_name::()), + fields(svc = %any::type_name::(), svc.uuid = ?S::UUID), err(Display), )] - pub async fn register_konly( + pub async fn register( &self, - registration: listener::Registration, + registration: listener::Registration, ) -> Result<(), RegistrationError> { - let conn_prod = registration.tx.type_erase(); + // construct the registry entry for the new service. + let conns = registration.tx.into_erased(); let service_id = self.counter.fetch_add(1, Ordering::Relaxed); - self.insert_item(RegistryItem { - key: RD::UUID, + let entry = RegistryItem { + key: S::UUID, value: RegistryValue { - req_resp_tuple_id: RD::type_id().type_of(), - conn_prod, - user_vtable: None, + type_id: tuple_type_id::(), + conns, service_id: ServiceId(service_id), }, - }) - .await?; + }; - info!(uuid = ?RD::UUID, service_id, "Registered KOnly"); + // insert the entry into the registry. + let mut lock = self.items.write().await; + if lock.as_slice().iter().any(|i| i.key == entry.key) { + warn!("Failed to register service: the UUID is already registered!"); + return Err(RegistrationError::UuidAlreadyRegistered(entry.key)); + } - Ok(()) - } + lock.try_push(entry).map_err(|_| { + warn!("Failed to register service: the registry is full!"); + // close the "service added" waitcell, because no new services will + // ever be added. + self.service_added.close(); + RegistrationError::RegistryFull + })?; - /// Register a driver service for use in the kernel (including drivers) as - /// well as in userspace. - /// - /// See [Registry::register_konly] if the request and response types are not - /// serializable. - #[tracing::instrument( - name = "Registry::register", - level = Level::INFO, - skip(self, registration), - fields(svc = %any::type_name::()), - err(Display), - )] - pub async fn register( - &self, - registration: listener::Registration, - ) -> Result<(), RegistrationError> - where - RD: RegisteredDriver + 'static, - RD::Hello: Serialize + DeserializeOwned, - RD::ConnectError: Serialize + DeserializeOwned, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, - { - let service_id = self.counter.fetch_add(1, Ordering::Relaxed); - let conn_prod = registration.tx.type_erase(); - self.insert_item(RegistryItem { - key: RD::UUID, - value: RegistryValue { - req_resp_tuple_id: RD::type_id().type_of(), - conn_prod, - user_vtable: Some(UserVtable::new::()), - service_id: ServiceId(service_id), - }, - }) - .await?; + // release the lock on the registry *before* waking any tasks waiting + // for new services to be added, so that they can access the new + // service's entry without waiting for the lock to be released. + drop(lock); + self.service_added.wake_all(); - info!(uuid = ?RD::UUID, service_id, "Registered"); + info!(svc.id = service_id, "Registered service"); Ok(()) } @@ -577,13 +428,13 @@ impl Registry { name = "Registry::try_connect", level = Level::DEBUG, skip(self, hello), - fields(svc = %any::type_name::()), + fields(svc = %any::type_name::()), )] - pub async fn try_connect( + pub async fn try_connect( &self, - hello: RD::Hello, - ) -> Result, ConnectError> { - let (tx, service_id) = { + hello: S::Hello, + ) -> Result, ConnectError> { + let (conns, service_id) = { // /!\ WARNING: Load-bearing scope /!\ // // We need to ensure that we only hold the lock on `self.items` @@ -593,64 +444,53 @@ impl Registry { // able to connect while we're waiting for the handshake, // potentially causing a deadlock... let items = self.items.read().await; - let item = match Self::get::(&items) { - Some(item) => item, - None => return Err(ConnectError::NotFound(hello)), - }; - - // cast the erased connection sender back to a typed sender. - let tx = unsafe { - // Safety: we just checked that the type IDs match above. - item.value - .conn_prod - .clone_typed::>() + let Some(item) = Self::get::(&items) else { + return Err(ConnectError::NotFound(hello)); }; - (tx, item.value.service_id) + let conns = item.value.conns.clone(); + let service_id = item.value.service_id; + (conns, service_id) }; - // TODO(eliza): it would be nice if we could reuse the oneshot receiver - // every time this driver is connected to? This would require type - // erasing it... - let rx = Reusable::new_async().await; - let reply = rx - .sender() + let permit = conns + .reserve() + .await + .map_err(|_| ConnectError::DriverDead)? + .downcast::>() + .expect("downcasting a service entry to the expected service type must succeed!"); + + let handshake_rx = Arc::new(oneshot::Oneshot::>::new()) .await - .expect("we just created the oneshot, so this should never fail"); - // send the connection request... - tx.enqueue_async(listener::Handshake { + .into_inner() + .arc_receiver() + .expect("Arc was freshly allocated and is safe to use"); + let reply = handshake_rx.sender().await.expect("no sender should exist"); + permit.send(listener::Handshake { hello, - accept: listener::Accept { reply } - }).await.map_err(|err| match err { - kchannel::EnqueueError::Closed(_) => ConnectError::DriverDead, - kchannel::EnqueueError::Full(_) => unreachable!("the channel should not be full, as we are using `enqueue_async`, which waits for capacity") - })?; - // ...and wait for a response with an established connection. - let prod = rx - .receive() + accept: listener::Accept { reply }, + }); + + let chan = handshake_rx + .recv() .await - // this is a `Reusable>>`, so - // the outer `Result` is the error returned by `receive()`... .map_err(|_| ConnectError::DriverDead)? - // ...and the inner `Result` is the error returned by the driver. .map_err(ConnectError::Rejected)?; let client_id = self.counter.fetch_add(1, Ordering::Relaxed); - let res = Ok(KernelHandle { - prod, - service_id, - client_id: ClientId(client_id), - request_ctr: 0, - }); info!( - svc = %any::type_name::(), - uuid = ?RD::UUID, + svc = %any::type_name::(), + uuid = ?S::UUID, service_id = service_id.0, client_id, "Got KernelHandle from Registry", ); - res + Ok(KernelHandle { + chan, + service_id, + client_id: ClientId(client_id), + }) } /// Get a kernelspace (including drivers) handle of a given driver service, @@ -687,7 +527,7 @@ impl Registry { )] pub async fn connect(&self, hello: RD::Hello) -> Result, ConnectError> where - RD: RegisteredDriver, + RD: Service, { let mut hello = Some(hello); let mut is_full = false; @@ -726,25 +566,20 @@ impl Registry { name = "Registry::connect_userspace", level = Level::DEBUG, skip(self), - fields(svc = %any::type_name::()), + fields(svc = %any::type_name::()), )] - pub async fn connect_userspace( + pub async fn connect_userspace( &self, - scheduler: &maitake::scheduler::LocalScheduler, user_hello: &[u8], - ) -> Result> + ) -> Result> where - RD: RegisteredDriver, - RD::Hello: Serialize + DeserializeOwned, - RD::ConnectError: Serialize + DeserializeOwned, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, + S: UserService + Send + Sync + 'static, { let mut is_full = false; loop { - match self.try_connect_userspace(scheduler, user_hello).await { + match self.try_connect_userspace(user_hello).await { Ok(handle) => return Ok(handle), - Err(UserConnectError::NotFound) if !is_full => { + Err(UserConnectError::Connect(ConnectError::NotFound(_))) if !is_full => { debug!("no service found; waiting for one to be added..."); // wait for a service to be added to the registry is_full = self.service_added.wait().await.is_err(); @@ -766,123 +601,50 @@ impl Registry { #[tracing::instrument( name = "Registry::try_connect_userspace", level = Level::DEBUG, - skip(self, scheduler), - fields(svc = %any::type_name::()), + skip(self), + fields(svc = %any::type_name::()), )] - pub async fn try_connect_userspace( + pub async fn try_connect_userspace( &self, - scheduler: &maitake::scheduler::LocalScheduler, user_hello: &[u8], - ) -> Result> + ) -> Result> where - RD: RegisteredDriver, - RD::Hello: Serialize + DeserializeOwned, - RD::ConnectError: Serialize + DeserializeOwned, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, + S: UserService + Send + Sync + 'static, { - let (vtable, conn_prod, service_id) = { - // /!\ WARNING: Load-bearing scope /!\ - // - // We need to ensure that we only hold the lock on `self.items` - // while we're accessing the item; *not* while we're `await`ing a - // bunch of other stuff to connect to the service. This is - // important, because if we held the lock, no other task would be - // able to connect while we're waiting for the handshake, - // potentially causing a deadlock... - let items = self.items.read().await; - let item = Self::get::(&items).ok_or_else(|| UserConnectError::NotFound)?; - let vtable = item - .value - .user_vtable - // if the registry item has no userspace vtable, it's not exposed to - // userspace. - // this is *weird*, since this method requires that `RD`'s message - // types be serializable/deserializable, but it's possible that the - // driver was (accidentally?) registered with `register_konly` even - // though it didn't *need* to be due to serializability... - .ok_or(UserConnectError::NotUserspace)?; - let conn_prod = item.value.conn_prod.clone(); - let service_id = item.value.service_id; - (vtable, conn_prod, service_id) - }; - - let mut handshake_result = mem::MaybeUninit::>::uninit(); - let outptr = ptr::NonNull::from(&mut handshake_result).cast::<()>(); - - let handshake = unsafe { (vtable.handshake)(scheduler, user_hello, &conn_prod, outptr) }; - let req_producer_leaked = match handshake.await { - // Outer `Result` is the `JoinError` from `maitake` --- it should - // always succeed, because we own the task's joinhandle, and we - // never cancel it. - Err(_) => unreachable!("handshake task should not be canceled"), - // Couldn't deserialize the userspace handshake bytes! - Ok(Err(error)) => { - return Err(UserConnectError::DeserializationFailed(error)); - } - // Safe to touch the out pointer! - Ok(Ok(())) => unsafe { - // Safety: `handshake_result` is guaranteed to be initialized by - // `erased_handshake` if and only if its future completes with - // an `Ok(())`. and it did! - handshake_result.assume_init()?.type_erase() - }, - }; - - let client_id = self.counter.fetch_add(1, Ordering::Relaxed); - info!( - svc = %any::type_name::(), - uuid = ?RD::UUID, - service_id = service_id.0, + let hello = postcard::from_bytes::<::Hello>(user_hello) + .map_err(UserConnectError::DeserializationFailed)?; + let KernelHandle { + chan, + service_id, client_id, - "Got KernelHandle from Registry", - ); - + } = self + .try_connect(hello) + .await + .map_err(UserConnectError::Connect)?; + let chan = chan.into_serde(); Ok(UserspaceHandle { - req_producer_leaked, - req_deser: vtable.req_deser, + chan, service_id, - client_id: ClientId(client_id), + client_id, }) } - async fn insert_item(&self, item: RegistryItem) -> Result<(), RegistrationError> { - { - let mut items = self.items.write().await; - if items.as_slice().iter().any(|i| i.key == item.key) { - return Err(RegistrationError::UuidAlreadyRegistered(item.key)); - } - - items.try_push(item).map_err(|_| { - warn!("failed to insert new registry item; the registry is full!"); - // close the "service added" waitcell, because no new services will - // ever be added. - self.service_added.close(); - RegistrationError::RegistryFull - })?; - } - - self.service_added.wake_all(); - - Ok(()) - } - - fn get(items: &FixedVec) -> Option<&RegistryItem> { - let Some(item) = items.as_slice().iter().find(|i| i.key == RD::UUID) else { + fn get(items: &FixedVec) -> Option<&RegistryItem> { + let Some(item) = items.as_slice().iter().find(|i| i.key == S::UUID) else { debug!( - svc = %any::type_name::(), - uuid = ?RD::UUID, + svc = %any::type_name::(), + uuid = ?S::UUID, "No service for this UUID exists in the registry!" ); return None; }; - let expected_type_id = RD::type_id().type_of(); - let actual_type_id = item.value.req_resp_tuple_id; + let expected_type_id = tuple_type_id::(); + let actual_type_id = item.value.type_id; if expected_type_id != actual_type_id { warn!( - svc = %any::type_name::(), - uuid = ?RD::UUID, + svc = %any::type_name::(), + uuid = ?S::UUID, type_id.expected = ?expected_type_id, type_id.actual = ?actual_type_id, "Registry entry's type ID did not match driver's type ID. This is (probably?) a bug!" @@ -893,373 +655,41 @@ impl Registry { Some(item) } } - -// UserRequest - -// Envelope - -impl

OpenEnvelope

{ - pub fn fill(self, contents: P) -> Envelope

{ - Envelope { - body: contents, - service_id: self.service_id, - client_id: self.client_id, - request_id: self.request_id, - } - } -} - -impl

Envelope

{ - // NOTE: proper types are constrained by [Message::split] - fn split_reply(self) -> (P, OpenEnvelope) { - let env = OpenEnvelope { - body: PhantomData, - service_id: self.service_id, - client_id: self.client_id, - request_id: RequestResponseId::new(self.request_id.id(), MessageKind::Response), - }; - (self.body, env) - } - - /// Create a response Envelope from a given request Envelope. - /// - /// Maintains the same Service ID and Client ID, and increments the - /// request ID by one. - pub fn reply_with(&self, body: U) -> Envelope { - Envelope { - body, - service_id: self.service_id, - client_id: self.client_id, - request_id: RequestResponseId::new(self.request_id.id(), MessageKind::Response), - } - } - - /// Create a response Envelope from a given request Envelope. - /// - /// Maintains the same Service ID and Client ID, and increments the - /// request ID by one. - /// - /// This variant also gives you the request body in case you need it for - /// the response. - pub fn reply_with_body(self, f: F) -> Envelope - where - F: FnOnce(P) -> U, - { - Envelope { - service_id: self.service_id, - client_id: self.client_id, - request_id: RequestResponseId::new(self.request_id.id(), MessageKind::Response), - body: f(self.body), - } - } -} - -// Message - -impl Message { - // Would adding type aliases really make this any better? Who cares. - #[allow(clippy::type_complexity)] - pub fn split( - self, - ) -> ( - RD::Request, - OpenEnvelope>, - ReplyTo, - ) { - let Self { msg, reply } = self; - let (req, env) = msg.split_reply(); - (req, env, reply) - } -} - -// ReplyTo - -impl ReplyTo { - pub async fn reply_konly( - self, - envelope: Envelope>, - ) -> Result<(), ReplyError> { - trace!( - service_id = envelope.service_id.0, - client_id = envelope.client_id.0, - response_id = envelope.request_id.id(), - svc = %any::type_name::(), - "Replying KOnly", - ); - match self { - ReplyTo::KChannel(kprod) => { - kprod.enqueue_async(envelope).await?; - } - ReplyTo::OneShot(sender) => { - sender.send(envelope)?; - } - ReplyTo::Userspace { .. } => return Err(ReplyError::KOnlyUserspaceResponse), - } - Ok(()) - } -} - -impl ReplyTo -where - RD::Response: Serialize + MaxSize, - RD::Error: Serialize + MaxSize, -{ - pub async fn reply( - self, - uuid_source: Uuid, - envelope: Envelope>, - ) -> Result<(), ReplyError> { - trace!( - service_id = envelope.service_id.0, - client_id = envelope.client_id.0, - response_id = envelope.request_id.id(), - svc = %any::type_name::(), - "Replying", - ); - match self { - ReplyTo::KChannel(kprod) => { - kprod.enqueue_async(envelope).await?; - Ok(()) - } - ReplyTo::OneShot(sender) => { - sender.send(envelope)?; - Ok(()) - } - ReplyTo::Userspace { nonce, outgoing } => { - let mut wgr = outgoing - .send_grant_exact( - as MaxSize>::POSTCARD_MAX_SIZE, - ) - .await; - let used = postcard::to_slice( - &UserResponse { - uuid: uuid_source, - nonce, - reply: envelope.body, - }, - &mut wgr, - ) - .map_err(|_| ReplyError::UserspaceSerializationError)?; - let len = used.len(); - wgr.commit(len); - Ok(()) - } - } - } -} - // UserspaceHandle -impl UserspaceHandle { - pub fn process_msg( - &self, - user_msg: UserRequest<'_>, - user_ring: &bbq::MpscProducer, - ) -> Result<(), UserHandlerError> { - unsafe { - (self.req_deser)( - user_msg, - &self.req_producer_leaked, - user_ring, - self.service_id, - self.client_id, - ) - } - } -} +// impl UserspaceHandle { +// pub fn process_msg( +// &self, +// user_msg: UserRequest<'_>, +// user_ring: &bbq::MpscProducer, +// ) -> Result<(), UserHandlerError> { +// unsafe { +// (self.req_deser)( +// user_msg, +// &self.req_producer_leaked, +// user_ring, +// self.service_id, +// self.client_id, +// ) +// } +// } +// } // KernelHandle -impl KernelHandle { - pub async fn send(&mut self, msg: RD::Request, reply: ReplyTo) -> Result<(), SendError> { - let request_id = RequestResponseId::new(self.request_ctr, MessageKind::Request); - self.request_ctr = self.request_ctr.wrapping_add(1); - self.prod - .enqueue_async(Message { - msg: Envelope { - body: msg, - service_id: self.service_id, - client_id: self.client_id, - request_id, - }, - reply, - }) - .await - .map_err(|_| SendError::Closed)?; - trace!( - service_id = self.service_id.0, - client_id = self.client_id.0, - request_id = request_id.id(), - svc = %any::type_name::(), - "Sent Request" - ); - Ok(()) - } - - /// Send a [`ReplyTo::OneShot`] request using the provided [`Reusable`] - /// oneshot channel, and await the response from that channel. - pub async fn request_oneshot( - &mut self, - msg: RD::Request, - reply: &Reusable>>, - ) -> Result>, OneshotRequestError> { - let tx = reply.sender().await.map_err(OneshotRequestError::Sender)?; - self.send(msg, ReplyTo::OneShot(tx)) - .await - .map_err(|_| OneshotRequestError::Send)?; - reply.receive().await.map_err(OneshotRequestError::Receive) +impl KernelHandle { + pub async fn send( + &self, + msg: S::ClientMsg, + ) -> Result<(), mpsc::error::SendError> { + self.chan.tx().send(msg).await } -} -// UserVtable - -impl UserVtable { - const fn new() -> Self - where - RD: RegisteredDriver + 'static, - RD::Hello: Serialize + DeserializeOwned, - RD::ConnectError: Serialize + DeserializeOwned, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, - { - Self { - req_deser: map_deser::, - handshake: erased_user_handshake::, - } + pub async fn recv(&self) -> Result> { + self.chan.rx().recv().await } } -/// A monomorphizable function that allows us to store the serialization type within -/// the function itself, allowing for a type-erased function pointer to be stored -/// inside of the registry. -/// -/// SAFETY: -/// -/// This function MUST be called with a `RegisteredDriver` type matching the type -/// used to create the `ErasedKProducer`. -unsafe fn map_deser( - umsg: UserRequest<'_>, - req_tx: &ErasedKProducer, - user_resp: &bbq::MpscProducer, - service_id: ServiceId, - client_id: ClientId, -) -> Result<(), UserHandlerError> -where - RD: RegisteredDriver, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, -{ - // Un-type-erase the producer channel - // - // TODO: We don't really need to clone the producer, we just need a reference valid - // for the lifetime of `req_tx`. Consider adding a method for this before merging - // https://github.com/tosc-rs/mnemos/pull/25. - // - // This PROBABLY would require a "with"/closure method to make sure the producer ref - // doesn't outlive the LeakedKProducer reference. - let req_prod = req_tx.clone_typed::>(); - - // Deserialize the request, if it doesn't have the right contents, deserialization will fail. - let u_payload: RD::Request = postcard::from_bytes(umsg.req_bytes) - .map_err(|_| UserHandlerError::DeserializationFailed)?; - - // Create the message type to be sent on the channel - let msg: Message = Message { - msg: Envelope { - body: u_payload, - service_id, - client_id, - request_id: RequestResponseId::new(umsg.nonce, MessageKind::Request), - }, - reply: ReplyTo::Userspace { - nonce: umsg.nonce, - outgoing: user_resp.clone(), - }, - }; - - // Send the message, and report any failures - req_prod - .enqueue_sync(msg) - .map_err(|_| UserHandlerError::QueueFull) -} - -type UserHandshakeResult = Result>, UserConnectError>; - -/// Perform a type-erased userspace handshake, deserializing the -/// [`RegisteredDriver::Hello`] message from `hello_bytes` and returning a -/// future that writes the handshake result to the provided `outptr`, if the -/// future completes successfully. -/// -/// # Safety -/// -/// - This function MUST be called with a [`RegisteredDriver`] type matching the -/// type used to create the [`ErasedKProducer`]. -/// - `outptr` MUST be a valid pointer to a -/// [`mem::MaybeUninit`]`<`[`UserHandshakeResult`]`>`, and MUST live as -/// long as the future returned from this function. -/// - `outptr` is guaranteed to be initialized IF AND ONLY IF the future -/// returned by this method returns [`Ok`]`(())`. If this method returns an -/// [`Err`], `outptr` will NOT be initialized. -unsafe fn erased_user_handshake( - scheduler: &maitake::scheduler::LocalScheduler, - hello_bytes: &[u8], - conn_tx: &ErasedKProducer, - outptr: core::ptr::NonNull<()>, -) -> maitake::task::JoinHandle> -where - RD: RegisteredDriver + 'static, - RD::Hello: Serialize + DeserializeOwned, - RD::ConnectError: Serialize + DeserializeOwned, - RD::Request: Serialize + DeserializeOwned, - RD::Response: Serialize + DeserializeOwned, -{ - let conn_tx = conn_tx.clone_typed::>(); - // Deserialize the request, if it doesn't have the right contents, deserialization will fail. - let hello: Result = postcard::from_bytes(hello_bytes); - - // spawn a task to allow us to perform async work from a type-erased context - scheduler.spawn(async move { - let hello = hello?; - - // TODO(eliza): it would be nice if we could reuse the oneshot receiver - // every time this driver is connected to? This would require type - // erasing it... - let rx = Reusable::new_async().await; - let reply = rx - .sender() - .await - .expect("we just created the oneshot, so this should never fail"); - - // send the connection request... - conn_tx.enqueue_async(listener::Handshake { - hello, - accept: listener::Accept { reply } - }).await.map_err(|err| match err { - kchannel::EnqueueError::Closed(_) => todo!(), - kchannel::EnqueueError::Full(_) => unreachable!("the channel should not be full, as we are using `enqueue_async`, which waits for capacity") - })?; - - // ...and wait for a response with an established connection. - let result = rx - .receive() - .await - // this is a `Reusable>>`, so - // the outer `Result` is the error returned by `receive()`... - .map_err(|_| UserConnectError::DriverDead) - // ...and the inner result is the connect error returned by the service. - .and_then(|res| res.map_err(UserConnectError::Rejected)); - - outptr - // Safety: the caller is responsible for ensuring the out pointer is - // correctly typed. - .cast::>>() - .as_mut() - .write(result); - - Ok(()) - }) -} - // UserHandlerError impl fmt::Display for UserHandlerError { @@ -1275,7 +705,7 @@ impl fmt::Display for UserHandlerError { impl PartialEq for ConnectError where - D: RegisteredDriver, + D: Service, D::ConnectError: PartialEq, { fn eq(&self, other: &Self) -> bool { @@ -1290,14 +720,14 @@ where impl Eq for ConnectError where - D: RegisteredDriver, + D: Service, D::ConnectError: Eq, { } impl fmt::Debug for ConnectError where - D: RegisteredDriver, + D: Service, D::ConnectError: fmt::Debug, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -1317,7 +747,7 @@ where impl fmt::Display for ConnectError where - D: RegisteredDriver, + D: Service, D::ConnectError: fmt::Display, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -1332,51 +762,24 @@ where // UserConnectError -impl PartialEq for UserConnectError -where - D: RegisteredDriver, - D::ConnectError: PartialEq, -{ - fn eq(&self, other: &Self) -> bool { - match (self, other) { - (Self::DeserializationFailed(this), Self::DeserializationFailed(that)) => this == that, - (Self::Rejected(this), Self::Rejected(that)) => this == that, - (Self::NotFound, Self::NotFound) => true, - (Self::DriverDead, Self::DriverDead) => true, - (Self::NotUserspace, Self::NotUserspace) => true, - _ => false, - } - } -} - -impl Eq for UserConnectError -where - D: RegisteredDriver, - D::ConnectError: Eq, -{ -} - impl fmt::Debug for UserConnectError where - D: RegisteredDriver, + D: Service, D::ConnectError: fmt::Debug, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::DeserializationFailed(error) => { let mut d = f.debug_struct("DeserializationFailed"); - d.field("error", error); d } - Self::NotFound => f.debug_struct("NotFound"), - Self::DriverDead => f.debug_struct("NotFound"), - Self::Rejected(error) => { - let mut d = f.debug_struct("Rejected"); - d.field("error", &error); + Self::Connect(error) => { + let mut d = f.debug_struct("Connect"); + + d.field("error", error); d } - Self::NotUserspace => f.debug_struct("NotUserspace"), } .field("svc", &mycelium_util::fmt::display(any::type_name::())) .finish() @@ -1385,25 +788,17 @@ where impl fmt::Display for UserConnectError where - D: RegisteredDriver, + D: Service, D::ConnectError: fmt::Display, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let name = any::type_name::(); match self { - Self::DriverDead => write!(f, "the {name} service has terminated"), - Self::NotFound => write!(f, "no {name} service found in the registry"), - Self::Rejected(err) => write!(f, "the {name} service rejected the connection: {err}",), + Self::Connect(err) => fmt::Display::fmt(err, f), Self::DeserializationFailed(err) => write!( f, "failed to deserialize userspace Hello for the {} service: {err}", any::type_name::() ), - Self::NotUserspace => write!( - f, - "the {} service is not exposed to userspace", - any::type_name::() - ), } } } @@ -1420,3 +815,18 @@ impl fmt::Display for RegistrationError { } } } + +impl Service for S +where + S: UserService + Send + Sync + 'static, +{ + const UUID: Uuid = S::UUID; + type ClientMsg = S::ClientMsg; + type ServerMsg = S::ServerMsg; + type Hello = S::Hello; + type ConnectError = S::ConnectError; +} + +fn tuple_type_id() -> TypeId { + TypeId::of::<(S::Hello, S::ClientMsg, S::ServerMsg, S::ConnectError)>() +} diff --git a/source/kernel/src/registry/req_rsp.rs b/source/kernel/src/registry/req_rsp.rs new file mode 100644 index 00000000..c7a42561 --- /dev/null +++ b/source/kernel/src/registry/req_rsp.rs @@ -0,0 +1,198 @@ +use super::Service; +use crate::mnemos_alloc::containers::Arc; +use crate::Kernel; +use calliope::{ + message, + req_rsp::{Request, Response}, + tricky_pipe::mpsc::{ + error::{RecvError, SendError, TrySendError}, + Receiver, Sender, + }, +}; +use futures::pin_mut; +use maitake::sync::wait_map::{WaitError, WaitMap, WakeOutcome}; +use portable_atomic::{AtomicUsize, Ordering}; +use tracing::Instrument; + +pub struct KernelReqRspHandle { + tx: Sender, message::Reset>, + state: Arc>, +} + +struct SharedState { + seq: AtomicUsize, + dispatcher: WaitMap, +} + +pub trait ReqRspService: + Service, ServerMsg = Response> +{ + type Request: 'static; + type Response: 'static; +} + +enum RequestError { + Reset(message::Reset), + SeqInUse, +} + +// === impl Client === + +impl KernelReqRspHandle +where + S: ReqRspService, +{ + pub async fn new(k: &'static Kernel, handle: super::KernelHandle) -> Self { + let (tx, rx) = handle.chan.split(); + let state = Arc::new(SharedState { + seq: AtomicUsize::new(0), + dispatcher: WaitMap::new(), + }) + .await; + k.spawn(state.clone().dispatch(rx).instrument( + tracing::debug_span!("ReqRsp::dispatch", svc = %core::any::type_name::()), + )) + .await; + + Self { tx, state } + } + + pub async fn request(&self, req: S::Request) -> Result { + #[cfg_attr(debug_assertions, allow(unreachable_code))] + let handle_wait_error = |err: WaitError| match err { + WaitError::Closed => { + let error = self.tx.try_reserve().expect_err( + "if the waitmap was closed, then the channel should \ + have been closed with an error!", + ); + if let TrySendError::Error { error, .. } = error { + return RequestError::Reset(error); + } + + #[cfg(debug_assertions)] + unreachable!( + "closing the channel with an error should have priority \ + over full/disconnected errors." + ); + + RequestError::Reset(message::Reset::BecauseISaidSo) + } + WaitError::Duplicate => RequestError::SeqInUse, + WaitError::AlreadyConsumed => { + unreachable!("data should not already be consumed, this is a bug") + } + WaitError::NeverAdded => { + unreachable!("we ensured the waiter was added, this is a bug!") + } + error => { + #[cfg(debug_assertions)] + todo!( + "james added a new WaitError variant that we don't \ + know how to handle: {error:}" + ); + + #[cfg_attr(debug_assertions, allow(unreachable_code))] + RequestError::Reset(message::Reset::BecauseISaidSo) + } + }; + + // aquire a send permit first --- this way, we don't increment the + // sequence number until we actually have a channel reservation. + let permit = self.tx.reserve().await.map_err(|e| match e { + SendError::Disconnected(()) => message::Reset::BecauseISaidSo, + SendError::Error { error, .. } => error, + })?; + + loop { + let seq = self.state.seq.fetch_add(1, Ordering::Relaxed); + // ensure waiter is enqueued before sending the request. + let wait = self.state.dispatcher.wait(seq); + pin_mut!(wait); + match wait.as_mut().enqueue().await.map_err(handle_wait_error) { + Ok(_) => {} + Err(RequestError::Reset(reset)) => return Err(reset), + Err(RequestError::SeqInUse) => { + // NOTE: yes, in theory, this loop *could* never terminate, + // if *all* sequence numbers have a currently-in-flight + // request. but, if you've somehow managed to spawn + // `usize::MAX` request tasks at the same time, and none of + // them have completed, you probably have worse problems... + tracing::trace!(seq, "sequence number in use, retrying..."); + continue; + } + }; + + // actually send the message... + permit.send(Request::new(seq, req)); + + return match wait.await.map_err(handle_wait_error) { + Ok(rsp) => Ok(rsp), + Err(RequestError::Reset(reset)) => Err(reset), + Err(RequestError::SeqInUse) => unreachable!( + "we should have already enqueued the waiter, so its \ + sequence number should be okay. this is a bug!" + ), + }; + } + } + + /// Shut down the client dispatcher for this `Client`. + /// + /// This will fail any outstanding `Request` futures, and reset the + /// connection. + pub fn shutdown(&self) { + tracing::debug!("shutting down client..."); + self.channel + .close_with_error(message::Reset::BecauseISaidSo); + self.dispatcher.close(); + } +} + +impl ReqRspService for S +where + S: Service, ServerMsg = Response>, + Req: 'static, + Rsp: 'static, +{ + type Request = Req; + type Response = Rsp; +} + +impl SharedState { + /// Run the client's dispatcher in the background until cancelled or the + /// connection is reset. + async fn dispatch(self: Arc, rx: Receiver, message::Reset>) { + loop { + let rsp = match rx.recv().await { + Ok(msg) => msg, + Err(reset) => { + let reset = match reset { + RecvError::Error(e) => e, + _ => message::Reset::BecauseISaidSo, + }; + + tracing::debug!(%reset, "client connection reset, shutting down..."); + rx.close_with_error(reset); + return; + } + }; + let seq = rsp.seq(); + let body = rsp.into_body(); + + tracing::trace!(seq, "dispatching response..."); + + match self.dispatcher.wake(&seq, body) { + WakeOutcome::Woke => { + tracing::trace!(seq, "dispatched response"); + } + WakeOutcome::Closed(_) => { + #[cfg(debug_assertions)] + unreachable!("the dispatcher should not be closed if it is still running..."); + } + WakeOutcome::NoMatch(_) => { + tracing::debug!(seq, "client no longer interested in request"); + } + }; + } + } +} diff --git a/source/kernel/src/registry/tests.rs b/source/kernel/src/registry/tests.rs index 74a22e12..6a593208 100644 --- a/source/kernel/src/registry/tests.rs +++ b/source/kernel/src/registry/tests.rs @@ -5,7 +5,7 @@ use crate::{comms, test_util::TestKernel, Kernel}; struct TestService; -impl RegisteredDriver for TestService { +impl Service for TestService { type Request = TestMessage; type Response = TestMessage; type Error = TestMessage; diff --git a/source/kernel/src/services/emb_display.rs b/source/kernel/src/services/emb_display.rs index 88391732..2040f55e 100644 --- a/source/kernel/src/services/emb_display.rs +++ b/source/kernel/src/services/emb_display.rs @@ -17,7 +17,7 @@ use uuid::Uuid; use crate::{ comms::oneshot::Reusable, mnemos_alloc::containers::HeapArray, - registry::{self, Envelope, KernelHandle, RegisteredDriver}, + registry::{self, Envelope, KernelHandle, Service}, Kernel, }; @@ -33,7 +33,7 @@ use crate::{ pub struct EmbDisplayService; // impl EmbDisplay -impl RegisteredDriver for EmbDisplayService { +impl Service for EmbDisplayService { type Request = Request; type Response = Response; type Error = FrameError; diff --git a/source/kernel/src/services/forth_spawnulator.rs b/source/kernel/src/services/forth_spawnulator.rs index 94cf3b60..13016331 100644 --- a/source/kernel/src/services/forth_spawnulator.rs +++ b/source/kernel/src/services/forth_spawnulator.rs @@ -43,9 +43,7 @@ use core::convert::Infallible; use crate::{ comms::oneshot::Reusable, forth::{self, Forth}, - registry::{ - self, known_uuids::kernel::FORTH_SPAWNULATOR, Envelope, KernelHandle, RegisteredDriver, - }, + registry::{self, known_uuids::kernel::FORTH_SPAWNULATOR, Envelope, KernelHandle, Service}, Kernel, }; use serde::{Deserialize, Serialize}; @@ -56,7 +54,7 @@ use uuid::Uuid; //////////////////////////////////////////////////////////////////////////////// pub struct SpawnulatorService; -impl RegisteredDriver for SpawnulatorService { +impl Service for SpawnulatorService { type Request = Request; type Response = Response; type Error = Infallible; diff --git a/source/kernel/src/services/i2c.rs b/source/kernel/src/services/i2c.rs index da7b8f46..2c7d2ce7 100644 --- a/source/kernel/src/services/i2c.rs +++ b/source/kernel/src/services/i2c.rs @@ -97,7 +97,7 @@ use crate::{ oneshot::{self, Reusable}, }, mnemos_alloc::containers::FixedVec, - registry::{self, known_uuids, Envelope, KernelHandle, RegisteredDriver}, + registry::{self, known_uuids, Envelope, KernelHandle, Service}, Kernel, }; use core::{convert::Infallible, fmt}; @@ -114,7 +114,7 @@ use uuid::Uuid; /// using this service. pub struct I2cService; -impl RegisteredDriver for I2cService { +impl Service for I2cService { type Request = StartTransaction; type Response = Transaction; type Error = core::convert::Infallible; diff --git a/source/kernel/src/services/keyboard/mod.rs b/source/kernel/src/services/keyboard/mod.rs index 044097b5..59603afb 100644 --- a/source/kernel/src/services/keyboard/mod.rs +++ b/source/kernel/src/services/keyboard/mod.rs @@ -19,7 +19,7 @@ use crate::{ kchannel::{self, KChannel}, oneshot, }, - registry::{self, known_uuids, RegisteredDriver}, + registry::{self, known_uuids, KernelHandle, UserService}, Kernel, }; @@ -32,12 +32,11 @@ pub mod mux; pub struct KeyboardService; -impl RegisteredDriver for KeyboardService { - type Request = Subscribe; - type Response = Subscribed; - type Error = KeyboardError; - type Hello = (); - type ConnectError = core::convert::Infallible; +impl UserService for KeyboardService { + type ClientMsg = (); + type ServerMsg = KeyEvent; + type Hello = Subscribe; + type ConnectError = KeyboardError; const UUID: Uuid = known_uuids::kernel::KEYBOARD; } @@ -52,10 +51,6 @@ pub struct Subscribe { buffer_capacity: usize, } -pub struct Subscribed { - rx: kchannel::KConsumer, -} - #[derive(Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] pub enum KeyboardError { NoKeyboards, @@ -83,27 +78,19 @@ impl Subscribe { } } -impl Subscribed { - pub fn new(Subscribe { buffer_capacity }: Subscribe) -> (kchannel::KProducer, Self) { - let (tx, rx) = KChannel::new(buffer_capacity).split(); - (tx, Self { rx }) - } -} - //////////////////////////////////////////////////////////////////////////////// // Client types //////////////////////////////////////////////////////////////////////////////// /// A client that receives [`KeyEvent`]s from a [`KeyboardService`]. pub struct KeyClient { - rx: kchannel::KConsumer, + handle: KernelHandle, } #[derive(Debug)] pub enum FromRegistryError { Connect(registry::ConnectError), Service(KeyboardError), - Request(registry::OneshotRequestError), } impl KeyClient { @@ -117,7 +104,7 @@ impl KeyClient { ) -> Result { let handle = kernel .registry() - .connect::(()) + .connect::(subscribe) .await .map_err(FromRegistryError::Connect)?; Self::from_handle(subscribe, handle).await @@ -141,20 +128,6 @@ impl KeyClient { Self::from_handle(subscribe, handle).await } - async fn from_handle( - subscribe: Subscribe, - mut handle: registry::KernelHandle, - ) -> Result { - let reply = oneshot::Reusable::new_async().await; - let Subscribed { rx } = handle - .request_oneshot(subscribe, &reply) - .await - .map_err(FromRegistryError::Request)? - .body - .map_err(FromRegistryError::Service)?; - Ok(Self { rx }) - } - /// Returns the next [`KeyEvent`] received from the [`KeyboardService`]. /// /// # Returns diff --git a/source/kernel/src/services/keyboard/mux.rs b/source/kernel/src/services/keyboard/mux.rs index 21cdcb66..ff674ff9 100644 --- a/source/kernel/src/services/keyboard/mux.rs +++ b/source/kernel/src/services/keyboard/mux.rs @@ -7,21 +7,18 @@ //! [`KeyboardService`] implementation). Keyboard drivers use the //! [`KeyboardMuxService`] to publish events from their keyboards to the //! multiplexer, which broadcasts those events to all clients. -use super::{key_event, KeyEvent, KeyboardError, KeyboardService, Subscribed}; +use super::{key_event, KeyEvent, KeyboardError, KeyboardService}; use crate::{ comms::{ bbq, kchannel::{KChannel, KProducer}, - oneshot::Reusable, + mpsc, }, mnemos_alloc::containers::FixedVec, - registry::{ - self, known_uuids, listener, Envelope, KernelHandle, OneshotRequestError, RegisteredDriver, - }, + registry::{self, known_uuids, KernelHandle, KernelSendError, Listener, Reset, UserService}, services::serial_mux, Kernel, }; -use core::convert::Infallible; use futures::{future, FutureExt}; use serde::{Deserialize, Serialize}; use tracing::Level; @@ -34,12 +31,11 @@ use uuid::Uuid; /// Service definition for the keyboard multiplexer. pub struct KeyboardMuxService; -impl RegisteredDriver for KeyboardMuxService { - type Request = Publish; - type Response = Response; - type Error = core::convert::Infallible; +impl UserService for KeyboardMuxService { + type ClientMsg = Publish; + type ServerMsg = (); type Hello = (); - type ConnectError = core::convert::Infallible; + type ConnectError = (); const UUID: Uuid = known_uuids::kernel::KEYBOARD_MUX; } @@ -48,7 +44,7 @@ impl RegisteredDriver for KeyboardMuxService { // Message and Error Types //////////////////////////////////////////////////////////////////////////////// -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] pub struct Publish(KeyEvent); pub struct Response { @@ -66,7 +62,6 @@ pub struct Response { /// [`KeyboardMuxClient::from_registry`]. pub struct KeyboardMuxClient { handle: KernelHandle, - reply: Reusable>>, } impl KeyboardMuxClient { @@ -78,10 +73,7 @@ impl KeyboardMuxClient { kernel: &'static Kernel, ) -> Result> { let handle = kernel.registry().connect::(()).await?; - Ok(Self { - handle, - reply: Reusable::new_async().await, - }) + Ok(Self { handle }) } /// Obtain an `KeyboardMuxClient` @@ -97,21 +89,15 @@ impl KeyboardMuxClient { .registry() .try_connect::(()) .await?; - Ok(Self { - handle, - reply: Reusable::new_async().await, - }) + Ok(Self { handle }) } pub async fn publish_key( &mut self, event: impl Into, - ) -> Result<(), OneshotRequestError> { + ) -> Result<(), KernelSendError> { let event = event.into(); - let _ = self - .handle - .request_oneshot(Publish(event), &self.reply) - .await?; + let _ = self.handle.send(Publish(event)).await?; Ok(()) } } @@ -128,8 +114,10 @@ impl KeyboardMuxClient { /// implementation is used for tasks that consume keyboard input to subscribe to /// key events. pub struct KeyboardMuxServer { - key_rx: listener::RequestStream, - sub_rx: listener::RequestStream, + key_rx: mpsc::Receiver, + pub_sock: Listener, + sub_sock: Listener, + key_pipe: mpsc::TrickyPipe, subscriptions: FixedVec>, settings: KeyboardMuxSettings, sermux_port: Option, @@ -139,10 +127,10 @@ pub struct KeyboardMuxServer { pub struct KeyboardMuxSettings { #[serde(default)] pub enabled: bool, - #[serde(default = "KeyboardMuxSettings::default_buffer_capacity")] - pub max_keyboards: usize, #[serde(default = "KeyboardMuxSettings::default_max_keyboards")] - pub buffer_capacity: usize, + pub max_keyboards: usize, + #[serde(default = "KeyboardMuxSettings::default_buffer_capacity")] + pub buffer_capacity: u8, #[serde(default = "KeyboardMuxSettings::default_sermux_port")] pub sermux_port: Option, } @@ -174,20 +162,19 @@ impl KeyboardMuxServer { ) -> Result<(), RegistrationError> { tracing::info!(?settings, "Registering keyboard mux"); - let key_rx = kernel + let pub_sock = kernel .registry() - .bind_konly::(settings.buffer_capacity) + .bind::(settings.buffer_capacity) .await - .map_err(RegistrationError::RegisterMux)? - .into_request_stream(settings.buffer_capacity) - .await; - let sub_rx = kernel + .map_err(RegistrationError::RegisterMux)?; + let sub_sock = kernel .registry() - .bind_konly::(8) + .bind::(8) .await - .map_err(RegistrationError::RegisterKeyboard)? - .into_request_stream(8) - .await; + .map_err(RegistrationError::RegisterKeyboard)?; + // TODO(eliza): async + let key_pipe = mpsc::TrickyPipe::new(settings.buffer_capacity); + let key_rx = key_pipe.receiver().unwrap(); let subscriptions = FixedVec::new(settings.max_keyboards).await; let sermux_port = if let Some(port) = settings.sermux_port { @@ -197,7 +184,7 @@ impl KeyboardMuxServer { tracing::info!("opening Serial Mux port {port}"); Some( client - .open_port(port, settings.buffer_capacity) + .open_port(port, settings.buffer_capacity as usize) .await // TODO(eliza): this could be a custom RegistrationError variant... .expect("failed to acquire serial mux keyboard port!"), @@ -209,7 +196,9 @@ impl KeyboardMuxServer { kernel .spawn( Self { - sub_rx, + pub_sock, + sub_sock, + key_pipe, key_rx, subscriptions, settings, @@ -283,11 +272,11 @@ impl KeyboardMuxServer { } impl KeyboardMuxSettings { - pub const DEFAULT_BUFFER_CAPACITY: usize = 32; + pub const DEFAULT_BUFFER_CAPACITY: u8 = 32; pub const DEFAULT_MAX_KEYBOARDS: usize = 8; pub const DEFAULT_SERMUX_PORT: Option = Some(serial_mux::WellKnown::PseudoKeyboard as u16); - const fn default_buffer_capacity() -> usize { + const fn default_buffer_capacity() -> u8 { Self::DEFAULT_BUFFER_CAPACITY } const fn default_max_keyboards() -> usize { diff --git a/source/kernel/src/services/serial_mux.rs b/source/kernel/src/services/serial_mux.rs index 4262e85d..d6dd5de7 100644 --- a/source/kernel/src/services/serial_mux.rs +++ b/source/kernel/src/services/serial_mux.rs @@ -8,7 +8,7 @@ use crate::comms::bbq::GrantR; use crate::{ comms::{bbq, oneshot::Reusable}, - registry::{self, Envelope, KernelHandle, Message, RegisteredDriver}, + registry::{self, Envelope, KernelHandle, Message, Service}, services::simple_serial::{SimpleSerialClient, SimpleSerialService}, Kernel, }; @@ -29,7 +29,7 @@ pub use sermux_proto::WellKnown; /// SerialMux is the registered driver type pub struct SerialMuxService; -impl RegisteredDriver for SerialMuxService { +impl Service for SerialMuxService { type Request = Request; type Response = Response; type Error = SerialMuxError; diff --git a/source/kernel/src/services/simple_serial.rs b/source/kernel/src/services/simple_serial.rs index 3a25f5f9..0768a237 100644 --- a/source/kernel/src/services/simple_serial.rs +++ b/source/kernel/src/services/simple_serial.rs @@ -11,7 +11,7 @@ use crate::comms::bbq::BidiHandle; use crate::comms::oneshot::Reusable; use crate::Kernel; -use crate::registry::{self, known_uuids, Envelope, KernelHandle, RegisteredDriver, ReplyTo}; +use crate::registry::{self, known_uuids, KernelHandle, Service}; //////////////////////////////////////////////////////////////////////////////// // Service Definition @@ -19,17 +19,16 @@ use crate::registry::{self, known_uuids, Envelope, KernelHandle, RegisteredDrive pub struct SimpleSerialService; -impl RegisteredDriver for SimpleSerialService { - type Request = Request; - type Response = Response; - type Error = SimpleSerialError; +impl Service for SimpleSerialService { + type ClientMsg = Request; + type ServerMsg = Result; // TODO(eliza): maybe we should do a v2 of this trait where the `Hello` // message is `GetPort` and the request/response types are serial frames? // but we can't do this until services can be bidi pipes instead of req // channels... type Hello = (); - type ConnectError = core::convert::Infallible; + type ConnectError = SimpleSerialError; const UUID: Uuid = known_uuids::kernel::SIMPLE_SERIAL_PORT; } @@ -56,47 +55,31 @@ pub enum SimpleSerialError { //////////////////////////////////////////////////////////////////////////////// pub struct SimpleSerialClient { - kprod: KernelHandle, - rosc: Reusable>>, + chan: KernelHandle, } impl SimpleSerialClient { pub async fn from_registry( kernel: &'static Kernel, ) -> Result> { - let kprod = kernel.registry().connect::(()).await?; + let chan = kernel.registry().connect::(()).await?; - Ok(SimpleSerialClient { - kprod, - rosc: Reusable::new_async().await, - }) + Ok(SimpleSerialClient { chan }) } pub async fn from_registry_no_retry( kernel: &'static Kernel, ) -> Result> { - let kprod = kernel + let chan = kernel .registry() .try_connect::(()) .await?; - Ok(SimpleSerialClient { - kprod, - rosc: Reusable::new_async().await, - }) + Ok(SimpleSerialClient { chan }) } pub async fn get_port(&mut self) -> Option { - self.kprod - .send( - Request::GetPort, - ReplyTo::OneShot(self.rosc.sender().await.ok()?), - ) - .await - .ok()?; - let resp = self.rosc.receive().await.ok()?; - - let Response::PortHandle { handle } = resp.body.ok()?; - Some(handle) + self.chan.send(Request::GetPort).await.ok()?; + self.chan.recv().await.ok()?.ok() } }