diff --git a/Cargo.lock b/Cargo.lock index 9a64406..2b7b187 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,21 +13,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - -[[package]] -name = "ahash" -version = "0.8.11" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" @@ -55,9 +43,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -70,44 +58,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", - "once_cell", + "once_cell_polyfill", "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "arraydeque" @@ -148,9 +136,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "16c74e56284d2188cabb6ad99603d1ace887a5d7e7b695d01b728155ed9ed427" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -160,14 +148,15 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", + "pin-project-lite", "slab", ] @@ -177,7 +166,7 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.4.0", "async-executor", "async-io", "async-lock", @@ -188,9 +177,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" dependencies = [ "async-lock", "cfg-if", @@ -227,11 +216,11 @@ dependencies = [ [[package]] name = "async-process" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.4.0", "async-io", "async-lock", "async-signal", @@ -246,9 +235,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" dependencies = [ "async-io", "async-lock", @@ -264,9 +253,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" dependencies = [ "async-attributes", "async-channel 1.9.0", @@ -298,13 +287,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -315,15 +304,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -331,7 +320,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -348,9 +337,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "block-buffer" @@ -367,7 +356,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.4.0", "async-task", "futures-io", "futures-lite", @@ -376,56 +365,50 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" - -[[package]] -name = "byteorder" -version = "1.5.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.10" +version = "1.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" +checksum = "4ad45f4f74e4e20eaa392913b7b33a7091c87e59628f4dd27888205ad888843c" dependencies = [ "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets", + "windows-link", ] [[package]] name = "clap" -version = "4.5.27" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" dependencies = [ "clap_builder", "clap_derive", @@ -433,9 +416,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" dependencies = [ "anstream", "anstyle", @@ -446,27 +429,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "concurrent-queue" @@ -479,9 +462,9 @@ dependencies = [ [[package]] name = "console" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" dependencies = [ "encode_unicode", "libc", @@ -490,6 +473,35 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +dependencies = [ + "cookie", + "document-features", + "idna", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -544,18 +556,18 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" dependencies = [ "memchr", ] [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", @@ -563,27 +575,36 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.104", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", ] [[package]] @@ -604,7 +625,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -614,7 +635,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -649,7 +670,16 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", +] + +[[package]] +name = "document-features" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +dependencies = [ + "litrs", ] [[package]] @@ -679,31 +709,31 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -725,9 +755,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener 5.4.0", "pin-project-lite", @@ -753,9 +783,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -767,6 +797,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -818,7 +854,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] @@ -862,25 +898,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", ] [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -891,7 +927,7 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git-ar" -version = "1.1.3" +version = "1.1.6" dependencies = [ "anyhow", "chrono", @@ -914,7 +950,7 @@ dependencies = [ "serde_json", "sha2", "tempfile", - "thiserror 2.0.11", + "thiserror 2.0.12", "toml", "ureq", "yaml-rust2", @@ -934,26 +970,20 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ - "ahash", + "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" - [[package]] name = "hashlink" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown", ] [[package]] @@ -964,9 +994,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "http" @@ -979,6 +1009,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -986,15 +1027,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" @@ -1029,12 +1070,6 @@ dependencies = [ "url", ] -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.32" @@ -1045,7 +1080,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", @@ -1060,14 +1095,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -1083,21 +1119,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1106,31 +1143,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1138,67 +1155,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.96", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -1218,9 +1222,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1228,12 +1232,23 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown", +] + +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags", + "cfg-if", + "libc", ] [[package]] @@ -1263,9 +1278,33 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] name = "js-sys" @@ -1300,15 +1339,15 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" dependencies = [ "bitflags", "libc", @@ -1317,51 +1356,63 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.4" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "litrs" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" [[package]] name = "log" -version = "0.4.25" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" dependencies = [ "value-bag", ] [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" version = "0.2.19" @@ -1382,9 +1433,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "open" @@ -1446,9 +1503,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.4" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" dependencies = [ "cfg-if", "concurrent-queue", @@ -1459,49 +1516,84 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" -version = "0.8.5" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ - "libc", "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" -version = "0.3.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", "rand_core", @@ -1509,18 +1601,18 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.3.3", ] [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ "bitflags", ] @@ -1556,30 +1648,29 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustix" -version = "0.38.44" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ "bitflags", "errno", @@ -1590,9 +1681,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.22" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "log", "once_cell", @@ -1603,17 +1694,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ "ring", "rustls-pki-types", @@ -1622,41 +1725,41 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -1676,18 +1779,18 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -1708,9 +1811,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] @@ -1723,35 +1826,26 @@ checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -1783,9 +1877,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -1794,24 +1888,23 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "tempfile" -version = "3.16.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.3", "once_cell", "rustix", "windows-sys 0.59.0", @@ -1819,9 +1912,9 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" dependencies = [ "rustix", "windows-sys 0.59.0", @@ -1838,11 +1931,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl 2.0.11", + "thiserror-impl 2.0.12", ] [[package]] @@ -1853,35 +1946,65 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "thiserror-impl" -version = "2.0.11" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", ] [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -1889,15 +2012,17 @@ dependencies = [ [[package]] name = "tokio" -version = "1.43.0" +version = "1.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +checksum = "1140bb80481756a8cbe10541f37433b459c5aa1e727b4c020fbfebdc25bf3ec4" dependencies = [ "backtrace", + "io-uring", "libc", "mio", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", "windows-sys 0.52.0", @@ -1911,14 +2036,14 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "toml" -version = "0.8.19" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", @@ -1928,26 +2053,33 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.23" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", + "toml_write", "winnow", ] +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "tower-service" version = "0.3.3" @@ -1966,9 +2098,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", ] @@ -1981,21 +2113,21 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "untrusted" @@ -2005,20 +2137,35 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.12.1" +version = "3.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +checksum = "9f0fde9bc91026e381155f8c67cb354bcd35260b2f4a29bcc84639f762760c39" dependencies = [ "base64 0.22.1", + "cookie_store", "flate2", "log", - "once_cell", + "percent-encoding", "rustls", + "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", - "url", - "webpki-roots", + "ureq-proto", + "utf-8", + "webpki-roots 0.26.11", +] + +[[package]] +name = "ureq-proto" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59db78ad1923f2b1be62b6da81fe80b173605ca0d57f85da2e005382adf693f7" +dependencies = [ + "base64 0.22.1", + "http 1.3.1", + "httparse", + "log", ] [[package]] @@ -2033,10 +2180,10 @@ dependencies = [ ] [[package]] -name = "utf16_iter" -version = "1.0.5" +name = "utf-8" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8_iter" @@ -2052,9 +2199,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "value-bag" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" [[package]] name = "version_check" @@ -2073,15 +2220,15 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ "wit-bindgen-rt", ] @@ -2108,7 +2255,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -2143,7 +2290,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2169,20 +2316,79 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.8" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.1", +] + +[[package]] +name = "webpki-roots" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" dependencies = [ "rustls-pki-types", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows-targets", + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", ] [[package]] @@ -2191,7 +2397,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2200,7 +2406,16 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", ] [[package]] @@ -2209,14 +2424,30 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -2225,83 +2456,125 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" -version = "0.7.0" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" dependencies = [ "memchr", ] [[package]] name = "wit-bindgen-rt" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ "bitflags", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "yaml-rust2" -version = "0.9.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1a1c0bc9823338a3bdf8c61f994f23ac004c6fa32c08cd152984499b445e8d" +checksum = "4ce2a4ff45552406d02501cea6c18d8a7e50228e7736a872951fe2fe75c91be7" dependencies = [ "arraydeque", "encoding_rs", @@ -2310,9 +2583,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -2322,55 +2595,54 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", "synstructure", ] @@ -2380,11 +2652,22 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -2393,11 +2676,11 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.104", ] diff --git a/Cargo.toml b/Cargo.toml index d05e927..234d1cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "git-ar" -version = "1.1.3" +version = "1.1.6" edition = "2021" license = "MIT" @@ -21,33 +21,33 @@ authors = ["Jordi Carrillo "] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -ureq = { version = "2.12.1", features = ["json"] } +ureq = { version = "3.0.12", features = ["json"] } serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.134" +serde_json = "1.0.140" lazy_static = "1.5" regex = "1.11.1" -sha2 = "0.10.8" +sha2 = "0.10.9" dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } -console = "0.15.10" -clap = { version = "4.5.23", features = ["derive", "wrap_help"] } -open = "5.3.1" -thiserror = "2.0.9" -anyhow = "1.0.95" -flate2 = "1.0.35" +console = "0.15.11" +clap = { version = "4.5.40", features = ["derive", "wrap_help"] } +open = "5.3.2" +thiserror = "2.0.12" +anyhow = "1.0.98" +flate2 = "1.1.2" derive_builder = "0.20.2" -chrono = "0.4.39" +chrono = "0.4.41" csv = "1.3.1" -log = "0.4.22" -env_logger = "0.11.6" -yaml-rust2 = "0.9.0" -rand = "0.8.5" +log = "0.4.27" +env_logger = "0.11.8" +yaml-rust2 = "0.10.3" +rand = "0.9.1" paste = "1.0" -toml = "0.8.19" +toml = "0.8.23" [dev-dependencies] # disable basic-cookies from httpmock - not needed httpmock = { version = "0.7.0", default-features = false } -tempfile = "3.14.0" +tempfile = "3.20.0" filetime = "0.2" [[bin]] diff --git a/contracts/gitlab/get_user_info.json b/contracts/gitlab/get_user_info.json index d4526db..453514d 100644 --- a/contracts/gitlab/get_user_info.json +++ b/contracts/gitlab/get_user_info.json @@ -10,7 +10,6 @@ "bio": "", "location": "", "public_email": "", - "skype": "", "linkedin": "", "twitter": "", "discord": "", diff --git a/contracts/gitlab/list_project_jobs.json b/contracts/gitlab/list_project_jobs.json index 7aea0f0..862b445 100644 --- a/contracts/gitlab/list_project_jobs.json +++ b/contracts/gitlab/list_project_jobs.json @@ -106,7 +106,6 @@ "bio": null, "location": null, "public_email": "", - "skype": "", "linkedin": "", "twitter": "", "website_url": "", @@ -169,7 +168,6 @@ "bio": null, "location": null, "public_email": "", - "skype": "", "linkedin": "", "twitter": "", "website_url": "", diff --git a/doc/src/configuration.md b/doc/src/configuration.md index b8cea27..2534abf 100644 --- a/doc/src/configuration.md +++ b/doc/src/configuration.md @@ -149,14 +149,14 @@ members = [ ### Per project merge request configurations If you want to have different members in different projects, you can do so by -adding the following section `[.merge_requests._]`. +adding the following section `[._.merge_requests]`. Basically the path `/` is replaced by `_`. Ex. `jordilin/gitar` becomes `jordilin_gitar`. Same for subgroups: `group_subgroup_projectname`. Example: ```toml -[ github_com.merge_requests.jordilin_gitar ] +[ github_com.jordilin_gitar.merge_requests ] members = [] ``` diff --git a/flake.lock b/flake.lock index 0d623a0..d40d2c6 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1737689766, - "narHash": "sha256-ivVXYaYlShxYoKfSo5+y5930qMKKJ8CLcAoIBPQfJ6s=", + "lastModified": 1751562746, + "narHash": "sha256-smpugNIkmDeicNz301Ll1bD7nFOty97T79m4GUMUczA=", "owner": "ipetkov", "repo": "crane", - "rev": "6fe74265bbb6d016d663b1091f015e2976c4a527", + "rev": "aed2020fd3dc26e1e857d4107a5a67a33ab6c1fd", "type": "github" }, "original": { @@ -35,11 +35,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1738142207, - "narHash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=", + "lastModified": 1751271578, + "narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9d3ae807ebd2981d593cddd0080856873139aa40", + "rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df", "type": "github" }, "original": { @@ -51,11 +51,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1736320768, - "narHash": "sha256-nIYdTAiKIGnFNugbomgBJR+Xv5F1ZQU+HfaBqJKroC0=", + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4bc9c909d9ac828a039f288cf872d16d38185db8", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", "type": "github" }, "original": { @@ -78,11 +78,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1738290352, - "narHash": "sha256-YKOHUmc0Clm4tMV8grnxYL4IIwtjTayoq/3nqk0QM7k=", + "lastModified": 1751596734, + "narHash": "sha256-1tQOwmn3jEUQjH0WDJyklC+hR7Bj+iqx6ChtRX2QiPA=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "b031b584125d33d23a0182f91ddbaf3ab4880236", + "rev": "e28ba067a9368286a8bc88b68dc2ca92181a09f0", "type": "github" }, "original": { diff --git a/src/api_traits.rs b/src/api_traits.rs index 36e8996..eddf044 100644 --- a/src/api_traits.rs +++ b/src/api_traits.rs @@ -164,7 +164,7 @@ impl NumberDeltaErr { impl Display for NumberDeltaErr { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let (start, end) = self.compute_interval(); - write!(f, "({}, {})", start, end) + write!(f, "({start}, {end})") } } @@ -227,7 +227,7 @@ impl FromStr for ApiOperation { "single_page" => Ok(ApiOperation::SinglePage), "gist" => Ok(ApiOperation::Gist), "repository_tag" => Ok(ApiOperation::RepositoryTag), - _ => Err(format!("Unknown ApiOperation: {}", s)), + _ => Err(format!("Unknown ApiOperation: {s}")), } } } diff --git a/src/cache/filesystem.rs b/src/cache/filesystem.rs index 7ab7301..3ff4ea8 100644 --- a/src/cache/filesystem.rs +++ b/src/cache/filesystem.rs @@ -41,16 +41,14 @@ impl FileCache { if !path.exists() { return Err(GRError::CacheLocationDoesNotExist(format!( - "Cache directory does not exist: {}", - cache_location + "Cache directory does not exist: {cache_location}" )) .into()); } if !path.is_dir() { return Err(GRError::CacheLocationIsNotADirectory(format!( - "Cache location is not a directory: {}", - cache_location + "Cache location is not a directory: {cache_location}" )) .into()); } @@ -71,8 +69,7 @@ impl FileCache { } Err(e) => { return Err(GRError::CacheLocationIsNotWriteable(format!( - "No write permission for cache directory {}: {}", - cache_location, e + "No write permission for cache directory {cache_location}: {e}" )) .into()); } @@ -86,7 +83,7 @@ impl FileCache { let hash = hasher.finalize(); let cache_location = self.config.cache_location().unwrap(); let location = cache_location.strip_suffix('/').unwrap_or(cache_location); - format!("{}/{:x}", location, hash) + format!("{location}/{hash:x}") } fn get_cache_data(&self, mut reader: impl BufRead) -> Result { @@ -103,10 +100,7 @@ impl FileCache { // parse error in here could be hard to find/debug. Send a clear // error trace over to the client. // TODO should we just treat it as a cache miss? - let trace = format!( - "Could not parse the response status code from cache {}", - err - ); + let trace = format!("Could not parse the response status code from cache {err}"); return Err(error::gen(trace)); } }; diff --git a/src/cli/cicd.rs b/src/cli/cicd.rs index b62b87e..30f5b78 100644 --- a/src/cli/cicd.rs +++ b/src/cli/cicd.rs @@ -267,7 +267,7 @@ impl From for RunnerOptions { impl From for RunnerOptions { fn from(options: RunnerPostData) -> Self { if let Err(e) = options.validate_runner_type_id() { - eprintln!("{}", e); + eprintln!("{e}"); std::process::exit(2); }; RunnerOptions::Create( @@ -393,7 +393,7 @@ mod test { options.tags, Some(vec!["tag1".to_string(), "tag2".to_string()]) ); - assert_eq!(options.all, true); + assert!(options.all); assert_eq!(options.list_args.from_page, Some(1)); assert_eq!(options.list_args.to_page, Some(2)); options @@ -405,7 +405,7 @@ mod test { RunnerOptions::List(args) => { assert_eq!(args.status, RunnerStatus::Online); assert_eq!(args.tags, Some("tag1,tag2".to_string())); - assert_eq!(args.all, true); + assert!(args.all); assert_eq!(args.list_args.from_page, Some(1)); assert_eq!(args.list_args.to_page, Some(2)); } diff --git a/src/cli/user.rs b/src/cli/user.rs index a2ded0f..2947f37 100644 --- a/src/cli/user.rs +++ b/src/cli/user.rs @@ -57,7 +57,7 @@ mod tests { #[test] fn test_user_command() { - let args = Args::parse_from(&["gr", "us", "get", "octocat"]); + let args = Args::parse_from(["gr", "us", "get", "octocat"]); let user_command = match args.command { Command::User(cmd) => cmd, _ => panic!("Expected user command"), diff --git a/src/cmds/amps.rs b/src/cmds/amps.rs index 67fb573..58e314a 100644 --- a/src/cmds/amps.rs +++ b/src/cmds/amps.rs @@ -37,7 +37,7 @@ pub fn execute(options: AmpsOptions, config_file: ConfigFilePath) -> Result<()> let runner = shell::BlockingCommand; let amps = list_amps(runner, amps_scripts.to_str().unwrap())?; for amp in amps { - println!("{}", amp); + println!("{amp}"); } Ok(()) } @@ -52,9 +52,8 @@ fn list_amps( let response = runner.run(cmd)?; if response.body.is_empty() { return Err(GRError::PreconditionNotMet(format!( - "No amps are available in {}. Please check \ - https://github.com/jordilin/gitar-amps for installation instructions", - amps_path + "No amps are available in {amps_path}. Please check \ + https://github.com/jordilin/gitar-amps for installation instructions" )) .into()); } diff --git a/src/cmds/browse.rs b/src/cmds/browse.rs index 1f22143..6fbc630 100644 --- a/src/cmds/browse.rs +++ b/src/cmds/browse.rs @@ -16,7 +16,7 @@ pub fn execute( BrowseOptions::Repo => { // No need to contact the remote object, domain and path already // computed. - let remote_url = format!("https://{}/{}", domain, path); + let remote_url = format!("https://{domain}/{path}"); Ok(open::that(remote_url)?) } BrowseOptions::MergeRequests => { diff --git a/src/cmds/cicd.rs b/src/cmds/cicd.rs index 2c21e8d..9fe7825 100644 --- a/src/cmds/cicd.rs +++ b/src/cmds/cicd.rs @@ -107,7 +107,7 @@ impl YamlBytes<'_> { impl Display for YamlBytes<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let s = String::from_utf8_lossy(self.0); - write!(f, "{}", s) + write!(f, "{s}") } } @@ -262,7 +262,7 @@ fn create_runner( mut writer: W, ) -> Result<()> { let response = remote.create(cli_args)?; - writeln!(writer, "{}", response)?; + writeln!(writer, "{response}")?; Ok(()) } @@ -430,7 +430,7 @@ pub fn execute( let body = read_ci_file(file)?; let parser = YamlParser::new(load_yaml(&String::from_utf8_lossy(&body))); let chart = generate_mermaid_stages_diagram(parser, args)?; - println!("{}", chart); + println!("{chart}"); Ok(()) } PipelineOptions::List(cli_args) => { @@ -572,14 +572,14 @@ fn lint_ci_file( if line.is_empty() { continue; } - writeln!(writer, "{}", line)?; + writeln!(writer, "{line}")?; } return Ok(()); } writeln!(writer, "File is valid.")?; } else { for error in response.errors { - writeln!(writer, "{}", error)?; + writeln!(writer, "{error}")?; } return Err(error::gen("Linting failed.")); } @@ -629,7 +629,7 @@ mod test { if self.error { return Err(error::gen("Error")); } - return Ok(self.num_pages); + Ok(self.num_pages) } fn num_resources(&self) -> Result> { @@ -737,7 +737,7 @@ mod test { #[test] fn test_list_number_of_pipelines_pages() { - let pp_remote = PipelineMock::builder().num_pages(3 as u32).build().unwrap(); + let pp_remote = PipelineMock::builder().num_pages(3_u32).build().unwrap(); let mut buf = Vec::new(); num_cicd_pages(Arc::new(pp_remote), &mut buf).unwrap(); assert_eq!("3\n", String::from_utf8(buf).unwrap(),) diff --git a/src/cmds/cicd/mermaid.rs b/src/cmds/cicd/mermaid.rs index 61e11f0..2b2299a 100644 --- a/src/cmds/cicd/mermaid.rs +++ b/src/cmds/cicd/mermaid.rs @@ -277,7 +277,7 @@ impl CicdParser for YamlParser { for val_matrix in all_values { for val in val_matrix { parallel_jobs - .push(Job::new(&format!("{}-{}", job_name, val), rules.clone())) + .push(Job::new(&format!("{job_name}-{val}"), rules.clone())) } } } @@ -347,7 +347,7 @@ impl Mermaid { impl Display for Mermaid { fn fmt(&self, f: &mut Formatter) -> fmt::Result { for line in self.buf.iter() { - writeln!(f, "{}", line)?; + writeln!(f, "{line}")?; } Ok(()) } @@ -396,9 +396,9 @@ pub fn generate_mermaid_stages_diagram( if chart_type == ChartType::StagesWithJobs { mermaid.push(format!(" state {}{}", stage_name, "{")); - let anchor_name = format!("anchorT{}", i); + let anchor_name = format!("anchorT{i}"); mermaid.push(" direction LR".to_string()); - mermaid.push(format!(" state \"jobs\" as {}", anchor_name)); + mermaid.push(format!(" state \"jobs\" as {anchor_name}")); for job in jobs.iter() { mermaid.push(format!(" state \"{}\" as {}", job.name, anchor_name)); } @@ -435,7 +435,7 @@ pub fn generate_mermaid_stages_diagram( if rules_compatible(&job.rules, &next_job.rules) { match chart_type { ChartType::StagesWithJobs | ChartType::Stages => { - mermaid.push(format!(" {} --> {}", stage_name, next_stage_name)); + mermaid.push(format!(" {stage_name} --> {next_stage_name}")); // break as we know this stage is compatible break 'stages; } diff --git a/src/cmds/common.rs b/src/cmds/common.rs index e34ac3c..57eb2ab 100644 --- a/src/cmds/common.rs +++ b/src/cmds/common.rs @@ -85,12 +85,9 @@ pub fn process_num_metadata( resource_name: MetadataName, mut writer: W, ) -> Result<()> { - let none_msg_info = format!( - "Number of {resource_name} not available.\n", - resource_name = resource_name - ); + let none_msg_info = format!("Number of {resource_name} not available.\n"); match num_metadata { - Ok(Some(count)) => writer.write_all(format!("{total}\n", total = count).as_bytes())?, + Ok(Some(count)) => writer.write_all(format!("{count}\n").as_bytes())?, Ok(None) => { writer.write_all(none_msg_info.as_bytes())?; } diff --git a/src/cmds/docker.rs b/src/cmds/docker.rs index dcc650d..6b16fec 100644 --- a/src/cmds/docker.rs +++ b/src/cmds/docker.rs @@ -304,7 +304,7 @@ mod tests { fn get_image_metadata(&self, _repository_id: i64, tag: &str) -> Result { let metadata = ImageMetadata::builder() .name(tag.to_string()) - .location(format!("registry.gitlab.com/namespace/project:{}", tag)) + .location(format!("registry.gitlab.com/namespace/project:{tag}")) .short_sha("12345678".to_string()) .size(100) .created_at("2021-01-01T00:00:00Z".to_string()) diff --git a/src/cmds/merge_request.rs b/src/cmds/merge_request.rs index b8981fd..90ec702 100644 --- a/src/cmds/merge_request.rs +++ b/src/cmds/merge_request.rs @@ -1,3 +1,5 @@ +use rand::Rng; + use crate::api_traits::{CommentMergeRequest, MergeRequest, RemoteProject, Timestamp}; use crate::cli::merge_request::MergeRequestOptions; use crate::config::ConfigProperties; @@ -135,7 +137,7 @@ impl TryFrom<&str> for MergeRequestState { "opened" => Ok(MergeRequestState::Opened), "closed" => Ok(MergeRequestState::Closed), "merged" => Ok(MergeRequestState::Merged), - _ => Err(format!("Invalid merge request state: {}", s)), + _ => Err(format!("Invalid merge request state: {s}")), } } } @@ -512,8 +514,7 @@ pub fn get_reader_file_cli(file_path: &str) -> Result Result { let mut title = mr_body.repo.title().to_string(); if cli_args.draft { - title = format!("DRAFT: {}", title); + title = format!("DRAFT: {title}"); } // In Gitlab it is required to gather the user ID for the assignee and // reviewer. @@ -628,7 +629,7 @@ fn user_prompt_confirmation( if num_members == 0 { None } else { - let rand_index = rand::random::(); + let rand_index = rand::rng().random_range(0..num_members); let rand_user = members[rand_index % num_members].clone(); Some(rand_user) } @@ -755,9 +756,9 @@ fn summary(mr_body: MergeRequestBody, cli_args: &MergeRequestCliArgs) -> Result< .into()); } if cli_args.gpt_prompt { - println!("{}", GPT_PROMPT); + println!("{GPT_PROMPT}"); } - println!("\n{}", outgoing_commits); + println!("\n{outgoing_commits}"); Ok(()) } @@ -874,7 +875,7 @@ fn build_description(description: &str, signature: &str) -> String { if signature.is_empty() { return description.to_string(); } - format!("{}\n\n{}", description, signature) + format!("{description}\n\n{signature}") } #[derive(Builder)] @@ -921,9 +922,8 @@ fn get_repo_project_info(cmds: Vec>) -> Result { fn in_feature_branch(current_branch: &str, upstream_branch: &str) -> Result<()> { if current_branch == upstream_branch { let trace = format!( - "Current branch {} is the same as the upstream \ - remote {}. Please use a feature branch", - current_branch, upstream_branch + "Current branch {current_branch} is the same as the upstream \ + remote {upstream_branch}. Please use a feature branch" ); return Err(GRError::PreconditionNotMet(trace).into()); } @@ -932,9 +932,8 @@ fn in_feature_branch(current_branch: &str, upstream_branch: &str) -> Result<()> match current_branch { "master" | "main" | "develop" => { let trace = format!( - "Current branch is {}, which could be a release upstream branch. \ - Please use a different feature branch name", - current_branch + "Current branch is {current_branch}, which could be a release upstream branch. \ + Please use a different feature branch name" ); Err(GRError::PreconditionNotMet(trace).into()) } @@ -1631,7 +1630,7 @@ mod tests { .unwrap(); let reader = Cursor::new("comment"); assert!(create_comment(remote.clone(), cli_args, Some(reader)).is_ok()); - assert!(remote.comment_called.lock().unwrap().clone()); + assert!(*remote.comment_called.lock().unwrap()); assert_eq!( "All features complete, ship it", remote.comment_argument.lock().unwrap().clone(), @@ -1649,7 +1648,7 @@ mod tests { .unwrap(); let reader = Cursor::new("Just a long, long comment from a file"); assert!(create_comment(remote.clone(), cli_args, Some(reader)).is_ok()); - assert!(remote.comment_called.lock().unwrap().clone()); + assert!(*remote.comment_called.lock().unwrap()); assert_eq!( "Just a long, long comment from a file", remote.comment_argument.lock().unwrap().clone(), @@ -1660,19 +1659,13 @@ mod tests { impl Read for ErrorReader { fn read(&mut self, _buf: &mut [u8]) -> std::io::Result { - Err(std::io::Error::new( - std::io::ErrorKind::Other, - "Error reading from reader", - )) + Err(std::io::Error::other("Error reading from reader")) } } impl BufRead for ErrorReader { fn fill_buf(&mut self) -> std::io::Result<&[u8]> { - Err(std::io::Error::new( - std::io::ErrorKind::Other, - "Error reading from reader", - )) + Err(std::io::Error::other("Error reading from reader")) } fn consume(&mut self, _amt: usize) {} } diff --git a/src/cmds/project.rs b/src/cmds/project.rs index 39f026d..07a99ab 100644 --- a/src/cmds/project.rs +++ b/src/cmds/project.rs @@ -360,10 +360,10 @@ mod test { impl RemoteProject for ProjectDataProvider { fn get_project_data(&self, id: Option, path: Option<&str>) -> crate::Result { - if let Some(_) = id { + if id.is_some() { *self.project_data_with_id_called.borrow_mut() = true; } - if let Some(_) = path { + if path.is_some() { *self.project_data_with_path_called.borrow_mut() = true; } if self.error { @@ -437,7 +437,7 @@ mod test { .build() .unwrap(); project_info(remote.clone(), &mut writer, cli_args).unwrap(); - assert!(writer.len() > 0); + assert!(!writer.is_empty()); assert!(*remote.project_data_with_id_called.borrow()); } @@ -457,7 +457,7 @@ mod test { .build() .unwrap(); project_info(remote.clone(), &mut writer, cli_args).unwrap(); - assert!(writer.len() > 0); + assert!(!writer.is_empty()); assert!(*remote.project_data_with_path_called.borrow()); } @@ -477,7 +477,7 @@ mod test { .build() .unwrap(); project_info(remote, &mut writer, cli_args).unwrap_err(); - assert!(writer.len() == 0); + assert!(writer.is_empty()); } #[test] diff --git a/src/config.rs b/src/config.rs index fcbba39..b9d4e88 100644 --- a/src/config.rs +++ b/src/config.rs @@ -138,7 +138,7 @@ pub struct ConfigFile { pub fn env_token(domain: &str) -> Result { let env_domain = env_var(domain); - Ok(std::env::var(format!("{}_API_TOKEN", env_domain))?) + Ok(std::env::var(format!("{env_domain}_API_TOKEN"))?) } fn env_var(domain: &str) -> String { @@ -185,8 +185,7 @@ impl ConfigFile { if domain_config.api_token.is_none() { domain_config.api_token = Some(env(domain).map_err(|_| { GRError::PreconditionNotMet(format!( - "No api_token found for domain {} in config or environment variable", - domain + "No api_token found for domain {domain} in config or environment variable" )) })?); } @@ -197,8 +196,7 @@ impl ConfigFile { }) } else { Err(error::gen(format!( - "No config data found for domain {}", - domain + "No config data found for domain {domain}" ))) } } diff --git a/src/dialog.rs b/src/dialog.rs index ce63080..dd6fab0 100644 --- a/src/dialog.rs +++ b/src/dialog.rs @@ -199,11 +199,11 @@ pub fn show_input(prompt: &str, data: &str, new_line: bool, font_style: Style) { prompt_style = prompt_style.bold() } if new_line { - println!("{}", prompt_style); - println!("\n{}\n", data); + println!("{prompt_style}"); + println!("\n{data}\n"); } else { - print!("{}: ", prompt_style); - println!("{}", data) + print!("{prompt_style}: "); + println!("{data}") } } diff --git a/src/git.rs b/src/git.rs index ccab5a6..6435db2 100644 --- a/src/git.rs +++ b/src/git.rs @@ -219,7 +219,7 @@ pub fn push(runner: &impl TaskRunner, remote: &str, repo: &Repo, force: bool) -> } pub fn rebase(runner: &impl TaskRunner, remote_alias: &str) -> Result { - let cmd = format!("git rebase {}", remote_alias); + let cmd = format!("git rebase {remote_alias}"); let cmd_params = cmd.split(' ').collect::>(); runner.run(cmd_params)?; Ok(CmdInfo::Ignore) @@ -238,7 +238,7 @@ pub fn commit_message( } pub fn checkout(runner: &impl TaskRunner, branch: &str) -> Result<()> { - let git_cmd = format!("git checkout origin/{} -b {}", branch, branch); + let git_cmd = format!("git checkout origin/{branch} -b {branch}"); let cmd_params = ["/bin/sh", "-c", &git_cmd]; runner.run(cmd_params).err_context(format!( "Failed to git checkout remote branch. Command: {}", @@ -316,7 +316,7 @@ mod tests { let runner = Arc::new(MockRunner::new(vec![response])); let cmd_info = status(runner).unwrap(); if let CmdInfo::StatusModified(dirty) = cmd_info { - assert_eq!(true, dirty); + assert!(dirty); } else { panic!("Expected CmdInfo::StatusModified"); } @@ -334,7 +334,7 @@ mod tests { let runner = Arc::new(MockRunner::new(vec![response])); let cmd_info = status(runner).unwrap(); if let CmdInfo::StatusModified(dirty) = cmd_info { - assert_eq!(true, dirty); + assert!(dirty); } else { panic!("Expected CmdInfo::StatusModified"); } @@ -358,7 +358,7 @@ mod tests { let runner = Arc::new(MockRunner::new(vec![response])); let cmd_info = status(runner).unwrap(); if let CmdInfo::StatusModified(dirty) = cmd_info { - assert_eq!(false, dirty); + assert!(!dirty); } else { panic!("Expected CmdInfo::StatusModified"); } @@ -376,7 +376,7 @@ mod tests { let runner = Arc::new(MockRunner::new(vec![response])); let cmd_info = status(runner).unwrap(); if let CmdInfo::StatusModified(dirty) = cmd_info { - assert_eq!(false, dirty); + assert!(!dirty); } else { panic!("Expected CmdInfo::StatusModified"); } diff --git a/src/github.rs b/src/github.rs index c87dd9c..fdfc11c 100644 --- a/src/github.rs +++ b/src/github.rs @@ -29,7 +29,7 @@ impl Github { ) -> Self { let api_token = config.api_token().to_string(); let domain = domain.to_string(); - let rest_api_basepath = format!("https://api.{}", domain); + let rest_api_basepath = format!("https://api.{domain}"); Github { api_token, diff --git a/src/github/merge_request.rs b/src/github/merge_request.rs index 8876f79..92ff53a 100644 --- a/src/github/merge_request.rs +++ b/src/github/merge_request.rs @@ -145,7 +145,7 @@ impl> MergeRequest for Github { let reviewers = vec![args.reviewer.username.as_str()]; body.add("reviewers", &reviewers); let requested_reviewers_url = - format!("{}/{}/requested_reviewers", mr_url, id); + format!("{mr_url}/{id}/requested_reviewers"); let response = query::send_raw( &self.runner, @@ -185,7 +185,7 @@ impl> MergeRequest for Github { .into()); } let remote_pr_branch = format!("{}:{}", owner_path[0], args.source_branch); - let existing_mr_url = format!("{}?head={}", mr_url, remote_pr_branch); + let existing_mr_url = format!("{mr_url}?head={remote_pr_branch}"); let response = query::get_raw::<_, ()>( &self.runner, &existing_mr_url, @@ -483,7 +483,7 @@ impl From<&serde_json::Value> for GithubMergeRequestFields { .pipeline_url( merge_request_data["html_url"] .as_str() - .map(|url| format!("{}/checks", url)), + .map(|url| format!("{url}/checks")), ) .build() .unwrap(), diff --git a/src/github/project.rs b/src/github/project.rs index 4e47ad1..c206807 100644 --- a/src/github/project.rs +++ b/src/github/project.rs @@ -18,8 +18,7 @@ impl> RemoteProject for Github { // supported in their REST API. if let Some(id) = id { return Err(GRError::OperationNotSupported(format!( - "Getting project data by id is not supported in Github: {}", - id + "Getting project data by id is not supported in Github: {id}" )) .into()); }; @@ -60,11 +59,11 @@ impl> RemoteProject for Github { let base_url = format!("https://{}/{}", self.domain, self.path); match option { BrowseOptions::Repo => base_url, - BrowseOptions::MergeRequests => format!("{}/pulls", base_url), - BrowseOptions::MergeRequestId(id) => format!("{}/pull/{}", base_url, id), - BrowseOptions::Pipelines => format!("{}/actions", base_url), - BrowseOptions::PipelineId(id) => format!("{}/actions/runs/{}", base_url, id), - BrowseOptions::Releases => format!("{}/releases", base_url), + BrowseOptions::MergeRequests => format!("{base_url}/pulls"), + BrowseOptions::MergeRequestId(id) => format!("{base_url}/pull/{id}"), + BrowseOptions::Pipelines => format!("{base_url}/actions"), + BrowseOptions::PipelineId(id) => format!("{base_url}/actions/runs/{id}"), + BrowseOptions::Releases => format!("{base_url}/releases"), // Manual is only one URL and it's the user guide. Handled in the // browser command. BrowseOptions::Manual => unreachable!(), diff --git a/src/gitlab.rs b/src/gitlab.rs index cf8ecb5..43e5d50 100644 --- a/src/gitlab.rs +++ b/src/gitlab.rs @@ -38,13 +38,13 @@ impl Gitlab { let encoded_path = encode_path(path); let api_path = "api/v4"; let protocol = "https"; - let base_api_path = format!("{}://{}/{}", protocol, domain, api_path); - let base_user_url = format!("{}/user", base_api_path); - let base_users_url = format!("{}/users", base_api_path); - let base_runner_url = format!("{}/runners", base_api_path); - let merge_requests_url = format!("{}/merge_requests", base_api_path); - let base_project_url = format!("{}/projects", base_api_path); - let projects_base_url = format!("{}/{}", base_project_url, encoded_path); + let base_api_path = format!("{protocol}://{domain}/{api_path}"); + let base_user_url = format!("{base_api_path}/user"); + let base_users_url = format!("{base_api_path}/users"); + let base_runner_url = format!("{base_api_path}/runners"); + let merge_requests_url = format!("{base_api_path}/merge_requests"); + let base_project_url = format!("{base_api_path}/projects"); + let projects_base_url = format!("{base_project_url}/{encoded_path}"); Gitlab { api_token, domain, diff --git a/src/gitlab/cicd.rs b/src/gitlab/cicd.rs index 70e8aea..e180e54 100644 --- a/src/gitlab/cicd.rs +++ b/src/gitlab/cicd.rs @@ -826,7 +826,7 @@ mod test { assert!(result.is_ok()); let response = result.unwrap(); assert!(!response.valid); - assert!(response.errors.len() > 0); + assert!(!response.errors.is_empty()); } #[test] diff --git a/src/gitlab/merge_request.rs b/src/gitlab/merge_request.rs index ec7d3f0..902294a 100644 --- a/src/gitlab/merge_request.rs +++ b/src/gitlab/merge_request.rs @@ -860,10 +860,7 @@ mod test { ); } Err(e) => { - panic!( - "Expected Ok merge request approval but got: {:?} instead", - e - ); + panic!("Expected Ok merge request approval but got: {e:?} instead"); } } assert_eq!( diff --git a/src/gitlab/project.rs b/src/gitlab/project.rs index 1e1af03..99386d8 100644 --- a/src/gitlab/project.rs +++ b/src/gitlab/project.rs @@ -55,11 +55,11 @@ impl> RemoteProject for Gitlab { let base_url = format!("https://{}/{}", self.domain, self.path); match option { BrowseOptions::Repo => base_url, - BrowseOptions::MergeRequests => format!("{}/merge_requests", base_url), - BrowseOptions::MergeRequestId(id) => format!("{}/-/merge_requests/{}", base_url, id), - BrowseOptions::Pipelines => format!("{}/pipelines", base_url), - BrowseOptions::PipelineId(id) => format!("{}/-/pipelines/{}", base_url, id), - BrowseOptions::Releases => format!("{}/-/releases", base_url), + BrowseOptions::MergeRequests => format!("{base_url}/merge_requests"), + BrowseOptions::MergeRequestId(id) => format!("{base_url}/-/merge_requests/{id}"), + BrowseOptions::Pipelines => format!("{base_url}/pipelines"), + BrowseOptions::PipelineId(id) => format!("{base_url}/-/pipelines/{id}"), + BrowseOptions::Releases => format!("{base_url}/-/releases"), // Manual is only one URL and it's the user guide. Handled in the // browser command. BrowseOptions::Manual => unreachable!(), diff --git a/src/http.rs b/src/http.rs index cf8648f..afee331 100644 --- a/src/http.rs +++ b/src/http.rs @@ -19,7 +19,6 @@ use std::iter::Iterator; use std::rc::Rc; use std::sync::{Arc, Mutex}; use throttle::{ThrottleStrategy, ThrottleStrategyType}; -use ureq::Error; pub struct Client { cache: C, @@ -27,6 +26,7 @@ pub struct Client { refresh_cache: bool, time_to_ratelimit_reset: Mutex, remaining_requests: Mutex, + http_agent: ureq::Agent, } // TODO: provide builder pattern for Client. @@ -34,45 +34,63 @@ impl Client { pub fn new(cache: C, config: Arc, refresh_cache: bool) -> Self { let remaining_requests = Mutex::new(api_defaults::DEFAULT_NUMBER_REQUESTS_MINUTE); let time_to_ratelimit_reset = Mutex::new(now_epoch_seconds() + Seconds::new(60)); + let http_config = ureq::Agent::config_builder() + // Keeps same functionality as the ureq 2.x default. + // that is we handle the response as normal when error codes such as + // 4xx, 5xx are returned. + .http_status_as_error(false) + .build(); Client { cache, refresh_cache, config, time_to_ratelimit_reset, remaining_requests, + http_agent: http_config.into(), } } fn submit(&self, request: &Request) -> Result { - let ureq_req = match request.method { - Method::GET => ureq::get(request.url()), - Method::HEAD => ureq::head(request.url()), - Method::POST => ureq::post(request.url()), - Method::PATCH => ureq::patch(request.url()), - Method::PUT => ureq::put(request.url()), - }; - let ureq_req = request - .headers() - .iter() - .fold(ureq_req, |req, (key, value)| req.set(key, value)); - let call = || -> std::result::Result { - match request.method { - Method::GET | Method::HEAD => ureq_req.call(), - _ => ureq_req.send_json(serde_json::to_value(request.body).unwrap()), + let response = match request.method { + Method::GET => { + let req = self.http_agent.get(request.url()); + let req = Self::add_headers(req, request.headers()); + req.call() + } + Method::HEAD => { + let req = self.http_agent.head(request.url()); + let req = Self::add_headers(req, request.headers()); + req.call() + } + Method::POST => { + let req = self.http_agent.post(request.url()); + let req = Self::add_headers(req, request.headers()); + req.send_json(serde_json::to_value(request.body).unwrap()) + } + Method::PATCH => { + let req = self.http_agent.patch(request.url()); + let req = Self::add_headers(req, request.headers()); + req.send_json(serde_json::to_value(request.body).unwrap()) + } + Method::PUT => { + let req = self.http_agent.put(request.url()); + let req = Self::add_headers(req, request.headers()); + req.send_json(serde_json::to_value(request.body).unwrap()) } }; - match call() { - Ok(response) | Err(Error::Status(_, response)) => { - let status = response.status().into(); + + match response { + Ok(response) => { + let status = response.status(); // Grab headers for pagination and cache. let headers = response - .headers_names() + .headers() .iter() - .fold(Headers::new(), |mut headers, name| { - headers.set( - name.to_lowercase(), - response.header(name.as_str()).unwrap().to_string(), + .fold(Headers::new(), |mut headers, (name, value)| { + headers.set::( + name.to_string(), + value.to_str().unwrap().to_string(), ); headers }); @@ -81,20 +99,31 @@ impl Client { let flow_control_headers = FlowControlHeaders::new(page_header, rate_limit_header); // log debug response headers log_debug!("Response headers: {:?}", headers); - let body = response.into_string().unwrap_or_default(); + let mut body = response.into_body(); let mut response = HttpResponse::builder() - .status(status) - .body(body) + .status(status.as_u16() as i32) .headers(headers) + .body(body.read_to_string().unwrap_or_default()) .flow_control_headers(flow_control_headers) .build() .unwrap(); + self.handle_rate_limit(&mut response)?; Ok(response) } Err(err) => Err(GRError::HttpTransportError(err.to_string()).into()), } } + + fn add_headers( + mut builder: ureq::RequestBuilder, + headers: &Headers, + ) -> ureq::RequestBuilder { + for (key, value) in headers.iter() { + builder = builder.header(key, value); + } + builder + } } impl Client { @@ -549,7 +578,7 @@ mod test { let response = HttpResponse::builder().status(200).build().unwrap(); let client = Arc::new(MockRunner::new(vec![response])); let request: Request<()> = Request::new("http://localhost", Method::GET); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -576,7 +605,7 @@ mod test { .unwrap(); let client = Arc::new(MockRunner::new(vec![response2, response1])); let request: Request<()> = Request::new("http://localhost", Method::GET); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -596,7 +625,7 @@ mod test { let response2 = response_with_last_page(); let client = Arc::new(MockRunner::new(vec![response2, response1])); let request: Request<()> = Request::new("http://localhost", Method::GET); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -619,7 +648,7 @@ mod test { .unwrap(); let client = Arc::new(MockRunner::new(vec![response])); let request: Request<()> = Request::new("http://localhost", Method::GET); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -653,7 +682,7 @@ mod test { MockRunner::new(vec![response3, response2, response1]).with_config(ConfigMock::new(1)), ); let request: Request<()> = Request::new("http://localhost", Method::GET); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -680,7 +709,7 @@ mod test { responses.reverse(); let request: Request<()> = Request::new("http://localhost", Method::GET); let client = Arc::new(MockRunner::new(responses)); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -813,7 +842,7 @@ mod test { .max_pages(1) .build() .unwrap(); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let backoff = Backoff::new( &client, 0, @@ -922,7 +951,7 @@ mod test { Box::new(Exponential), Box::new(throttle::DynamicFixed), ); - let throttler: Box = Box::new(NoThrottle::default()); + let throttler: Box = Box::new(NoThrottle); let paginator = Paginator::new(&client, request, "http://localhost", backoff, throttler); let responses = paginator.collect::>>(); assert_eq!(5, responses.len()); diff --git a/src/http/throttle.rs b/src/http/throttle.rs index b384370..b2ef791 100644 --- a/src/http/throttle.rs +++ b/src/http/throttle.rs @@ -91,8 +91,8 @@ impl ThrottleStrategy for Random { self.delay_min, self.delay_max ); - let mut rng = rand::thread_rng(); - let wait_time = rng.gen_range(*self.delay_min..=*self.delay_max); + let mut rng = rand::rng(); + let wait_time = rng.random_range(*self.delay_min..=*self.delay_max); log_info!("Sleeping for {} milliseconds", wait_time); thread::sleep(std::time::Duration::from_millis(wait_time)); } @@ -163,7 +163,7 @@ impl ThrottleStrategy for AutoRate { // is high and the reset time is low. We additionally // wait in between jitter_min and jitter_max milliseconds. let additional_delay = - rand::thread_rng().gen_range(*self.jitter_min..=*self.jitter_max); + rand::rng().random_range(*self.jitter_min..=*self.jitter_max); let total_delay = delay + additional_delay; log_info!("AutoRate throttling enabled"); self.throttle_for(Milliseconds::from(total_delay)); @@ -173,7 +173,7 @@ impl ThrottleStrategy for AutoRate { // any rate limiting headers. In this case, we just throttle // randomly between the min and max jitter. let rand_delay_jitter = - rand::thread_rng().gen_range(*self.jitter_min..=*self.jitter_max); + rand::rng().random_range(*self.jitter_min..=*self.jitter_max); log_info!("AutoRate throttling enabled"); self.throttle_for(Milliseconds::from(rand_delay_jitter)); } diff --git a/src/init.rs b/src/init.rs index bbf328d..7d47ea4 100644 --- a/src/init.rs +++ b/src/init.rs @@ -144,7 +144,7 @@ mod test { let mut writer = Vec::new(); let result = generate_and_persist(options, &mut writer); assert!(result.is_ok()); - assert!(writer.len() > 0); + assert!(!writer.is_empty()); let content = String::from_utf8(writer).unwrap(); assert!(content.contains("gitweb_com")); } diff --git a/src/main.rs b/src/main.rs index 2bfd520..e41019d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,7 +29,7 @@ fn main() -> Result<()> { } match handle_cli_options(cli_options, config_file_path, cli_args) { Err(err) => { - eprintln!("{}", err); + eprintln!("{err}"); std::process::exit(1); } Ok(_) => Ok(()), diff --git a/src/remote.rs b/src/remote.rs index 4f84478..9bc02d0 100644 --- a/src/remote.rs +++ b/src/remote.rs @@ -328,9 +328,9 @@ impl URLQueryParamBuilder { pub fn add_param(&mut self, key: &str, value: &str) -> &mut Self { if self.url.contains('?') { - self.url.push_str(&format!("&{}={}", key, value)); + self.url.push_str(&format!("&{key}={value}")); } else { - self.url.push_str(&format!("?{}={}", key, value)); + self.url.push_str(&format!("?{key}={value}")); } self } @@ -506,7 +506,7 @@ impl CliDomainRequirements { Ok(url) } } - Err(err) => Err(GRError::GitRemoteUrlNotFound(format!("{}", err)).into()), + Err(err) => Err(GRError::GitRemoteUrlNotFound(format!("{err}")).into()), _ => Err(GRError::ApplicationError( "Could not get remote url during startup. \ main::get_config_domain_path - Please open a bug to \ @@ -564,19 +564,18 @@ pub fn url>( } let trace = errors .iter() - .map(|e| format!("{}", e)) + .map(|e| format!("{e}")) .collect::>() .join("\n"); let expectations_missed_trace = requirements .iter() - .map(|r| format!("{}", r)) + .map(|r| format!("{r}")) .collect::>() .join(" OR "); Err(GRError::PreconditionNotMet(format!( - "\n\nMissed requirements: {}\n\n Errors:\n\n {}", - expectations_missed_trace, trace + "\n\nMissed requirements: {expectations_missed_trace}\n\n Errors:\n\n {trace}" )) .into()) } @@ -615,7 +614,7 @@ pub fn read_config( ) -> Result> { let enc_domain = url.config_encoded_domain(); - let domain_config_file = config_path.directory.join(format!("{}.toml", enc_domain)); + let domain_config_file = config_path.directory.join(format!("{enc_domain}.toml")); let domain_project_file = config_path.directory.join(format!( "{}_{}.toml", enc_domain, @@ -628,7 +627,6 @@ pub fn read_config( let mut extra_configs = [domain_config_file, domain_project_file] .into_iter() - .map(PathBuf::from) .collect::>(); fn open_files(file_paths: &[PathBuf]) -> Vec { diff --git a/src/test.rs b/src/test.rs index 5cb579e..d7f25c3 100644 --- a/src/test.rs +++ b/src/test.rs @@ -129,8 +129,8 @@ pub mod utils { let response = self.responses.borrow_mut().pop().unwrap(); *self.run_count.borrow_mut() += 1; match response.status { - 0 => return Ok(response), - _ => return Err(error::gen(&response.body)), + 0 => Ok(response), + _ => Err(error::gen(&response.body)), } } } @@ -149,25 +149,24 @@ pub mod utils { match response.status { // 409 Conflict - Merge request already exists. - Gitlab // 422 Conflict - Merge request already exists. - Github - 200 | 201 | 302 | 409 | 422 => return Ok(response), + 200 | 201 | 302 | 409 | 422 => Ok(response), // RateLimit error code. 403 secondary rate limit, 429 primary // rate limit. 403 | 429 => { let headers = response.get_ratelimit_headers().unwrap_or_default(); - return Err(error::GRError::RateLimitExceeded(headers).into()); + Err(error::GRError::RateLimitExceeded(headers).into()) } - 500..=599 => return Err(error::GRError::RemoteServerError(response.body).into()), + 500..=599 => Err(error::GRError::RemoteServerError(response.body).into()), // Just for testing purposes, if the test client sets a status // code of -1 we return a HTTP transport error. - -1 => return Err(error::GRError::HttpTransportError(response.body).into()), - _ => return Err(error::gen(&response.body)), + -1 => Err(error::GRError::HttpTransportError(response.body).into()), + _ => Err(error::gen(&response.body)), } } fn api_max_pages(&self, _cmd: &Request) -> u32 { self.config.get_max_pages( - &self - .api_operation + self.api_operation .borrow() .as_ref() // We set it to Project by default in cases where it does @@ -292,7 +291,7 @@ pub mod utils { #[macro_export] macro_rules! setup_client { ($response_contracts:expr, $client_type:expr, $trait_type:ty) => {{ - let config = crate::test::utils::config(); + let config = $crate::test::utils::config(); let responses: Vec<_> = $response_contracts .into_iter() .map(|(status_code, get_contract_fn, headers)| { @@ -367,7 +366,7 @@ pub mod utils { status_code, Box::new(move || { Some(get_contract( - self.contract_type.clone(), + self.contract_type, &contract_file.clone().into(), )) }), diff --git a/src/time.rs b/src/time.rs index f40a851..472201d 100644 --- a/src/time.rs +++ b/src/time.rs @@ -41,8 +41,7 @@ impl TryFrom for Time { 'h' => Ok(Time::Hour), 'd' => Ok(Time::Day), _ => Err(error::gen(format!( - "Unknown char time format: {} - valid types are s, m, h, d", - time + "Unknown char time format: {time} - valid types are s, m, h, d" ))), } } @@ -85,8 +84,7 @@ impl FromStr for Seconds { match s.parse::() { Ok(seconds) => Ok(Seconds(seconds)), Err(err) => Err(GRError::TimeConversionError(format!( - "Could not convert {} to time format: {}", - s, err, + "Could not convert {s} to time format: {err}", ))), } } @@ -222,8 +220,7 @@ impl TryFrom<&str> for Seconds { match string_to_seconds(str_fmt) { Ok(seconds) => Ok(seconds), Err(err) => Err(GRError::TimeConversionError(format!( - "Could not convert {} to time format: {}", - str_fmt, err, + "Could not convert {str_fmt} to time format: {err}", ))), } } @@ -239,14 +236,12 @@ pub fn sort_filter_by_date( (Some(created_after), Some(created_before)) => { let created_after = created_after.parse::>().map_err(|err| { GRError::TimeConversionError(format!( - "Could not convert {} to date format: {}", - created_after, err, + "Could not convert {created_after} to date format: {err}", )) })?; let created_before = created_before.parse::>().map_err(|err| { GRError::TimeConversionError(format!( - "Could not convert {} to date format: {}", - created_before, err, + "Could not convert {created_before} to date format: {err}", )) })?; return Ok(sort_by_date( @@ -259,8 +254,7 @@ pub fn sort_filter_by_date( (Some(created_after), None) => { let created_after = created_after.parse::>().map_err(|err| { GRError::TimeConversionError(format!( - "Could not convert {} to date format: {}", - created_after, err, + "Could not convert {created_after} to date format: {err}", )) })?; return Ok(sort_by_date( @@ -273,8 +267,7 @@ pub fn sort_filter_by_date( (None, Some(created_before)) => { let created_before = created_before.parse::>().map_err(|err| { GRError::TimeConversionError(format!( - "Could not convert {} to date format: {}", - created_before, err, + "Could not convert {created_before} to date format: {err}", )) })?; return Ok(sort_by_date( diff --git a/tests/http_test.rs b/tests/http_test.rs index f72a213..8e4bd24 100644 --- a/tests/http_test.rs +++ b/tests/http_test.rs @@ -73,7 +73,7 @@ fn test_http_runner_server_down_get_request() { let err = runner.run(&mut request).unwrap_err(); match err.downcast_ref::() { Some(GRError::HttpTransportError(_)) => (), - _ => panic!("Expected GRError::HttpTransportError, but got {:?}", err), + _ => panic!("Expected GRError::HttpTransportError, but got {err:?}"), } } @@ -84,7 +84,7 @@ fn test_http_runner_server_down_post_request() { let err = runner.run(&mut request).unwrap_err(); match err.downcast_ref::() { Some(GRError::HttpTransportError(_)) => (), - _ => panic!("Expected GRError::HttpTransportError, but got {:?}", err), + _ => panic!("Expected GRError::HttpTransportError, but got {err:?}"), } } @@ -169,6 +169,7 @@ fn test_http_gathers_from_inmemory_stale_cache_server_304() { .path("/repos/jordilin/mr/members"); then.status(304) .header("content-type", "application/json") + .header("content-encoding", "gzip") .body(""); } });