diff --git a/Cargo.lock b/Cargo.lock index 2dc399d..e1b9bc3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,23 +19,23 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.12", + "getrandom 0.2.14", "once_cell", "version_check", "zerocopy", @@ -43,9 +43,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -58,9 +58,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" @@ -79,9 +79,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.11" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", @@ -93,9 +93,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" [[package]] name = "arrayvec" @@ -156,7 +156,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -167,7 +167,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -179,21 +179,11 @@ dependencies = [ "num-traits", ] -[[package]] -name = "atomic-write-file" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcdbedc2236483ab103a53415653d6b4442ea6141baf1ffa85df29635e88436" -dependencies = [ - "nix 0.27.1", - "rand 0.8.5", -] - [[package]] name = "autocfg" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "axum" @@ -255,9 +245,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", @@ -305,9 +295,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" dependencies = [ "serde", ] @@ -335,9 +325,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667" +checksum = "0901fc8eb0aca4c83be0106d6f2db17d86a08dfc2c25f0e84464bf381158add6" dependencies = [ "borsh-derive", "cfg_aliases", @@ -345,29 +335,29 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd" +checksum = "51670c3aa053938b0ee3bd67c3817e471e626151131b934038e83c5bf8de48f5" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", "syn_derive", ] [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytecheck" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -376,9 +366,9 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ "proc-macro2", "quote", @@ -393,18 +383,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cc" -version = "1.0.83" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" [[package]] name = "cfg-if" @@ -428,7 +415,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] @@ -455,9 +442,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.18" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" dependencies = [ "clap_builder", "clap_derive", @@ -465,9 +452,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.18" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", @@ -477,21 +464,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" @@ -542,9 +529,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.0.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" dependencies = [ "crc-catalog", ] @@ -566,9 +553,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" dependencies = [ "crossbeam-utils", ] @@ -622,9 +609,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", "pem-rfc7468", @@ -672,24 +659,24 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "ed25519-compact" -version = "2.0.6" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a667e6426df16c2ac478efa4a439d0e674cba769c5556e8cf221739251640c8c" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", ] [[package]] name = "either" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" dependencies = [ "serde", ] @@ -708,15 +695,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "erased-serde" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55d05712b2d8d88102bc9868020c9e5c7a1f5527c452b9b97450a1d006140ba7" -dependencies = [ - "serde", -] - [[package]] name = "errno" version = "0.3.8" @@ -746,15 +724,15 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "fastrand" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" [[package]] name = "fiat-crypto" -version = "0.2.5" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" +checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" [[package]] name = "file-id" @@ -784,7 +762,7 @@ checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "windows-sys 0.52.0", ] @@ -923,7 +901,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -979,9 +957,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", "js-sys", @@ -1027,7 +1005,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", ] [[package]] @@ -1036,7 +1014,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.11", "allocator-api2", ] @@ -1058,11 +1036,17 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -1116,7 +1100,6 @@ dependencies = [ "hyper", "hyper-tls", "hyper-util", - "log", "migration", "pasetors", "prost", @@ -1137,9 +1120,9 @@ dependencies = [ [[package]] name = "http" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -1158,12 +1141,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -1183,9 +1166,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.1.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" dependencies = [ "bytes", "futures-channel", @@ -1197,6 +1180,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "smallvec", "tokio", "want", ] @@ -1239,9 +1223,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1272,9 +1256,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -1288,7 +1272,7 @@ checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -1322,33 +1306,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -1384,9 +1359,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libm" @@ -1407,15 +1382,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1423,13 +1398,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" -dependencies = [ - "serde", - "value-bag", -] +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "matchers" @@ -1458,9 +1429,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memoffset" @@ -1493,9 +1464,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] @@ -1514,9 +1485,9 @@ dependencies = [ [[package]] name = "multimap" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" @@ -1550,17 +1521,6 @@ dependencies = [ "pin-utils", ] -[[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", - "libc", -] - [[package]] name = "nom" version = "7.1.3" @@ -1577,7 +1537,7 @@ version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "crossbeam-channel", "filetime", "fsevent-sys", @@ -1641,21 +1601,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-iter" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" dependencies = [ "autocfg", "num-integer", @@ -1664,9 +1629,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", "libm", @@ -1699,11 +1664,11 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "openssl" -version = "0.10.62" +version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "cfg-if", "foreign-types", "libc", @@ -1720,7 +1685,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -1731,9 +1696,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.98" +version = "0.9.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" dependencies = [ "cc", "libc", @@ -1778,11 +1743,11 @@ version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -1793,9 +1758,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" dependencies = [ "lock_api", "parking_lot_core", @@ -1803,15 +1768,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.1", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] @@ -1831,7 +1796,7 @@ checksum = "6b36d47c66f2230dd1b7143d9afb2b4891879020210eddf2ccb624e529b96dba" dependencies = [ "ct-codecs", "ed25519-compact", - "getrandom 0.2.12", + "getrandom 0.2.14", "orion", "subtle", "zeroize", @@ -1908,29 +1873,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -1961,9 +1926,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "portable-pty" @@ -1978,7 +1943,7 @@ dependencies = [ "lazy_static", "libc", "log", - "nix 0.25.1", + "nix", "serial", "shared_library", "shell-words", @@ -2000,21 +1965,21 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "prettyplease" -version = "0.2.16" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" dependencies = [ "proc-macro2", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] name = "proc-macro-crate" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b2685dd208a3771337d8d386a89840f0f43cd68be8dae90a5f8c2384effc9cd" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit 0.21.0", + "toml_edit 0.21.1", ] [[package]] @@ -2043,9 +2008,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" dependencies = [ "unicode-ident", ] @@ -2062,13 +2027,13 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +checksum = "80b776a1b2dc779f5ee0641f8ade0125bc1298dd41a9a0c16d8bd57b42d222b1" dependencies = [ "bytes", - "heck", - "itertools 0.10.5", + "heck 0.5.0", + "itertools", "log", "multimap", "once_cell", @@ -2077,9 +2042,8 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.48", + "syn 2.0.60", "tempfile", - "which", ] [[package]] @@ -2089,17 +2053,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" dependencies = [ "anyhow", - "itertools 0.12.0", + "itertools", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] name = "prost-types" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" dependencies = [ "prost", ] @@ -2135,9 +2099,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -2207,7 +2171,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", ] [[package]] @@ -2228,16 +2192,25 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.5.0", +] + [[package]] name = "regex" -version = "1.10.2" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", ] [[package]] @@ -2251,13 +2224,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax 0.8.3", ] [[package]] @@ -2268,38 +2241,39 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rend" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ "bytecheck", ] [[package]] name = "ring" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", - "getrandom 0.2.12", + "cfg-if", + "getrandom 0.2.14", "libc", "spin 0.9.8", "untrusted", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "rkyv" -version = "0.7.43" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" dependencies = [ "bitvec", "bytecheck", @@ -2315,9 +2289,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.43" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" dependencies = [ "proc-macro2", "quote", @@ -2356,9 +2330,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.33.1" +version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4" +checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" dependencies = [ "arrayvec", "borsh", @@ -2378,11 +2352,11 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", @@ -2391,9 +2365,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.11" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fecbfb7b1444f477b345853b1fce097a2c6fb637b2bfb87e6bc5db0f043fae4" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "ring", "rustls-webpki", @@ -2421,15 +2395,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "same-file" @@ -2471,18 +2445,18 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] name = "sea-orm" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6632f499b80cc6aaa781b302e4c9fae663e0e3dcf2640e9d80034d5b10731efe" +checksum = "c8814e37dc25de54398ee62228323657520b7f29713b8e238649385dbe473ee0" dependencies = [ "async-stream", "async-trait", @@ -2508,9 +2482,9 @@ dependencies = [ [[package]] name = "sea-orm-cli" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465ea2308d4716837e9af4a2cff8e14c28135867a580bb93e9e03d408a3a6afb" +checksum = "620bc560062ae251b1366bde43b3f1508445cab5c2c8cbdb397034638ab1b357" dependencies = [ "chrono", "clap", @@ -2525,23 +2499,23 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec13bfb4c4aef208f68dbea970dd40d13830c868aa8dcb4e106b956e6bb4f2fa" +checksum = "5e115c6b078e013aa963cc2d38c196c2c40b05f03d0ac872fe06b6e0d5265603" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "sea-bae", - "syn 2.0.48", + "syn 2.0.60", "unicode-ident", ] [[package]] name = "sea-orm-migration" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac734b6e5610c2764056cc8495fbc293cd1c8ebe084fdfb74c3b0cdaaff9bb92" +checksum = "ee8269bc6ff71afd6b78aa4333ac237a69eebd2cdb439036291e64fb4b8db23c" dependencies = [ "async-trait", "clap", @@ -2594,10 +2568,10 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25a82fcb49253abcb45cdcb2adf92956060ec0928635eb21b4f7a6d8f25ab0bc" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", "thiserror", ] @@ -2618,7 +2592,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f686050f76bffc4f635cda8aea6df5548666b830b52387e8bc7de11056d11e" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "syn 1.0.109", @@ -2632,9 +2606,9 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.9.2" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -2645,9 +2619,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" dependencies = [ "core-foundation-sys", "libc", @@ -2655,38 +2629,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.197" +version = "1.0.199" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.199" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_fmt" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" -dependencies = [ - "serde", + "syn 2.0.60", ] [[package]] name = "serde_json" -version = "1.0.115" +version = "1.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" dependencies = [ "itoa", "ryu", @@ -2695,9 +2660,9 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ "itoa", "serde", @@ -2838,9 +2803,9 @@ checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -2863,9 +2828,9 @@ checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" [[package]] name = "similar" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" +checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" [[package]] name = "siphasher" @@ -2884,18 +2849,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2929,16 +2894,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" dependencies = [ - "itertools 0.12.0", + "itertools", "nom", "unicode_categories", ] [[package]] name = "sqlx" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba03c279da73694ef99763320dea58b51095dfe87d001b1d4b5fe78ba8763cf" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" dependencies = [ "sqlx-core", "sqlx-macros", @@ -2949,11 +2914,11 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.11", "atoi", "bigdecimal", "byteorder", @@ -2961,7 +2926,6 @@ dependencies = [ "chrono", "crc", "crossbeam-queue", - "dotenvy", "either", "event-listener", "futures-channel", @@ -2997,9 +2961,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89961c00dc4d7dffb7aee214964b065072bff69e36ddb9e2c107541f75e4f2a5" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" dependencies = [ "proc-macro2", "quote", @@ -3010,14 +2974,13 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0bd4519486723648186a08785143599760f7cc81c52334a55d6a83ea1e20841" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" dependencies = [ - "atomic-write-file", "dotenvy", "either", - "heck", + "heck 0.4.1", "hex", "once_cell", "proc-macro2", @@ -3037,14 +3000,14 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37195395df71fd068f6e2082247891bc11e3289624bbc776a0cdfa1ca7f1ea4" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" dependencies = [ "atoi", "base64 0.21.7", "bigdecimal", - "bitflags 2.4.1", + "bitflags 2.5.0", "byteorder", "bytes", "chrono", @@ -3084,14 +3047,14 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ac0ac3b7ccd10cc96c7ab29791a7dd236bd94021f31eec7ba3d46a74aa1c24" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" dependencies = [ "atoi", "base64 0.21.7", "bigdecimal", - "bitflags 2.4.1", + "bitflags 2.5.0", "byteorder", "chrono", "crc", @@ -3115,7 +3078,6 @@ dependencies = [ "rust_decimal", "serde", "serde_json", - "sha1", "sha2", "smallvec", "sqlx-core", @@ -3129,9 +3091,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "210976b7d948c7ba9fced8ca835b11cbb2d677c59c79de41ac0d397e14547490" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" dependencies = [ "atoi", "chrono", @@ -3178,9 +3140,9 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" @@ -3194,84 +3156,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" -[[package]] -name = "sval" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1604e9ab506f4805bc62d2868c6d20f23fa6ced4c7cfe695a1d20589ba5c63d0" - -[[package]] -name = "sval_buffer" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2831b6451148d344f612016d4277348f7721b78a0869a145fd34ef8b06b3fa2e" -dependencies = [ - "sval", - "sval_ref", -] - -[[package]] -name = "sval_dynamic" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238ac5832a23099a413ffd22e66f7e6248b9af4581b64c758ca591074be059fc" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8474862431bac5ac7aee8a12597798e944df33f489c340e17e886767bda0c4e" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f348030cc3d2a11eb534145600601f080cf16bf9ec0783efecd2883f14c21e" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6659c3f6be1e5e99dc7c518877f48a8a39088ace2504b046db789bd78ce5969d" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829ad319bd82d0da77be6f3d547623686c453502f8eebdeb466cfa987972bd28" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9da6c3efaedf8b8c0861ec5343e8e8c51d838f326478623328bd8728b79bca" -dependencies = [ - "serde", - "sval", - "sval_nested", -] - [[package]] name = "syn" version = "1.0.109" @@ -3285,9 +3169,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" dependencies = [ "proc-macro2", "quote", @@ -3303,7 +3187,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -3326,13 +3210,12 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", "rustix", "windows-sys 0.52.0", ] @@ -3358,29 +3241,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -3388,12 +3271,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", @@ -3408,10 +3292,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] @@ -3432,9 +3317,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" dependencies = [ "backtrace", "bytes", @@ -3457,7 +3342,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -3472,9 +3357,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -3516,7 +3401,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.9", + "toml_edit 0.22.12", ] [[package]] @@ -3530,26 +3415,26 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow 0.5.34", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.9" +version = "0.22.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" +checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.1", + "winnow 0.6.7", ] [[package]] @@ -3600,7 +3485,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] @@ -3685,9 +3570,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" @@ -3697,18 +3582,18 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode_categories" @@ -3753,9 +3638,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "serde", ] @@ -3766,42 +3651,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "value-bag" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cdbaf5e132e593e9fc1de6a15bbec912395b11fb9719e061cf64f804524c503" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92cad98b1b18d06b6f38b3cd04347a9d7a3a0111441a061f71377fb6740437e4" -dependencies = [ - "erased-serde", - "serde", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc7271d6b3bf58dd2e610a601c0e159f271ffdb7fbb21517c40b52138d64f8e" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] - [[package]] name = "vcpkg" version = "0.2.15" @@ -3816,9 +3665,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -3853,9 +3702,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3863,24 +3712,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3888,40 +3737,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "webpki-roots" -version = "0.25.3" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "whoami" @@ -3929,7 +3766,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" dependencies = [ - "redox_syscall", + "redox_syscall 0.4.1", "wasite", ] @@ -3951,11 +3788,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -3970,7 +3807,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] @@ -3988,7 +3825,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] @@ -4008,17 +3845,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "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", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -4029,9 +3867,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -4041,9 +3879,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -4053,9 +3891,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" @@ -4065,9 +3909,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -4077,9 +3921,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -4089,9 +3933,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -4101,24 +3945,24 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" -version = "0.5.34" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] name = "winnow" -version = "0.6.1" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d90f4e0f530c4c69f62b80d839e9ef3855edc9cba471a160c4d692deed62b401" +checksum = "14b9415ee827af173ebb3f15f9083df5a122eb93572ec28741fb153356ea2578" dependencies = [ "memchr", ] @@ -4158,7 +4002,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.60", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5c90e35..d5fe515 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,6 @@ tracing-futures = "0.2.5" tracing-subscriber = { version = "0.3.18", features = ["tracing-log"]} futures-channel = "0.3.26" futures-util = "0.3.26" -log = { version = "0.4.17", features = ["kv_unstable", "kv_unstable_serde"] } prost = "0.12.4" prost-types = "0.12.3" serde_json = "1.0.115" diff --git a/services/src/chat.rs b/services/src/chat.rs index 30f12e9..a6c75a6 100644 --- a/services/src/chat.rs +++ b/services/src/chat.rs @@ -10,7 +10,7 @@ use async_trait::async_trait; use tracing::warn; impl Chat { - pub fn new() -> Chat { + pub const fn new() -> Chat { Chat { history: vec![] } } } @@ -30,14 +30,12 @@ impl traits::Service for Chat { match body { goval::command::Body::ChatMessage(msg) => { - info.send(message, SendSessions::EveryoneExcept(session)) - .await?; + info.send(message, SendSessions::EveryoneExcept(session))?; self.history.push(msg); Ok(None) } goval::command::Body::ChatTyping(_) => { - info.send(message, SendSessions::EveryoneExcept(session)) - .await?; + info.send(message, SendSessions::EveryoneExcept(session))?; Ok(None) } _ => { diff --git a/services/src/dotreplit.rs b/services/src/dotreplit.rs index 1dfb616..d8600b2 100644 --- a/services/src/dotreplit.rs +++ b/services/src/dotreplit.rs @@ -22,7 +22,7 @@ impl traits::Service for DotReplit { match body { goval::command::Body::DotReplitGetRequest(_) => { let mut dotreplit = goval::Command::default(); - let inner: goval::DotReplit = _info.dotreplit.read().await.clone().into(); + let inner: goval::DotReplit = (&*_info.dotreplit.read().await).into(); dotreplit.body = Some(goval::command::Body::DotReplitGetResponse( goval::DotReplitGetResponse { diff --git a/services/src/exec.rs b/services/src/exec.rs index ff0a463..12a56c0 100644 --- a/services/src/exec.rs +++ b/services/src/exec.rs @@ -32,8 +32,7 @@ impl traits::Service for Exec { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; return Ok(None); } @@ -45,19 +44,17 @@ impl traits::Service for Exec { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; self.running = true; self.current_ref = message.r#ref; - Proc::new(exec.args, info.id, info.sender.clone(), Some(exec.env)).await?; + Proc::new(exec.args, info.id, info.sender.clone(), Some(&exec.env))?; info.send( goval::Command { body: Some(goval::command::Body::State(goval::State::Running.into())), ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; } } @@ -78,8 +75,7 @@ impl traits::Service for Exec { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; } else { info.send( goval::Command { @@ -90,8 +86,7 @@ impl traits::Service for Exec { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; } self.current_ref = String::new(); @@ -102,13 +97,12 @@ impl traits::Service for Exec { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; if !self.queue.is_empty() { self.running = true; let item = self.queue.swap_remove(0); - Proc::new(item.0.args, info.id, info.sender.clone(), Some(item.0.env)).await?; + Proc::new(item.0.args, info.id, info.sender.clone(), Some(&item.0.env))?; self.current_ref = item.1; info.send( goval::Command { @@ -116,8 +110,7 @@ impl traits::Service for Exec { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; } Ok(()) diff --git a/services/src/fsevents.rs b/services/src/fsevents.rs index 00738ac..e2abc9e 100644 --- a/services/src/fsevents.rs +++ b/services/src/fsevents.rs @@ -37,23 +37,20 @@ impl traits::Service for FSEvents { Some(body) => body, }; - match body { - goval::command::Body::SubscribeFile(subscribe) => { - let mut files = vec![]; - for file in subscribe.files { - files.push(file.path); - } - - self.watcher.watch(files).await?; - Ok(Some(goval::Command { - body: Some(goval::command::Body::Ok(goval::Ok {})), - ..Default::default() - })) - } - _ => { - warn!(cmd = ?message, "Unknown fs event command"); - Ok(None) + if let goval::command::Body::SubscribeFile(subscribe) = body { + let mut files = vec![]; + for file in subscribe.files { + files.push(file.path); } + + self.watcher.watch(files)?; + Ok(Some(goval::Command { + body: Some(goval::command::Body::Ok(goval::Ok {})), + ..Default::default() + })) + } else { + warn!(cmd = ?message, "Unknown fs event command"); + Ok(None) } } @@ -114,13 +111,12 @@ impl traits::Service for FSEvents { ..Default::default() }, crate::SendSessions::Everyone, - ) - .await?; + )?; Ok(()) } async fn shutdown(self: Box, _info: &super::types::ChannelInfo) -> Result<()> { - self.watcher.shutdown().await; + self.watcher.shutdown(); Ok(()) } } diff --git a/services/src/gcsfiles.rs b/services/src/gcsfiles.rs index bbaddfc..6d8b3a8 100644 --- a/services/src/gcsfiles.rs +++ b/services/src/gcsfiles.rs @@ -46,10 +46,10 @@ impl traits::Service for GCSFiles { } } - let mut ret = goval::Command::default(); + let mut ret_cmd = goval::Command::default(); let _inner = goval::Files { files: res }; - ret.body = Some(goval::command::Body::Files(_inner)); - Ok(Some(ret)) + ret_cmd.body = Some(goval::command::Body::Files(_inner)); + Ok(Some(ret_cmd)) } goval::command::Body::Mkdir(dir) => { fs::create_dir_all(dir.path).await?; @@ -107,9 +107,9 @@ impl traits::Service for GCSFiles { goval::command::Body::Remove(file) => { let stat = fs::metadata(&file.path).await?; if stat.is_dir() { - fs::remove_dir_all(&file.path).await? + fs::remove_dir_all(&file.path).await?; } else { - fs::remove_file(&file.path).await? + fs::remove_file(&file.path).await?; } let ret = goval::Command { diff --git a/services/src/git.rs b/services/src/git.rs index 6147f3e..2667ce1 100644 --- a/services/src/git.rs +++ b/services/src/git.rs @@ -82,8 +82,7 @@ impl traits::Service for Git { )), ..Default::default() }; - info.send(token_req, crate::SendSessions::Only(session)) - .await?; + info.send(token_req, crate::SendSessions::Only(session))?; self.replspace.insert(nonce, respond); } @@ -98,8 +97,7 @@ impl traits::Service for Git { )), ..Default::default() }; - info.send(token_req, crate::SendSessions::Only(session)) - .await?; + info.send(token_req, crate::SendSessions::Only(session))?; self.replspace.insert(nonce, respond); } diff --git a/services/src/lib.rs b/services/src/lib.rs index 71dcccb..04e7736 100644 --- a/services/src/lib.rs +++ b/services/src/lib.rs @@ -1,3 +1,25 @@ +#![feature(extract_if)] +#![warn( + clippy::pedantic, + clippy::unwrap_used, + clippy::redundant_clone, + clippy::missing_const_for_fn +)] +#![allow( + clippy::module_name_repetitions, + clippy::must_use_candidate, + clippy::return_self_not_must_use, + + // TODO: investigate performance impact of i__::try_from + clippy::cast_possible_truncation, + clippy::cast_possible_wrap, + + // TODO: remove and fix these + clippy::missing_errors_doc, + clippy::missing_panics_doc, + clippy::too_many_lines +)] + mod chat; mod dotreplit; mod exec; @@ -24,7 +46,7 @@ pub use types::*; pub struct Channel { info: ChannelInfo, - _inner: Box, + inner: Box, } // Public functions @@ -54,27 +76,25 @@ impl Channel { "presence" => Box::new(presence::Presence::new()), "ot" => Box::new(ot::OT::new(sender).await?), "snapshot" => Box::new(snapshot::Snapshot {}), - "output" => Box::new(output::Output::new().await), - "shell" => Box::new(shell::Shell::new(&info).await?), + "output" => Box::new(output::Output::new()), + "shell" => Box::new(shell::Shell::new(&info)?), "toolchain" => Box::new(toolchain::Toolchain {}), "git" => Box::new(git::Git::new()), "exec" => Box::new(exec::Exec::new()), "dotreplit" => Box::new(dotreplit::DotReplit {}), "fsevents" => Box::new(fsevents::FSEvents::new(sender).await?), - "audio" => Box::new(stub::Stub {}), // Will never be supported - "null" => Box::new(stub::Stub {}), // This channel never does anything - "open" => Box::new(stub::Stub {}), // Stub until infra is set up to handle this + "audio" | "null" => Box::new(stub::Stub {}), // Audio will never be supported and null does nothing _ => return Err(format_err!("Unknown service: {}", service)), }; Ok(Channel { info, - _inner: channel, + inner: channel, }) } pub async fn start(mut self, mut read: tokio::sync::mpsc::UnboundedReceiver) { - if let Err(err) = self._inner.open(&self.info).await { + if let Err(err) = self.inner.open(&self.info).await { error!(%err, "Error encountered in Service::open"); } @@ -86,24 +106,22 @@ impl Channel { ChannelMessage::Detach(session) => self.detach(session).await, ChannelMessage::IPC(ipc) => self.message(ipc.command, ipc.session).await, ChannelMessage::ProcessDead(exit_code) => { - self._inner.proccess_died(&self.info, exit_code).await + self.inner.proccess_died(&self.info, exit_code).await } ChannelMessage::Replspace(session, msg, respond) => { - self._inner + self.inner .replspace(&self.info, msg, session, respond) .await } - ChannelMessage::Shutdown => match self._inner.shutdown(&self.info).await { - Ok(_) => break, + ChannelMessage::Shutdown => match self.inner.shutdown(&self.info).await { + Ok(()) => break, Err(err) => { error!(%err, "Error encountered in Service#shutdown"); break; } }, - ChannelMessage::FSEvent(event) => self._inner.fsevent(&self.info, event).await, - ChannelMessage::ExternalMessage(msg, sessions) => { - self.info.send(msg, sessions).await - } + ChannelMessage::FSEvent(event) => self.inner.fsevent(&self.info, event).await, + ChannelMessage::ExternalMessage(msg, sessions) => self.info.send(msg, sessions), }; if let Err(err) = result { @@ -117,12 +135,12 @@ impl Channel { impl Channel { async fn message(&mut self, message: goval::Command, session: SessionID) -> Result<()> { if let Some(mut msg) = self - ._inner + .inner .message(&self.info, message.clone(), session) .await? { msg.r#ref = message.r#ref; - self.info.send(msg, SendSessions::Only(session)).await? + self.info.send(msg, SendSessions::Only(session))?; } Ok(()) @@ -137,13 +155,13 @@ impl Channel { self.info.sessions.insert(session, client.clone()); self.info.clients.insert(session, sender.clone()); match self - ._inner + .inner .attach(&self.info, client, session, sender) .await? { None => {} Some(msg) => { - self.info.send(msg, SendSessions::Only(session)).await?; + self.info.send(msg, SendSessions::Only(session))?; } } Ok(()) @@ -152,7 +170,7 @@ impl Channel { async fn detach(&mut self, session: SessionID) -> Result<()> { self.info.sessions.retain(|sess, _| sess != &session); self.info.clients.retain(|sess, _| sess != &session); - self._inner.detach(&self.info, session).await?; + self.inner.detach(&self.info, session).await?; Ok(()) } } diff --git a/services/src/ot.rs b/services/src/ot.rs index 060bf8e..61e4d69 100644 --- a/services/src/ot.rs +++ b/services/src/ot.rs @@ -1,7 +1,7 @@ pub struct OT { crc32: u32, version: u32, - contents: ropey::Rope, + contents: Rope, path: String, cursors: HashMap, history: Vec, @@ -18,6 +18,7 @@ use crate::{client::ClientInfo, fs_watcher::FSWatcher, FSEvent, IPCMessage, Sess use super::traits; use anyhow::{format_err, Result}; use async_trait::async_trait; +use ropey::Rope; use similar::TextDiff; use tokio::fs; use tracing::{debug, error, trace, warn}; @@ -31,8 +32,8 @@ impl OT { let chan = OT { crc32: 0, version: 1, - contents: "".into(), - path: "".to_string(), + contents: Rope::new(), + path: String::new(), cursors: HashMap::new(), history: vec![], watcher, @@ -57,12 +58,16 @@ impl traits::Service for OT { if self.path.is_empty() { if let goval::command::Body::OtLinkFile(link_file) = body.clone() { - let path = link_file.file.unwrap().path; + let Some(goval::File { path, .. }) = link_file.file else { + return Err(format_err!( + "Session `{session}` sent OT::OtLinkFile without an attached file" + )); + }; + if (fs::metadata(path.clone()).await).is_err() { let error = goval::Command { body: Some(goval::command::Body::Error(format!( - "{}: no such file or directory", - path + "{path}: no such file or directory" ))), ..Default::default() }; @@ -80,10 +85,7 @@ impl traits::Service for OT { self.contents = file_contents.clone().into(); let timestamp = Some(prost_types::Timestamp { - seconds: SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() as i64, + seconds: SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64, nanos: 0, }); @@ -98,7 +100,7 @@ impl traits::Service for OT { crc32, committed: timestamp, author: goval::ot_packet::Author::User.into(), - user_id: 23352071, + user_id: 23_352_071, nonce: 0, }; @@ -118,7 +120,7 @@ impl traits::Service for OT { }; link_response.body = Some(goval::command::Body::OtLinkFileResponse(_inner)); - self.watcher.watch(vec![path]).await?; + self.watcher.watch(vec![path])?; // let mut reader = self.watcher.get_event_reader().await; // let sending_map = self._sending_map.clone(); @@ -155,19 +157,25 @@ impl traits::Service for OT { // }); return Ok(Some(link_response)); - } else { - return Err(format_err!("Command sent before otLinkFile")); } + + return Err(format_err!("Command sent before otLinkFile")); } match body { goval::command::Body::Ot(ot) => { let mut cursor: usize = 0; - for op in ot.op.clone() { - match op.op_component.unwrap() { + for op in &ot.op { + let Some(component) = &op.op_component else { + return Err(format_err!( + "Session `{session}` sent an ot packet without components" + )); + }; + + match component { goval::ot_op_component::OpComponent::Skip(_skip) => { - let skip: usize = _skip.try_into()?; + let skip: usize = (*_skip).try_into()?; if skip + cursor > self.contents.len_chars() { let err = goval::Command { body: Some(goval::command::Body::Error( @@ -178,10 +186,10 @@ impl traits::Service for OT { return Ok(Some(err)); } - cursor += skip + cursor += skip; } goval::ot_op_component::OpComponent::Delete(_delete) => { - let delete: usize = _delete.try_into()?; + let delete: usize = (*_delete).try_into()?; if delete + cursor > self.contents.len_chars() { let err = goval::Command { body: Some(goval::command::Body::Error( @@ -192,10 +200,10 @@ impl traits::Service for OT { return Ok(Some(err)); } - self.contents.remove(cursor..(cursor + delete)) + self.contents.remove(cursor..(cursor + delete)); } goval::ot_op_component::OpComponent::Insert(insert) => { - self.contents.insert(cursor, &insert) + self.contents.insert(cursor, insert); } } } @@ -206,21 +214,18 @@ impl traits::Service for OT { let user_id; if ot.author == goval::ot_packet::Author::Ghostwriter as i32 { - user_id = 22261053 // https://replit.com/@ghostwriterai + user_id = 22_261_053; // https://replit.com/@ghostwriterai } else if let Some(user) = info.sessions.get(&session) { - user_id = user.id + user_id = user.id; } else { - user_id = 23054564 // https://replit.com/@homeval-user + user_id = 23_054_564; // https://replit.com/@homeval-user } let crc32 = crc32fast::hash(to_write.as_bytes()); self.crc32 = crc32; let committed = Some(prost_types::Timestamp { - seconds: SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() as i64, + seconds: SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64, nanos: 0, }); @@ -242,7 +247,7 @@ impl traits::Service for OT { ..Default::default() }; - info.send(ot_notif, crate::SendSessions::Everyone).await?; + info.send(ot_notif, crate::SendSessions::Everyone)?; fs::write(&self.path, to_write).await?; @@ -261,8 +266,7 @@ impl traits::Service for OT { ..Default::default() }; - info.send(cursor_notif, crate::SendSessions::EveryoneExcept(session)) - .await?; + info.send(cursor_notif, crate::SendSessions::EveryoneExcept(session))?; Ok(None) } goval::command::Body::OtDeleteCursor(cursor) => { @@ -276,8 +280,7 @@ impl traits::Service for OT { info.send( cursor_delete_notif, crate::SendSessions::EveryoneExcept(session), - ) - .await?; + )?; Ok(None) } @@ -287,7 +290,7 @@ impl traits::Service for OT { let to = request.version_to as usize; for (index, item) in self.history.iter().enumerate() { if index >= from && index <= to { - packets.push(item.clone()) + packets.push(item.clone()); } } @@ -334,16 +337,13 @@ impl traits::Service for OT { let new_contents = String::from_utf8(new_contents).expect("TODO: Deal with this"); - let ops = diff(self.contents.to_string(), new_contents.clone()); + let ops = diff(&self.contents.to_string(), &new_contents); self.contents = new_contents.into(); self.crc32 = new_crc32; let committed = Some(prost_types::Timestamp { - seconds: SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() as i64, + seconds: SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64, nanos: 0, }); @@ -365,7 +365,7 @@ impl traits::Service for OT { ..Default::default() }; - info.send(ot_notif, crate::SendSessions::Everyone).await?; + info.send(ot_notif, crate::SendSessions::Everyone)?; } Ok(()) } @@ -404,7 +404,7 @@ impl traits::Service for OT { let mut cursors = vec![]; for cursor in self.cursors.values() { - cursors.push(cursor.clone()) + cursors.push(cursor.clone()); } let _inner = goval::OtStatus { @@ -420,15 +420,15 @@ impl traits::Service for OT { } async fn shutdown(self: Box, _info: &super::types::ChannelInfo) -> Result<()> { - self.watcher.shutdown().await; + self.watcher.shutdown(); Ok(()) } } -fn diff(old_text: String, new_text: String) -> Vec { - let mut _differ = TextDiff::configure(); - let differ = _differ.timeout(Duration::from_secs(1)); - let diff = differ.diff_chars(&old_text, &new_text); +fn diff(old_text: &str, new_text: &str) -> Vec { + let mut differ_config: similar::TextDiffConfig = TextDiff::configure(); + let differ = differ_config.timeout(Duration::from_secs(1)); + let diff = differ.diff_chars(old_text, new_text); let mut parts: Vec = vec![]; let mut last_op: Option = None; @@ -439,7 +439,7 @@ fn diff(old_text: String, new_text: String) -> Vec { if let Some(goval::ot_op_component::OpComponent::Skip(amount)) = last_op.clone() { last_op = Some(goval::ot_op_component::OpComponent::Skip( amount + part.value().len() as u32, - )) + )); } else { new_op = Some(goval::ot_op_component::OpComponent::Skip( part.value().len() as u32, @@ -450,7 +450,7 @@ fn diff(old_text: String, new_text: String) -> Vec { if let Some(goval::ot_op_component::OpComponent::Delete(amount)) = last_op.clone() { last_op = Some(goval::ot_op_component::OpComponent::Delete( amount + part.value().len() as u32, - )) + )); } else { new_op = Some(goval::ot_op_component::OpComponent::Delete( part.value().len() as u32, @@ -461,7 +461,7 @@ fn diff(old_text: String, new_text: String) -> Vec { if let Some(goval::ot_op_component::OpComponent::Insert(same)) = last_op.clone() { last_op = Some(goval::ot_op_component::OpComponent::Insert( same + part.value(), - )) + )); } else { new_op = Some(goval::ot_op_component::OpComponent::Insert( part.value().to_string(), diff --git a/services/src/output.rs b/services/src/output.rs index acb15bf..4bce5e2 100644 --- a/services/src/output.rs +++ b/services/src/output.rs @@ -41,8 +41,7 @@ impl traits::Service for Output { }; new_frame.body = Some(goval::command::Body::OutputBlockStartEvent(event)); - info.send(new_frame, crate::SendSessions::Only(session)) - .await?; + info.send(new_frame, crate::SendSessions::Only(session))?; pty.session_join(session, sender).await?; } @@ -98,16 +97,13 @@ impl traits::Service for Output { let mut env = HashMap::new(); env.insert("REPLIT_GIT_TOOLS_CHANNEL_FROM".into(), info.id.to_string()); - self.pty = Some( - Pty::start( - cmd, - info.id, - Arc::new(RwLock::new(info.clients.clone())), - info.sender.clone(), - Some(env), - ) - .await?, - ); + self.pty = Some(Pty::start( + cmd, + info.id, + Arc::new(RwLock::new(info.clients.clone())), + &info.sender, + Some(env), + )?); let mut new_frame = goval::Command::default(); @@ -121,25 +117,25 @@ impl traits::Service for Output { }; new_frame.body = Some(goval::command::Body::OutputBlockStartEvent(event)); - info.send(new_frame, crate::SendSessions::Everyone).await?; + info.send(new_frame, crate::SendSessions::Everyone)?; let status = goval::Command { body: Some(goval::command::Body::State(goval::State::Running.into())), ..Default::default() }; - info.send(status, crate::SendSessions::Everyone).await?; + info.send(status, crate::SendSessions::Everyone)?; } goval::command::Body::Clear(_) => { if let Some(pty) = &mut self.pty { pty.cancel().await?; } else { - warn!("Client tried to stop an already stopped pty") + warn!("Client tried to stop an already stopped pty"); } } goval::command::Body::Input(msg) => { if let Some(pty) = &mut self.pty { - pty.write(msg)?; + pty.write(&msg)?; } } goval::command::Body::ResizeTerm(_) => {} @@ -172,7 +168,7 @@ impl traits::Service for Output { }; end_frame.body = Some(goval::command::Body::OutputBlockEndEvent(event)); - info.send(end_frame, crate::SendSessions::Everyone).await?; + info.send(end_frame, crate::SendSessions::Everyone)?; if exit_code != 0 { let error = goval::Command { @@ -182,20 +178,20 @@ impl traits::Service for Output { ..Default::default() }; - info.send(error, crate::SendSessions::Everyone).await?; + info.send(error, crate::SendSessions::Everyone)?; } let status = goval::Command { body: Some(goval::command::Body::State(goval::State::Stopped.into())), ..Default::default() }; - info.send(status, crate::SendSessions::Everyone).await?; + info.send(status, crate::SendSessions::Everyone)?; Ok(()) } } impl Output { - pub async fn new() -> Output { + pub const fn new() -> Output { Output { pty: None, start_time: None, diff --git a/services/src/presence.rs b/services/src/presence.rs index 0e8338c..79bb49b 100644 --- a/services/src/presence.rs +++ b/services/src/presence.rs @@ -7,7 +7,7 @@ use std::{ collections::HashMap, time::{SystemTime, UNIX_EPOCH}, }; -use tracing::{info, warn}; +use tracing::{debug, trace, warn}; use super::traits; use anyhow::{format_err, Result}; @@ -44,8 +44,7 @@ impl traits::Service for Presence { ..Default::default() }; - info.send(follow_notif, SendSessions::Only(SessionID(follow.session))) - .await?; + info.send(follow_notif, SendSessions::Only(SessionID(follow.session)))?; Ok(None) } goval::command::Body::UnfollowUser(unfollow) => { @@ -59,20 +58,20 @@ impl traits::Service for Presence { info.send( unfollow_notif, SendSessions::Only(SessionID(unfollow.session)), - ) - .await?; + )?; Ok(None) } goval::command::Body::OpenFile(file) => { - let user = info.sessions.get(&session).unwrap(); + let Some(user) = info.sessions.get(&session) else { + return Err(format_err!( + "Session `{session}` who is not joined tried to send Presence::OpenFile" + )); + }; let mut file_notif = goval::Command::default(); let timestamp = Some(prost_types::Timestamp { - seconds: SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() as i64, + seconds: SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64, nanos: 0, }); @@ -85,8 +84,7 @@ impl traits::Service for Presence { file_notif.body = Some(goval::command::Body::FileOpened(_inner)); - info.send(file_notif, SendSessions::EveryoneExcept(session)) - .await?; + info.send(file_notif, SendSessions::EveryoneExcept(session))?; Ok(None) } @@ -110,7 +108,7 @@ impl traits::Service for Presence { let mut files = vec![]; for file in self.files.values() { - files.push(file.clone()) + files.push(file.clone()); } _inner.files = files; @@ -129,8 +127,7 @@ impl traits::Service for Presence { ..Default::default() }; - info.send(join, SendSessions::EveryoneExcept(session)) - .await?; + info.send(join, SendSessions::EveryoneExcept(session))?; self.users.push(user); @@ -139,17 +136,21 @@ impl traits::Service for Presence { async fn detach(&mut self, info: &super::types::ChannelInfo, session: SessionID) -> Result<()> { self.files.remove(&session); - let mut part = goval::Command::default(); let mut flag = false; - let users = self.users.clone(); - for (idx, user) in users.iter().enumerate() { - if user.session == session.0 { - flag = true; - part.body = Some(goval::command::Body::Part(user.clone())); - self.users.swap_remove(idx); - break; - } + for user in self.users.extract_if(|user| user.session == session.0) { + let part = goval::Command { + body: Some(goval::command::Body::Part(user.clone())), + ..Default::default() + }; + + trace!(%session, "Sending depart notification"); + + info.send(part, SendSessions::EveryoneExcept(session))?; + + debug!(?user, "Sent depart notification"); + + flag = true; } if !flag { @@ -159,9 +160,6 @@ impl traits::Service for Presence { )); } - info!(?part, "Presence#detach"); - info.send(part, SendSessions::EveryoneExcept(session)) - .await?; Ok(()) } } diff --git a/services/src/shell.rs b/services/src/shell.rs index 24c5760..2e2c873 100644 --- a/services/src/shell.rs +++ b/services/src/shell.rs @@ -47,10 +47,10 @@ impl traits::Service for Shell { match body { goval::command::Body::Input(msg) => { - self.pty.write(msg)?; + self.pty.write(&msg)?; } goval::command::Body::ResizeTerm(size) => { - self.pty.resize(size.rows as u16, size.cols as u16)? + self.pty.resize(size.rows as u16, size.cols as u16)?; } _ => { debug!(?message, "New message"); @@ -64,7 +64,7 @@ impl traits::Service for Shell { info: &super::types::ChannelInfo, _exit_code: i32, ) -> Result<()> { - self.pty = Shell::start_pty(info).await?; + self.pty = Shell::start_pty(info)?; Ok(()) } } @@ -75,7 +75,7 @@ static DEFAULT_SHELL: &str = "sh"; static DEFAULT_SHELL: &str = "pwsh"; impl Shell { - async fn start_pty(info: &super::types::ChannelInfo) -> Result { + fn start_pty(info: &super::types::ChannelInfo) -> Result { let mut env = HashMap::new(); env.insert("REPLIT_GIT_TOOLS_CHANNEL_FROM".into(), info.id.to_string()); @@ -83,14 +83,14 @@ impl Shell { vec![std::env::var("SHELL").unwrap_or(DEFAULT_SHELL.to_string())], info.id, Arc::new(RwLock::new(info.clients.clone())), - info.sender.clone(), + &info.sender, Some(env), ) - .await } - pub async fn new(info: &super::types::ChannelInfo) -> Result { + + pub fn new(info: &super::types::ChannelInfo) -> Result { Ok(Shell { - pty: Shell::start_pty(info).await?, + pty: Shell::start_pty(info)?, }) } } diff --git a/services/src/snapshot.rs b/services/src/snapshot.rs index a0a7779..4dcadc5 100644 --- a/services/src/snapshot.rs +++ b/services/src/snapshot.rs @@ -14,7 +14,7 @@ impl traits::Service for Snapshot { message: goval::Command, _session: SessionID, ) -> Result> { - let body = match message.body.clone() { + let body = match message.body { None => return Err(format_err!("Expected command body")), Some(body) => body, }; diff --git a/services/src/types/channel_info.rs b/services/src/types/channel_info.rs index cb9bcf8..f49b59f 100644 --- a/services/src/types/channel_info.rs +++ b/services/src/types/channel_info.rs @@ -30,33 +30,33 @@ pub struct ChannelInfo { } impl ChannelInfo { - pub async fn send(&self, mut message: goval::Command, sessions: SendSessions) -> Result<()> { + pub fn send(&self, mut message: goval::Command, sessions: SendSessions) -> Result<()> { let clients: Vec; message.channel = self.id.into(); match sessions { SendSessions::Everyone => { message.session = 0; - let mut _clients = vec![]; + let mut all_clients = vec![]; for client in self.clients.keys() { - _clients.push(*client) + all_clients.push(*client); } - clients = _clients; + clients = all_clients; } SendSessions::EveryoneExcept(excluded) => { message.session = (-excluded).into(); - let mut _clients = vec![]; + let mut most_client = vec![]; for client in self.clients.keys() { if client != &excluded { - _clients.push(*client) + most_client.push(*client); } } - clients = _clients; + clients = most_client; } SendSessions::Only(session) => { message.session = session.into(); - clients = vec![session] + clients = vec![session]; } } @@ -67,7 +67,7 @@ impl ChannelInfo { session: client, })?; } else { - error!("Missing session outbound message queue in op_send_msg") + error!("Missing session outbound message queue in op_send_msg"); } } Ok(()) diff --git a/services/src/types/client.rs b/services/src/types/client.rs index bc71a2b..bc7494a 100644 --- a/services/src/types/client.rs +++ b/services/src/types/client.rs @@ -12,7 +12,7 @@ impl Default for ClientInfo { is_secure: false, username: "homeval-user".to_owned(), - id: 23054564, + id: 23_054_564, } } } diff --git a/services/src/types/config.rs b/services/src/types/config.rs index dfa7b2d..372417a 100644 --- a/services/src/types/config.rs +++ b/services/src/types/config.rs @@ -1,3 +1,5 @@ +#![allow(clippy::wildcard_imports)] + /* message ToolchainConfigs { string entrypoint = 1; @@ -16,7 +18,7 @@ pub use serde::{Deserialize, Serialize}; pub mod toolchain { use super::*; - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct ToolchainConfigs { pub entrypoint: Option, @@ -36,7 +38,7 @@ pub mod toolchain { } */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct RunOption { pub id: Option, @@ -56,7 +58,7 @@ pub mod toolchain { } */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct DebuggerOption { pub id: Option, @@ -76,7 +78,7 @@ pub mod toolchain { } */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct LanguageServerOption { pub id: Option, @@ -94,7 +96,7 @@ pub mod toolchain { } */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct FileTypeAttrs { pub extensions: Vec, @@ -114,7 +116,7 @@ pub mod toolchain { } */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct PackagerOption { pub id: Option, @@ -137,7 +139,7 @@ pub mod dotreplit { map languages = 9; repeated string hidden = 11; */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug, Default)] #[serde(rename_all = "camelCase")] pub struct DotReplit { pub run: Option, @@ -147,36 +149,36 @@ pub mod dotreplit { pub hidden: Option>, } - impl From for goval::DotReplit { - fn from(val: DotReplit) -> Self { + impl From<&DotReplit> for goval::DotReplit { + fn from(val: &DotReplit) -> Self { let mut ret = goval::DotReplit::default(); - if let Some(run) = val.run { + if let Some(run) = &val.run { // let mut inner = goval::Exec::default(); // inner.args = vec!["sh".into(), "-c".into(), run]; ret.run = Some(run.into()); } - if let Some(lang) = val.language { - ret.language = lang; + if let Some(lang) = &val.language { + ret.language.clone_from(lang); } - if let Some(entrypoint) = val.entrypoint { - ret.entrypoint = entrypoint; + if let Some(entrypoint) = &val.entrypoint { + ret.entrypoint.clone_from(entrypoint); } - if let Some(languages) = val.languages { + if let Some(languages) = &val.languages { let mut inner = HashMap::new(); - for (lang, data) in languages.iter() { - inner.insert(lang.into(), data.clone().into()); + for (lang, data) in languages { + inner.insert(lang.into(), data.into()); } - ret.languages = inner + ret.languages = inner; } - if let Some(hidden) = val.hidden { - ret.hidden = hidden; + if let Some(hidden) = &val.hidden { + ret.hidden.clone_from(hidden); } ret @@ -190,7 +192,7 @@ pub mod dotreplit { } */ - #[derive(Serialize, Deserialize, Clone, Debug)] + #[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct DotReplitLanguage { pub pattern: Option, @@ -198,19 +200,19 @@ pub mod dotreplit { pub language_server: Option, } - impl From for goval::DotReplitLanguage { - fn from(val: DotReplitLanguage) -> Self { + impl From<&DotReplitLanguage> for goval::DotReplitLanguage { + fn from(val: &DotReplitLanguage) -> Self { let mut ret = goval::DotReplitLanguage::default(); - if let Some(pattern) = val.pattern { - ret.pattern = pattern; + if let Some(pattern) = &val.pattern { + ret.pattern.clone_from(pattern); } - if let Some(syntax) = val.syntax { - ret.syntax = syntax; + if let Some(syntax) = &val.syntax { + ret.syntax.clone_from(syntax); } - if let Some(language_server) = val.language_server { + if let Some(language_server) = &val.language_server { ret.language_server = Some(language_server.into()); } @@ -227,7 +229,7 @@ message LanguageServerConfig { } */ -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct LanguageServerConfig { #[serde(rename = "start")] @@ -236,23 +238,24 @@ pub struct LanguageServerConfig { pub initialization_options_json: Option, } -impl From for goval::LanguageServerConfig { - fn from(val: LanguageServerConfig) -> Self { +impl From<&LanguageServerConfig> for goval::LanguageServerConfig { + fn from(val: &LanguageServerConfig) -> Self { let mut ret = goval::LanguageServerConfig::default(); - if let Some(start_command) = val.start_command { + if let Some(start_command) = &val.start_command { // let mut inner = goval::Exec::default(); // inner.args = vec!["sh".into(), "-c".into(), start_command]; // ret.start_command = Some(inner); ret.start_command = Some(start_command.into()); } - if let Some(configuration_json) = val.configuration_json { - ret.configuration_json = configuration_json; + if let Some(configuration_json) = &val.configuration_json { + ret.configuration_json.clone_from(configuration_json); } - if let Some(initialization_options_json) = val.initialization_options_json { - ret.initialization_options_json = initialization_options_json; + if let Some(initialization_options_json) = &val.initialization_options_json { + ret.initialization_options_json + .clone_from(initialization_options_json); }; ret @@ -275,14 +278,14 @@ message Exec { } */ -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Debug)] pub enum ExecLifecycle { NonBlocking, Stdin, Blocking, } -#[derive(Serialize, Deserialize, Clone, Debug)] +#[derive(Serialize, Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct Exec { pub args: Option>, @@ -293,16 +296,16 @@ pub struct Exec { pub split_logs: Option, } -impl From for goval::Exec { - fn from(val: Exec) -> Self { +impl From<&Exec> for goval::Exec { + fn from(val: &Exec) -> Self { let mut ret = goval::Exec::default(); - if let Some(args) = val.args { - ret.args = args; + if let Some(args) = &val.args { + ret.args.clone_from(args); } - if let Some(env) = val.env { - ret.env = env; + if let Some(env) = &val.env { + ret.env.clone_from(env); } if let Some(blocking) = val.blocking { @@ -317,7 +320,7 @@ impl From for goval::Exec { ret.split_logs = split_logs; } - if let Some(lifecycle) = val.lifecycle { + if let Some(lifecycle) = &val.lifecycle { ret.lifecycle = match lifecycle { ExecLifecycle::NonBlocking => goval::exec::Lifecycle::NonBlocking, ExecLifecycle::Blocking => goval::exec::Lifecycle::Blocking, diff --git a/services/src/types/fs_watcher.rs b/services/src/types/fs_watcher.rs index 5cb62d8..ff16431 100644 --- a/services/src/types/fs_watcher.rs +++ b/services/src/types/fs_watcher.rs @@ -6,7 +6,7 @@ use notify_debouncer_full::{ use serde::Serialize; use tracing::error; -use anyhow::Result; +use anyhow::{format_err, Result}; use std::{path::Path, time::Duration}; @@ -54,7 +54,9 @@ impl FSWatcher { None, move |result: DebounceEventResult| match result { Ok(events) => events.iter().for_each(|event| { - if let Some(final_event) = notify_event_to_final(event).unwrap() { + if let Some(final_event) = + notify_event_to_final(event).expect("TODO: handle this") + { debounce_writer .send(ChannelMessage::FSEvent(final_event)) .expect("TODO: handle this"); @@ -78,7 +80,7 @@ impl FSWatcher { Ok(FSWatcher { debouncer, writer }) } - pub async fn watch(&mut self, files: Vec) -> Result<()> { + pub fn watch(&mut self, files: Vec) -> Result<()> { for file in files { let path = Path::new(&file); self.debouncer @@ -86,42 +88,50 @@ impl FSWatcher { .watch(path, notify::RecursiveMode::NonRecursive)?; self.debouncer .cache() - .add_root(path, notify::RecursiveMode::NonRecursive) + .add_root(path, notify::RecursiveMode::NonRecursive); } Ok(()) } - pub async fn shutdown(self) { + pub fn shutdown(self) { self.debouncer.stop_nonblocking(); - drop(self.writer) + drop(self.writer); } } fn notify_event_to_final(event: &Event) -> Result> { let base = std::env::current_dir()?; - let file_name = event.paths[0] + let Some(file_name) = event.paths[0] .strip_prefix(base.clone())? .to_str() - .unwrap() - .to_string(); + .map(String::from) + else { + return Err(format_err!( + "Got invalid utf-8 when trying to find FSEvent file name :eyes:" + )); + }; + match event.kind { EventKind::Create(_) => Ok(Some(FSEvent::Create(file_name))), EventKind::Modify(_kind @ ModifyKind::Name(notify::event::RenameMode::Both)) => { - Ok(Some(FSEvent::Rename( - file_name, - event.paths[1] - .strip_prefix(base)? - .to_str() - .unwrap() - .to_string(), - ))) + let Some(resultant) = event.paths[1] + .strip_prefix(base)? + .to_str() + .map(String::from) + else { + return Err(format_err!( + "Got invalid utf-8 when trying to find FSEvent resultant file name :eyes:" + )); + }; + + Ok(Some(FSEvent::Rename(file_name, resultant))) } EventKind::Modify(_kind @ ModifyKind::Name(notify::event::RenameMode::From)) => { - Ok(Some(FSEvent::Remove(file_name.to_string()))) + Ok(Some(FSEvent::Remove(file_name))) } EventKind::Modify(_kind @ ModifyKind::Name(notify::event::RenameMode::To)) => { - Ok(Some(FSEvent::Create(file_name.to_string()))) + Ok(Some(FSEvent::Create(file_name))) } EventKind::Modify(_) => Ok(Some(FSEvent::Modify(file_name))), EventKind::Remove(_) => Ok(Some(FSEvent::Remove(file_name))), diff --git a/services/src/types/messaging.rs b/services/src/types/messaging.rs index d6bd91e..3388f43 100644 --- a/services/src/types/messaging.rs +++ b/services/src/types/messaging.rs @@ -45,7 +45,7 @@ pub struct IPCMessage { } impl IPCMessage { - pub fn replace_cmd(&self, cmd: goval::Command) -> IPCMessage { + pub const fn replace_cmd(&self, cmd: goval::Command) -> IPCMessage { IPCMessage { command: cmd, session: self.session, diff --git a/services/src/types/proc.rs b/services/src/types/proc.rs index 2aaaee1..f65fe75 100644 --- a/services/src/types/proc.rs +++ b/services/src/types/proc.rs @@ -86,19 +86,19 @@ pub struct Proc { } impl Proc { - pub async fn new( - _args: Vec, + pub fn new( + args: Vec, channel: ChannelID, contact: tokio::sync::mpsc::UnboundedSender, - _env: Option>, + _env: Option<&HashMap>, ) -> Result { let cancelled = Arc::new(AtomicBool::new(false)); - let mut cmd = tokio::process::Command::new(&_args[0]); - let args = &mut VecDeque::from(_args.to_vec()); - trace!("{:#?}", args); - VecDeque::pop_front(args); - for arg in args { + let mut cmd = tokio::process::Command::new(&args[0]); + let real_args = &mut VecDeque::from(args); + trace!("{:#?}", real_args); + VecDeque::pop_front(real_args); + for arg in real_args { cmd.arg(arg); } // debug!("{:#?}", std::env::current_dir()?); @@ -167,7 +167,7 @@ impl Proc { .send(ChannelMessage::ProcessDead(exit_status)) .is_err() { - error!("Proc recv'ing channel was dropped before process dead alert was sent") + error!("Proc recv'ing channel was dropped before process dead alert was sent"); } }); diff --git a/services/src/types/pty.rs b/services/src/types/pty.rs index 4891d94..fb83efa 100644 --- a/services/src/types/pty.rs +++ b/services/src/types/pty.rs @@ -73,7 +73,7 @@ impl Write for PtyWriter { command: to_send, session: *session, }) { - Ok(_) => {} + Ok(()) => {} Err(err) => { return Err(Error::new(ErrorKind::Other, err)); } @@ -99,14 +99,14 @@ pub struct Pty { } impl Pty { - pub async fn start( - _args: Vec, + pub fn start( + args: Vec, channel: ChannelID, sessions: Arc>>>, - contact: tokio::sync::mpsc::UnboundedSender, - _env: Option>, + contact: &tokio::sync::mpsc::UnboundedSender, + env: Option>, ) -> Result { - let env = _env.unwrap_or_default(); + let env = env.unwrap_or_default(); let pty_system = portable_pty::native_pty_system(); @@ -117,16 +117,16 @@ impl Pty { ..Default::default() })?; - let mut cmd = portable_pty::CommandBuilder::new(_args[0].clone()); - let args = &mut VecDeque::from(_args.to_vec()); - VecDeque::pop_front(args); - for arg in args { + let mut cmd = portable_pty::CommandBuilder::new(args[0].clone()); + let real_args = &mut VecDeque::from(args); + VecDeque::pop_front(real_args); + for arg in real_args { cmd.arg(arg); } cmd.cwd(std::env::current_dir()?); - for (key, val) in env.into_iter() { - cmd.env(key, val) + for (key, val) in env { + cmd.env(key, val); } let child = pair.slave.spawn_command(cmd)?; @@ -187,19 +187,19 @@ impl Pty { // let queue = _read.get(&channel).unwrap().clone(); // drop(_read); match contact_clone.send(ChannelMessage::ProcessDead(exit_code)) { - Ok(_) => {} + Ok(()) => {} Err(err) => { - error!(%err, "PTY child proc reaper errored when alerting channel") + error!(%err, "PTY child proc reaper errored when alerting channel"); } } } Err(err) => { - error!(%err, "PTY child proc reaper errored") + error!(%err, "PTY child proc reaper errored"); } } } Err(err) => { - error!(%err, "Join error on pty child proc reaper") + error!(%err, "Join error on pty child proc reaper"); } } }); @@ -252,7 +252,7 @@ impl Pty { Ok(()) } - pub fn write(&mut self, task: String) -> Result<()> { + pub fn write(&mut self, task: &str) -> Result<()> { if self.cancelled.load(std::sync::atomic::Ordering::SeqCst) { return Err(format_err!("Can't write to a cancelled pty")); } diff --git a/src/database.rs b/src/database.rs index 07e71fa..60f3824 100644 --- a/src/database.rs +++ b/src/database.rs @@ -3,7 +3,7 @@ use migration::MigratorTrait; use sea_orm::{ConnectOptions, Database}; use std::time::Duration; use tokio::sync::OnceCell; -use tracing::{debug, warn}; +use tracing::{debug, log::LevelFilter, warn}; pub static DATABASE: OnceCell = OnceCell::const_new(); @@ -22,7 +22,7 @@ pub async fn setup() -> Result<()> { let connect_options = ConnectOptions::new(db_url) .acquire_timeout(Duration::from_secs(5)) - .sqlx_logging_level(log::LevelFilter::Trace) + .sqlx_logging_level(LevelFilter::Trace) .to_owned(); debug!("Connecting to database"); @@ -35,7 +35,9 @@ pub async fn setup() -> Result<()> { migration::Migrator::up(&db, None).await?; debug!("Setting database once cell"); - DATABASE.set(db).unwrap(); + DATABASE + .set(db) + .expect("This function is the only possible call to DATABASE.set and is only called once"); debug!("Done with database setup"); diff --git a/src/goval_server.rs b/src/goval_server.rs index d01516d..2b23ddc 100644 --- a/src/goval_server.rs +++ b/src/goval_server.rs @@ -1,3 +1,6 @@ +// TODO: Fix all these warnings and remove this allow +#![allow(clippy::unwrap_used)] + use axum::{ extract::{ ws::{Message as WsMessage, WebSocket, WebSocketUpgrade}, @@ -66,7 +69,7 @@ pub async fn start_server() -> Result<()> { let max_channel = Mutex::new(0); while let Some(message) = rx.recv().await { - handle_message(message, &SESSION_MAP, &max_channel).await; + Box::pin(handle_message(message, &max_channel)).await; } }); @@ -110,9 +113,9 @@ async fn on_wsv2_upgrade(socket: WebSocket, token: String, state: AppState, addr ) .await { - Ok(_) => {} + Ok(()) => {} Err(err) => { - error!(?err, "accept_connection errored") + error!(?err, "accept_connection errored"); } }; } @@ -126,15 +129,7 @@ async fn wsv2( ws.on_upgrade(move |socket| on_wsv2_upgrade(socket, token, state, addr)) } -async fn handle_message( - message: IPCMessage, - session_map: &LazyLock< - tokio::sync::RwLock< - std::collections::HashMap>, - >, - >, - max_channel: &Mutex, -) { +async fn handle_message(message: IPCMessage, max_channel: &Mutex) { let cmd: Command = message.clone().command; let cmd_body = match cmd.body { @@ -155,20 +150,20 @@ async fn handle_message( ..Default::default() }; - if let Some(sender) = session_map.read().await.get(&message.session) { + if let Some(sender) = SESSION_MAP.read().await.get(&message.session) { match sender.send(message.replace_cmd(pong)) { - Ok(_) => {} + Ok(()) => {} Err(err) => { error!(?err, "Error occured while sending Pong"); } } } else { - error!("Missing session queue when sending Pong") + error!("Missing session queue when sending Pong"); } } goval::command::Body::OpenChan(open_chan) => { - if let Err(err) = open_channel(open_chan, message, max_channel, session_map).await { - error!(?err, "Error in open chan handler") + if let Err(err) = open_channel(open_chan, message, max_channel).await { + error!(?err, "Error in open chan handler"); } } @@ -176,10 +171,10 @@ async fn handle_message( // TODO: follow close_chan.action tokio::spawn(async move { match detach_channel(ChannelID(close_chan.id), message.session, true).await { - Ok(_) => {} + Ok(()) => {} Err(err) => { error!(%err, session = %message.session, channel = close_chan.id, - "Error occured while detaching from channel") + "Error occured while detaching from channel"); } } }); @@ -190,7 +185,13 @@ async fn handle_message( let msg_lock = CHANNEL_MESSAGES.read().await; let channel_id = ChannelID(cmd.channel); - let queue = msg_lock.get(&channel_id).unwrap().clone(); + let Some(queue) = msg_lock.get(&channel_id).cloned() else { + error!( + "Session {} sent message to unknown channel {channel_id}", + message.session + ); + return; + }; drop(msg_lock); @@ -206,15 +207,11 @@ async fn handle_message( } } +#[allow(clippy::too_many_lines)] async fn open_channel( open_chan: OpenChannel, message: IPCMessage, max_channel: &Mutex, - session_map: &LazyLock< - tokio::sync::RwLock< - std::collections::HashMap>, - >, - >, ) -> Result<()> { let searcher: &str = &open_chan.service; if homeval_services::IMPLEMENTED_SERVICES.contains(&searcher) { @@ -231,7 +228,7 @@ async fn open_channel( let metadata = CHANNEL_METADATA.read().await; for (id, channel) in metadata.iter() { if channel.name.is_some() - && channel.name.clone().unwrap_or("".to_string()) == open_chan.name + && channel.name.clone().unwrap_or_default() == open_chan.name && channel.service.clone() == open_chan.service { found = true; @@ -250,16 +247,16 @@ async fn open_channel( channel_id_held = channel_id; drop(max_channel); - let _channel_name = if !open_chan.name.is_empty() { - Some(open_chan.name) - } else { + let channel_name = if open_chan.name.is_empty() { None + } else { + Some(open_chan.name) }; let service_data = ServiceMetadata { service: service.clone(), id: channel_id, - name: _channel_name.clone(), + name: channel_name.clone(), }; trace!(channel = %channel_id, "Awaiting queue write"); @@ -280,14 +277,14 @@ async fn open_channel( let channel = homeval_services::Channel::new( channel_id, service, - _channel_name, + channel_name, DOTREPLIT_CONFIG.clone(), CHILD_PROCS_ENV_BASE.clone(), writer, ) .await .expect("TODO: Deal with this"); - channel.start(reader).await; + Box::pin(channel.start(reader)).await; }); found = true; } @@ -295,15 +292,15 @@ async fn open_channel( if !found { error!("Couldnt make channel"); let mut protocol_error = goval::Command::default(); - let _inner = goval::ProtocolError { + let inner = goval::ProtocolError { text: "Could not create / attach channel".to_string(), }; - protocol_error.body = Some(goval::command::Body::ProtocolError(_inner)); + protocol_error.body = Some(goval::command::Body::ProtocolError(inner)); protocol_error.r#ref.clone_from(&message.command.r#ref); protocol_error.channel = 0; - session_map + SESSION_MAP .read() .await .get(&message.session) @@ -314,17 +311,17 @@ async fn open_channel( } let mut open_chan_res = goval::Command::default(); - let _open_res = goval::OpenChannelRes { + let open_res = goval::OpenChannelRes { state: goval::open_channel_res::State::Created.into(), id: channel_id_held.into(), ..Default::default() }; - open_chan_res.body = Some(goval::command::Body::OpenChanRes(_open_res)); + open_chan_res.body = Some(goval::command::Body::OpenChanRes(open_res)); open_chan_res.r#ref.clone_from(&message.command.r#ref); open_chan_res.channel = 0; - session_map + SESSION_MAP .read() .await .get(&message.session) @@ -376,7 +373,7 @@ async fn open_channel( warn!( service = open_chan.service, "Missing service requested by openChan" - ) + ); } Ok(()) } @@ -498,12 +495,12 @@ async fn accept_connection( SESSION_CHANNELS.write().await.insert(session, vec![]); tokio::spawn(async move { - while let Some(_msg) = read.next().await { - match _msg { + while let Some(msg_res) = read.next().await { + match msg_res { Ok(msg) => match msg { WsMessage::Binary(buf) => { - let _message: anyhow::Result = buf.try_into(); - let message = match _message { + let ipc_message: anyhow::Result = buf.try_into(); + let message = match ipc_message { Ok(mut msg) => { msg.session = session; msg @@ -515,19 +512,18 @@ async fn accept_connection( }; if let Err(err) = propagate.send(message) { - error!(%session, ?err, "An error occured when enqueing message to global message queue") + error!(%session, ?err, "An error occured when enqueing message to global message queue"); } } WsMessage::Close(_) => { warn!(%session, "CLOSING SESSION"); - for _channel in SESSION_CHANNELS.read().await.get(&session).unwrap().iter() - { - let channel = *_channel; + for channel in SESSION_CHANNELS.read().await.get(&session).unwrap() { + let channel = *channel; tokio::spawn(async move { match detach_channel(channel, session, true).await { - Ok(_) => {} + Ok(()) => {} Err(err) => { - error!(%err, %session, %channel, "Error occured while detaching from channel") + error!(%err, %session, %channel, "Error occured while detaching from channel"); } } }); @@ -549,13 +545,13 @@ async fn accept_connection( while let Some(i) = sent.recv().await { match write.send(WsMessage::Binary(i.to_bytes())).await { - Ok(_) => {} + Ok(()) => {} Err(err) => { error!( session = %i.session, ?err, "An error occured while sending a message" - ) + ); } } } diff --git a/src/main.rs b/src/main.rs index 36e8146..2842b75 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,15 @@ #![feature(lazy_cell)] - +#![warn( + clippy::pedantic, + clippy::unwrap_used, + clippy::redundant_clone, + clippy::missing_const_for_fn +)] + +use anyhow::Result; use std::sync::LazyLock; use std::time::Instant; -use std::{collections::HashMap, io::Error, sync::Arc}; +use std::{collections::HashMap, sync::Arc}; use homeval_services::{ChannelID, SessionID}; use tokio::sync::RwLock; @@ -30,7 +37,7 @@ static CPU_STATS: LazyLock> = pub static DOTREPLIT_CONFIG: LazyLock>> = LazyLock::new(|| { Arc::new(RwLock::const_new( - toml::from_str(&std::fs::read_to_string(".replit").unwrap_or("".to_string())).unwrap(), + toml::from_str(&std::fs::read_to_string(".replit").unwrap_or_default()).unwrap_or_default(), )) }); @@ -56,7 +63,7 @@ pub use database::DATABASE; mod goval_server; #[tokio::main] -async fn main() -> Result<(), Error> { +async fn main() -> Result<()> { tracing_subscriber::fmt::init(); debug!("Initializing lazy statics"); LazyLock::force(&START_TIME); @@ -69,7 +76,7 @@ async fn main() -> Result<(), Error> { // console_subscriber::init(); #[cfg(feature = "database")] - database::setup().await.unwrap(); + database::setup().await?; info!("Starting homeval!"); @@ -79,7 +86,7 @@ async fn main() -> Result<(), Error> { #[cfg(feature = "repldb")] tokio::spawn(repldb_server::start_server()); - goval_server::start_server().await.unwrap(); + goval_server::start_server().await?; Ok(()) } diff --git a/src/parse_paseto.rs b/src/parse_paseto.rs index 975b484..9555624 100644 --- a/src/parse_paseto.rs +++ b/src/parse_paseto.rs @@ -53,9 +53,9 @@ async fn init_keys() -> Result> { Client::builder(TokioExecutor::new()) .build::, Collected>(https); - let mut _body = client.get(hyper::Uri::try_from(key_get)?).await?; + let mut body = client.get(hyper::Uri::try_from(key_get)?).await?; - let body = _body.body_mut().collect().await?.to_bytes(); + let body = body.body_mut().collect().await?.to_bytes(); Ok(serde_json::from_slice(&body)?) } @@ -74,8 +74,8 @@ async fn parse_verify(input: &str) -> Result<(Vec, bool)> { } }; - let _authority = general_purpose::STANDARD.decode(token.untrusted_footer())?; - let authority = goval::GovalSigningAuthority::decode(_authority.as_slice())?; + let authority = general_purpose::STANDARD.decode(token.untrusted_footer())?; + let authority = goval::GovalSigningAuthority::decode(authority.as_slice())?; let key_id; @@ -101,7 +101,7 @@ async fn parse_verify(input: &str) -> Result<(Vec, bool)> { pubkey = pasetors::keys::AsymmetricPublicKey::from( general_purpose::STANDARD.decode(key)?.as_slice(), ) - .unwrap(); + .expect("Invalid signing key"); } else { return Err(Error::new( std::io::ErrorKind::InvalidData, @@ -115,7 +115,7 @@ async fn parse_verify(input: &str) -> Result<(Vec, bool)> { Err(err) => { return Err(Error::new( std::io::ErrorKind::InvalidData, - format!("Paseto invalid: `{:#?}`", err), + format!("Paseto invalid: `{err:#?}`"), ) .into()); } @@ -149,8 +149,7 @@ pub async fn parse(token: &str) -> Result { } } - let _inner = general_purpose::STANDARD.decode(msg)?; - let inner = goval::token::ReplToken::decode(_inner.as_slice())?; + let inner = goval::token::ReplToken::decode(general_purpose::STANDARD.decode(msg)?.as_slice())?; match inner.presenced { Some(user) => Ok(ClientInfo { diff --git a/src/repldb_server.rs b/src/repldb_server.rs index 5ecff11..86b8092 100644 --- a/src/repldb_server.rs +++ b/src/repldb_server.rs @@ -43,15 +43,15 @@ pub async fn start_server() -> Result<()> { Ok(()) } -async fn set_value(Form(data): Form>) -> StatusCode { +async fn set_value(Form(mut data): Form>) -> StatusCode { let database = crate::DATABASE .get() .expect("DATABASE is known to be set or else repldb server is disabled"); - for (key, value) in data.iter() { + for (key, value) in data.drain() { let active: repldb::ActiveModel = repldb::ActiveModel { - key: sea_orm::ActiveValue::Set(key.clone()), - value: sea_orm::ActiveValue::Set(value.clone()), + key: sea_orm::ActiveValue::Set(key), + value: sea_orm::ActiveValue::Set(value), }; let result = repldb::Entity::insert(active) @@ -84,12 +84,12 @@ async fn get_value(Path(key): Path) -> (StatusCode, String) { match result { Ok(value) => match value { - None => (StatusCode::NOT_FOUND, "".to_string()), + None => (StatusCode::NOT_FOUND, String::new()), Some(data) => (StatusCode::OK, data.value), }, Err(err) => { error!(?err, "Encountered error reading key from database"); - (StatusCode::INTERNAL_SERVER_ERROR, "".to_string()) + (StatusCode::INTERNAL_SERVER_ERROR, String::new()) } } } @@ -122,9 +122,8 @@ struct ListKeys { } async fn list_keys(Query(__prefix): Query) -> (StatusCode, String) { - let prefix = match __prefix.prefix { - Some(prefix) => prefix, - None => return (StatusCode::OK, "".to_string()), + let Some(prefix) = __prefix.prefix else { + return (StatusCode::OK, String::new()); }; let database = crate::DATABASE @@ -138,20 +137,20 @@ async fn list_keys(Query(__prefix): Query) -> (StatusCode, String) { match result { Ok(value) => { - let mut keys = "".to_string(); + let mut keys = String::new(); for (index, info) in value.iter().enumerate() { if index != 0 { - keys += "\n" + keys += "\n"; } - keys += &info.key + keys += &info.key; } (StatusCode::OK, keys) } Err(err) => { error!(?err, "Encountered error listing keys in database"); - (StatusCode::INTERNAL_SERVER_ERROR, "".to_string()) + (StatusCode::INTERNAL_SERVER_ERROR, String::new()) } } } diff --git a/src/replspace_server.rs b/src/replspace_server.rs index 5467774..c27fc6a 100644 --- a/src/replspace_server.rs +++ b/src/replspace_server.rs @@ -21,12 +21,8 @@ pub async fn start_server() -> Result<()> { .route("/files/open", post(open_file)) .route("/github/token", get(get_gh_token)); - let listener = tokio::net::TcpListener::bind(&"127.0.0.1:8283".parse::()?) - .await - .unwrap(); - axum::serve(listener, app.into_make_service()) - .await - .unwrap(); + let listener = tokio::net::TcpListener::bind(&"127.0.0.1:8283".parse::()?).await?; + axum::serve(listener, app.into_make_service()).await?; Ok(()) } @@ -48,9 +44,9 @@ struct GithubTokenReq { channel: i32, } -async fn get_gh_token(_query: Option>) -> (StatusCode, Json) { +async fn get_gh_token(query: Option>) -> (StatusCode, Json) { let session; - if let Some(query) = _query { + if let Some(query) = query { debug!(channel = query.channel, "Got git askpass"); let last_session = crate::LAST_SESSION_USING_CHANNEL.read().await; @@ -78,35 +74,29 @@ async fn get_gh_token(_query: Option>) -> (StatusCode, Jso let msg = rx.recv().await; rx.close(); - let res = match msg { - Some(token) => token, - None => { - error!("rx#recv() returned None in gh get token"); - return ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(GithubTokenRes { - status: ReplspaceStatus::Err, - token: None, - }), - ); - } + let Some(res) = msg else { + error!("rx#recv() returned None in gh get token"); + return ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(GithubTokenRes { + status: ReplspaceStatus::Err, + token: None, + }), + ); }; - let token = match res { - ReplspaceMessage::GithubTokenRes(token) => token, - _ => { - error!( - result = ?res, - "Got unexpected result in replspace api github token fetcher" - ); - return ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(GithubTokenRes { - status: ReplspaceStatus::Err, - token: None, - }), - ); - } + let ReplspaceMessage::GithubTokenRes(token) = res else { + error!( + result = ?res, + "Got unexpected result in replspace api github token fetcher" + ); + return ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(GithubTokenRes { + status: ReplspaceStatus::Err, + token: None, + }), + ); }; ( @@ -154,13 +144,13 @@ async fn open_file(Json(query): Json) -> (StatusCode, Json) -> (StatusCode, Json token, - None => { - error!("rx#none() returned none in replspace api open file fetcher"); - return ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(OpenFileRes { - status: ReplspaceStatus::Err, - }), - ); - } + + let Some(res) = msg else { + error!("rx#none() returned none in replspace api open file fetcher"); + return ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(OpenFileRes { + status: ReplspaceStatus::Err, + }), + ); }; - match res { - ReplspaceMessage::OpenFileRes => ( + if let ReplspaceMessage::OpenFileRes = res { + ( StatusCode::OK, Json(OpenFileRes { status: ReplspaceStatus::Ok, }), - ), - _ => { - error!( - result = ?res, - "Got unexpected result in replspace api github token fetcher" - ); - ( - StatusCode::INTERNAL_SERVER_ERROR, - Json(OpenFileRes { - status: ReplspaceStatus::Err, - }), - ) - } + ) + } else { + error!( + result = ?res, + "Got unexpected result in replspace api github token fetcher" + ); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(OpenFileRes { + status: ReplspaceStatus::Err, + }), + ) } }