diff --git a/Cargo.lock b/Cargo.lock index 9d63860f54..64b1430511 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "actix-codec" @@ -8,7 +8,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "futures-core", "futures-sink", @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.8.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae682f693a9cd7b058f2b0b5d9a6d7728a8555779bedbbc35dd88528611d020" +checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" dependencies = [ "actix-codec", "actix-rt", @@ -46,7 +46,7 @@ dependencies = [ "actix-utils", "ahash", "base64 0.22.1", - "bitflags 2.5.0", + "bitflags 2.6.0", "brotli", "bytes", "bytestring", @@ -54,7 +54,7 @@ dependencies = [ "encoding_rs", "flate2", "futures-core", - "h2", + "h2 0.3.26", "http 0.2.12", "httparse", "httpdate", @@ -62,7 +62,7 @@ dependencies = [ "language-tags", "local-channel", "mime", - "percent-encoding 2.3.1", + "percent-encoding", "pin-project-lite", "rand", "sha1", @@ -80,7 +80,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.67", + "syn", ] [[package]] @@ -94,7 +94,7 @@ dependencies = [ "http 0.2.12", "regex", "regex-lite", - "serde 1.0.203", + "serde 1.0.216", "tracing", ] @@ -111,9 +111,9 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b02303ce8d4e8be5b855af6cf3c3a08f3eff26880faad82bab679c22d3650cb5" +checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" dependencies = [ "actix-rt", "actix-service", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.8.0" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1988c02af8d2b718c05bc4aeb6a66395b7cdf32858c2c71131e5637a8c05a9ff" +checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" dependencies = [ "actix-codec", "actix-http", @@ -171,6 +171,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", + "impl-more", "itoa", "language-tags", "log", @@ -179,13 +180,13 @@ dependencies = [ "pin-project-lite", "regex", "regex-lite", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "serde_urlencoded", "smallvec", "socket2", "time", - "url 2.5.2", + "url", ] [[package]] @@ -197,23 +198,23 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -278,9 +279,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -293,43 +294,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "arc-swap" @@ -349,21 +350,27 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" dependencies = [ - "serde 1.0.203", + "serde 1.0.216", "serde_json", ] [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" @@ -377,23 +384,23 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -439,9 +446,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" @@ -496,37 +503,37 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bytestring" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" dependencies = [ "bytes", ] [[package]] name = "cadence" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f338b979d9ebfff4bb9801ae8f3af0dc3615f7f1ca963f2e4782bcf9acb3753" +checksum = "62fd689c825a93386a2ac05a46f88342c6df9ec3e79416f665650614e92e7475" dependencies = [ "crossbeam-channel", ] [[package]] name = "cc" -version = "1.0.99" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -544,18 +551,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits 0.2.19", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -586,27 +599,27 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" dependencies = [ "cc", ] [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "colored" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -618,10 +631,10 @@ dependencies = [ "lazy_static", "nom 5.1.3", "rust-ini", - "serde 1.0.203", + "serde 1.0.216", "serde-hjson", "serde_json", - "toml", + "toml 0.5.11", "yaml-rust", ] @@ -637,22 +650,22 @@ version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ - "percent-encoding 2.3.1", + "percent-encoding", "time", "version_check", ] [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -668,18 +681,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" @@ -693,9 +706,9 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.46" +version = "0.4.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" +checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" dependencies = [ "curl-sys", "libc", @@ -708,9 +721,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.72+curl-8.6.0" +version = "0.4.78+curl-8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cbdc8314c447d11e8fd156dcdd031d9e02a7a976163e396b548c03153bc9ea" +checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" dependencies = [ "cc", "libc", @@ -723,9 +736,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -733,27 +746,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.67", + "syn", ] [[package]] name = "darling_macro" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.67", + "syn", ] [[package]] @@ -782,7 +795,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "serde 1.0.203", + "serde 1.0.216", "uuid", ] @@ -805,38 +818,42 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.67", + "syn", ] [[package]] name = "diesel" -version = "1.4.8" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b28135ecf6b7d446b43e27e225622a038cc4e2930a1022f51cdb97ada19b8e4d" +checksum = "ccf1bedf64cdb9643204a36dd15b19a6ce8e7aa7f7b105868e9f1fad5ffa7d12" dependencies = [ + "bitflags 2.6.0", "byteorder", "diesel_derives", "mysqlclient-sys", + "percent-encoding", "r2d2", - "url 1.7.2", + "url", ] [[package]] name = "diesel_derives" -version = "1.4.1" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ + "diesel_table_macro_syntax", + "dsl_auto_type", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] name = "diesel_logger" -version = "0.1.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1793935ad14586bf2aa51574a7157932640c345205ccfb2db431846d846e3db7" +checksum = "8074833fffb675cf22a6ee669124f65f02971e48dd520bb80c7473ff70aeaf95" dependencies = [ "diesel", "log", @@ -844,14 +861,24 @@ dependencies = [ [[package]] name = "diesel_migrations" -version = "1.4.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c" +checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" dependencies = [ + "diesel", "migrations_internals", "migrations_macros", ] +[[package]] +name = "diesel_table_macro_syntax" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" +dependencies = [ + "syn", +] + [[package]] name = "digest" version = "0.10.7" @@ -884,6 +911,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "docopt" version = "1.1.1" @@ -892,10 +930,24 @@ checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f" dependencies = [ "lazy_static", "regex", - "serde 1.0.203", + "serde 1.0.216", "strsim 0.10.0", ] +[[package]] +name = "dsl_auto_type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +dependencies = [ + "darling", + "either", + "heck", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "dyn-clone" version = "1.0.17" @@ -904,24 +956,24 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -942,9 +994,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "anstream", "anstyle", @@ -965,17 +1017,17 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" dependencies = [ - "serde 1.0.203", + "serde 1.0.216", ] [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -992,9 +1044,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1012,7 +1064,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "percent-encoding 2.3.1", + "percent-encoding", ] [[package]] @@ -1023,9 +1075,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1038,9 +1090,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1048,15 +1100,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1065,38 +1117,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures 0.1.31", "futures-channel", @@ -1136,16 +1188,16 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glean" version = "0.17.15" dependencies = [ "chrono", - "serde 1.0.203", + "serde 1.0.216", "serde_derive", "serde_json", "uuid", @@ -1163,7 +1215,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "864a48916c62ddbd1dc289be6d041d8ca61160c9c6169298e5cf3da11baf8370" dependencies = [ - "futures 0.3.30", + "futures 0.3.31", "grpcio", "protobuf", ] @@ -1218,25 +1270,44 @@ dependencies = [ "tracing", ] +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.2.0", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hawk" -version = "5.0.0" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba86b7cbed4f24e509c720688eaf4963eac20d9341689bf69bcf5ee5e0f1cd2" +checksum = "ab302457b3e28e621daab18932d67a67328f29240bfaa5f604b7627ece1eacda" dependencies = [ "anyhow", - "base64 0.21.7", + "base64 0.22.1", "log", "once_cell", "ring", - "thiserror", - "url 2.5.2", + "thiserror 1.0.69", + "url", ] [[package]] @@ -1260,6 +1331,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -1286,11 +1363,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1317,9 +1394,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1328,23 +1405,12 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -1355,16 +1421,16 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http 1.2.0", + "http-body", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1380,41 +1446,20 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.29" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "h2", - "http 0.2.12", - "http-body 0.4.6", + "h2 0.4.7", + "http 1.2.0", + "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "httparse", - "itoa", - "pin-project-lite", "smallvec", "tokio", "want", @@ -1422,13 +1467,13 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.3.1", + "http 1.2.0", + "hyper", "hyper-util", "rustls", "rustls-pki-types", @@ -1440,29 +1485,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http 1.2.0", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1481,6 +1525,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1489,30 +1651,36 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.1.5" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "idna" -version = "0.5.0" +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown", @@ -1526,48 +1694,49 @@ checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1580,7 +1749,7 @@ dependencies = [ "base64 0.21.7", "js-sys", "ring", - "serde 1.0.203", + "serde 1.0.216", "serde_json", ] @@ -1592,9 +1761,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -1617,18 +1786,18 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -1637,15 +1806,15 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -1665,6 +1834,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "local-channel" version = "0.1.5" @@ -1694,15 +1869,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "matches" -version = "0.1.10" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" @@ -1721,23 +1890,23 @@ dependencies = [ [[package]] name = "migrations_internals" -version = "1.4.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860" +checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" dependencies = [ - "diesel", + "serde 1.0.216", + "toml 0.8.19", ] [[package]] name = "migrations_macros" -version = "1.4.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" +checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" dependencies = [ "migrations_internals", "proc-macro2", "quote", - "syn 1.0.109", ] [[package]] @@ -1754,35 +1923,40 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "mockito" -version = "1.4.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f6e023aa5bdf392aa06c78e4a4e6d498baab5138d0c993503350ebbc37bf1e" +checksum = "652cd6d169a36eaf9d1e6bce1a221130439a966d7f27858af66a33a66e9c4ee2" dependencies = [ "assert-json-diff", + "bytes", "colored", - "futures-core", - "hyper 0.14.29", + "futures-util", + "http 1.2.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", "log", "rand", "regex", @@ -1794,9 +1968,9 @@ dependencies = [ [[package]] name = "mysqlclient-sys" -version = "0.2.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879ce08e38739c54d87b7f8332a476004fe2a095f40a142a36f889779d9942b7" +checksum = "6bbb9b017b98c4cde5802998113e182eecc1ebce8d47e9ea1697b9a623d53870" dependencies = [ "pkg-config", "vcpkg", @@ -1859,18 +2033,18 @@ dependencies = [ [[package]] name = "object" -version = "0.36.0" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl-probe" @@ -1880,9 +2054,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1892,12 +2066,12 @@ dependencies = [ [[package]] name = "os_info" -version = "3.8.2" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae99c7fa6dd38c7cafe1ec085e804f8f555a2f8659b0dbe03f1f9963a9b51092" +checksum = "eb6651f4be5e39563c4fe5cc8326349eb99a25d805a3493f791d5bfd0269e430" dependencies = [ "log", - "serde 1.0.203", + "serde 1.0.216", "windows-sys 0.52.0", ] @@ -1921,7 +2095,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -1936,43 +2110,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" - [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.67", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -1982,15 +2130,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -2000,39 +2148,40 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", - "version_check", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ + "proc-macro-error-attr2", "proc-macro2", "quote", - "version_check", + "syn", ] [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -2045,9 +2194,9 @@ checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "pyo3" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d922163ba1f79c04bc49073ba7b32fd5a8d3b76a87c955921234b8e77333c51" +checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" dependencies = [ "cfg-if", "indoc", @@ -2063,9 +2212,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc38c5feeb496c8321091edf3d63e9a6829eab4b863b4a6a65f26f3e9cc6b179" +checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" dependencies = [ "once_cell", "target-lexicon", @@ -2073,9 +2222,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94845622d88ae274d2729fcefc850e63d7a3ddff5e3ce11bd88486db9f1d357d" +checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" dependencies = [ "libc", "pyo3-build-config", @@ -2083,81 +2232,86 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e655aad15e09b94ffdb3ce3d217acf652e26bbc37697ef012f5e5e348c716e5e" +checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.67", + "syn", ] [[package]] name = "pyo3-macros-backend" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1e3f09eecd94618f60a455a23def79f79eba4dc561a97324bf9ac8c6df30ce" +checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" dependencies = [ "heck", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.67", + "syn", ] [[package]] name = "quinn" -version = "0.11.2" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 1.1.0", + "rustc-hash 2.1.0", "rustls", - "thiserror", + "socket2", + "thiserror 2.0.9", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom", "rand", "ring", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "rustls", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.9", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.2" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2205,29 +2359,29 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -2237,9 +2391,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -2254,24 +2408,24 @@ checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "3d3536321cfc54baa8cf3e273d5e1f63f889067829c4b410fcdbac8ca7b80994" dependencies = [ "base64 0.22.1", "bytes", "futures-core", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http 1.2.0", + "http-body", "http-body-util", - "hyper 1.3.1", + "hyper", "hyper-rustls", "hyper-util", "ipnet", @@ -2279,25 +2433,26 @@ dependencies = [ "log", "mime", "once_cell", - "percent-encoding 2.3.1", + "percent-encoding", "pin-project-lite", "quinn", "rustls", "rustls-pemfile", "rustls-pki-types", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", "tokio-rustls", + "tower", "tower-service", - "url 2.5.2", + "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "webpki-roots", - "winreg", + "windows-registry", ] [[package]] @@ -2335,37 +2490,37 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "once_cell", "ring", @@ -2377,25 +2532,27 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -2404,9 +2561,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" @@ -2425,11 +2582,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2449,9 +2606,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "sentry" @@ -2503,7 +2660,7 @@ dependencies = [ "once_cell", "rand", "sentry-types", - "serde 1.0.203", + "serde 1.0.216", "serde_json", ] @@ -2539,11 +2696,11 @@ dependencies = [ "debugid", "hex", "rand", - "serde 1.0.203", + "serde 1.0.216", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", - "url 2.5.2", + "url", "uuid", ] @@ -2555,9 +2712,9 @@ checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" [[package]] name = "serde" -version = "1.0.203" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] @@ -2576,24 +2733,34 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ "itoa", + "memchr", "ryu", - "serde 1.0.203", + "serde 1.0.216", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde 1.0.216", ] [[package]] @@ -2605,7 +2772,7 @@ dependencies = [ "form_urlencoded", "itoa", "ryu", - "serde 1.0.203", + "serde 1.0.216", ] [[package]] @@ -2647,9 +2814,9 @@ dependencies = [ [[package]] name = "similar" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" [[package]] name = "slab" @@ -2703,7 +2870,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f400f1c5db96f1f52065e8931ca0c524cceb029f7537c9e6d5424488ca137ca0" dependencies = [ "chrono", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "slog", ] @@ -2751,9 +2918,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2765,6 +2932,12 @@ 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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -2791,15 +2964,15 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "70ae51629bf965c5c098cc9e87908a3df5301051a9e087d6f9bef5c9771ed126" dependencies = [ "proc-macro2", "quote", @@ -2807,22 +2980,14 @@ dependencies = [ ] [[package]] -name = "syn" -version = "2.0.67" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "futures-core", ] -[[package]] -name = "sync_wrapper" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" - [[package]] name = "syncserver" version = "0.17.15" @@ -2838,19 +3003,19 @@ dependencies = [ "chrono", "docopt", "dyn-clone", - "futures 0.3.30", + "futures 0.3.31", "glean", "hawk", "hex", "hmac", "hostname", - "http 1.1.0", + "http 1.2.0", "lazy_static", "mime", "rand", "regex", "sentry", - "serde 1.0.203", + "serde 1.0.216", "serde_derive", "serde_json", "sha2", @@ -2866,7 +3031,7 @@ dependencies = [ "syncserver-settings", "syncstorage-db", "syncstorage-settings", - "thiserror", + "thiserror 1.0.69", "time", "tokenserver-auth", "tokenserver-common", @@ -2886,13 +3051,13 @@ dependencies = [ "actix-web", "backtrace", "cadence", - "futures 0.3.30", + "futures 0.3.31", "futures-util", "hkdf", "scopeguard", "sentry", "sentry-backtrace", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "sha2", "slog", @@ -2907,10 +3072,10 @@ dependencies = [ "deadpool", "diesel", "diesel_migrations", - "futures 0.3.30", - "http 1.1.0", + "futures 0.3.31", + "http 1.2.0", "syncserver-common", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2919,12 +3084,12 @@ version = "0.17.15" dependencies = [ "config", "num_cpus", - "serde 1.0.203", + "serde 1.0.216", "slog-scope", "syncserver-common", "syncstorage-settings", "tokenserver-settings", - "url 2.5.2", + "url", ] [[package]] @@ -2933,8 +3098,8 @@ version = "0.17.15" dependencies = [ "async-trait", "cadence", - "env_logger 0.11.3", - "futures 0.3.30", + "env_logger 0.11.6", + "futures 0.3.31", "hostname", "lazy_static", "log", @@ -2959,14 +3124,14 @@ dependencies = [ "chrono", "diesel", "diesel_migrations", - "futures 0.3.30", - "http 1.1.0", + "futures 0.3.31", + "http 1.2.0", "lazy_static", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "syncserver-common", "syncserver-db-common", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2979,17 +3144,17 @@ dependencies = [ "diesel", "diesel_logger", "diesel_migrations", - "env_logger 0.11.3", - "futures 0.3.30", - "http 1.1.0", + "env_logger 0.11.6", + "futures 0.3.31", + "http 1.2.0", "slog-scope", "syncserver-common", "syncserver-db-common", "syncserver-settings", "syncstorage-db-common", "syncstorage-settings", - "thiserror", - "url 2.5.2", + "thiserror 1.0.69", + "url", ] [[package]] @@ -2997,7 +3162,7 @@ name = "syncstorage-settings" version = "0.17.15" dependencies = [ "rand", - "serde 1.0.203", + "serde 1.0.216", "syncserver-common", "time", ] @@ -3011,12 +3176,12 @@ dependencies = [ "backtrace", "cadence", "deadpool", - "env_logger 0.11.3", + "env_logger 0.11.6", "form_urlencoded", - "futures 0.3.30", + "futures 0.3.31", "google-cloud-rust-raw", "grpcio", - "http 1.1.0", + "http 1.2.0", "log", "protobuf", "slog-scope", @@ -3024,12 +3189,23 @@ dependencies = [ "syncserver-db-common", "syncstorage-db-common", "syncstorage-settings", - "thiserror", + "thiserror 1.0.69", "tokio", - "url 2.5.2", + "url", "uuid", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "take_mut" version = "0.2.2" @@ -3038,9 +3214,9 @@ checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "term" @@ -3073,22 +3249,42 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl 2.0.9", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] [[package]] @@ -3103,15 +3299,15 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde 1.0.203", + "serde 1.0.216", "time-core", "time-macros", ] @@ -3124,19 +3320,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -3154,7 +3360,7 @@ dependencies = [ "async-trait", "base64 0.22.1", "dyn-clone", - "futures 0.3.30", + "futures 0.3.31", "hex", "hkdf", "hmac", @@ -3163,12 +3369,12 @@ dependencies = [ "pyo3", "reqwest", "ring", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "sha2", "slog-scope", "syncserver-common", - "thiserror", + "thiserror 1.0.69", "tokenserver-common", "tokenserver-settings", "tokio", @@ -3180,12 +3386,12 @@ version = "0.17.15" dependencies = [ "actix-web", "backtrace", - "http 1.1.0", + "http 1.2.0", "jsonwebtoken", - "serde 1.0.203", + "serde 1.0.216", "serde_json", "syncserver-common", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -3198,17 +3404,17 @@ dependencies = [ "diesel", "diesel_logger", "diesel_migrations", - "env_logger 0.11.3", - "futures 0.3.30", - "http 1.1.0", - "serde 1.0.203", + "env_logger 0.11.6", + "futures 0.3.31", + "http 1.2.0", + "serde 1.0.216", "serde_derive", "serde_json", "slog-scope", "syncserver-common", "syncserver-db-common", "syncserver-settings", - "thiserror", + "thiserror 1.0.69", "tokenserver-common", "tokenserver-settings", "tokio", @@ -3219,15 +3425,15 @@ name = "tokenserver-settings" version = "0.17.15" dependencies = [ "jsonwebtoken", - "serde 1.0.203", + "serde 1.0.216", "tokenserver-common", ] [[package]] name = "tokio" -version = "1.38.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -3238,36 +3444,35 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -3282,19 +3487,53 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ - "serde 1.0.203", + "serde 1.0.216", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde 1.0.216", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde 1.0.216", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "serde 1.0.216", + "serde_spanned", + "toml_datetime", + "winnow", ] [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -3302,44 +3541,32 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.67", -] - [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -3347,9 +3574,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "tracing-core", ] @@ -3375,32 +3602,17 @@ dependencies = [ "libc", ] -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unindent" @@ -3416,25 +3628,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - -[[package]] -name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 0.5.0", - "percent-encoding 2.3.1", - "serde 1.0.203", + "idna", + "percent-encoding", + "serde 1.0.216", ] [[package]] @@ -3443,6 +3644,18 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -3456,36 +3669,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", - "serde 1.0.203", + "serde 1.0.216", ] [[package]] name = "validator" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db79c75af171630a3148bd3e6d7c4f42b6a9a014c2945bc5ed0020cbb8d9478e" +checksum = "d0b4a29d8709210980a09379f27ee31549b73292c87ab9899beee1c0d3be6303" dependencies = [ - "idna 0.5.0", + "idna", "once_cell", "regex", - "serde 1.0.203", + "serde 1.0.216", "serde_derive", "serde_json", - "url 2.5.2", + "url", ] [[package]] name = "validator_derive" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55591299b7007f551ed1eb79a684af7672c19c3193fb9e0a31936987bb2438ec" +checksum = "bac855a2ce6f843beb229757e6e570a42e837bcb15e5f449dd48d5747d41bf77" dependencies = [ "darling", "once_cell", - "proc-macro-error", + "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.67", + "syn", ] [[package]] @@ -3508,9 +3721,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" @@ -3539,46 +3752,47 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.67", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3586,28 +3800,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3615,9 +3839,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -3652,11 +3876,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3672,7 +3896,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ "windows-core", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -3681,156 +3905,128 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-targets 0.48.5", + "windows-result", + "windows-strings", + "windows-targets", ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows-targets 0.52.5", + "windows-targets", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-result", + "windows-targets", ] [[package]] -name = "windows-targets" -version = "0.52.5" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows-targets", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +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", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +name = "windows_aarch64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" - -[[package]] -name = "winreg" -version = "0.52.0" +name = "winnow" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", ] [[package]] @@ -3843,6 +4039,18 @@ dependencies = [ "regex", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "yaml-rust" version = "0.4.5" @@ -3852,24 +4060,70 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde 1.0.216", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.67", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", ] [[package]] @@ -3878,29 +4132,51 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zstd" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.1.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 7a545b6fa6..83e5fda2cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,12 +33,9 @@ actix-web = "4" docopt = "1.1" base64 = "0.22" -# Updating to 2.* requires changes to the Connection code for logging. -# (Adding an `instrumentation()` and `set_instrumentation()` method.) -# More investigation required. -diesel = "1.4" -diesel_migrations = "1.4" -diesel_logger = "0.1" +diesel = "2.2.6" +diesel_migrations = "2.2.0" +diesel_logger = "0.4.0" cadence = "1.3" backtrace = "0.3" diff --git a/syncserver-db-common/src/error.rs b/syncserver-db-common/src/error.rs index a414985624..7efc0ce078 100644 --- a/syncserver-db-common/src/error.rs +++ b/syncserver-db-common/src/error.rs @@ -26,7 +26,7 @@ enum SqlErrorKind { Pool(diesel::r2d2::PoolError), #[error("Error migrating the database: {}", _0)] - Migration(diesel_migrations::RunMigrationsError), + Migration(diesel_migrations::MigrationError), } impl From for SqlError { @@ -75,7 +75,7 @@ from_error!( ); from_error!(diesel::r2d2::PoolError, SqlError, SqlErrorKind::Pool); from_error!( - diesel_migrations::RunMigrationsError, + diesel_migrations::MigrationError, SqlError, SqlErrorKind::Migration ); diff --git a/syncserver/Cargo.toml b/syncserver/Cargo.toml index a920ee107b..2769808e81 100644 --- a/syncserver/Cargo.toml +++ b/syncserver/Cargo.toml @@ -56,8 +56,8 @@ tokenserver-db = { path = "../tokenserver-db" } tokenserver-settings = { path = "../tokenserver-settings" } tokio = { workspace = true, features = ["macros", "sync"] } urlencoding = "2.1" -validator = "0.18" -validator_derive = "0.18" +validator = "0.19" +validator_derive = "0.19" woothee = "0.13" [features] diff --git a/syncstorage-db-common/src/results.rs b/syncstorage-db-common/src/results.rs index 8fca2cd44c..1e57e1791d 100644 --- a/syncstorage-db-common/src/results.rs +++ b/syncstorage-db-common/src/results.rs @@ -46,21 +46,21 @@ pub struct GetQuotaUsage { #[derive(Debug, Default, Deserialize, Queryable, QueryableByName, Serialize)] pub struct GetBso { - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub id: String, - #[sql_type = "BigInt"] + #[diesel(sql_type = BigInt)] pub modified: SyncTimestamp, - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub payload: String, #[serde(skip_serializing_if = "Option::is_none")] - #[sql_type = "Nullable"] + #[diesel(sql_type = Nullable)] pub sortindex: Option, // NOTE: expiry (ttl) is never rendered to clients and only loaded for // tests: this and its associated queries/loading could be wrapped in // #[cfg(test)] #[serde(skip_serializing)] #[serde(skip_deserializing)] - #[sql_type = "BigInt"] + #[diesel(sql_type = BigInt)] pub expiry: i64, } diff --git a/syncstorage-db-common/src/util.rs b/syncstorage-db-common/src/util.rs index 4e2858a634..4fcc4784de 100644 --- a/syncstorage-db-common/src/util.rs +++ b/syncstorage-db-common/src/util.rs @@ -137,7 +137,7 @@ where i64: FromSql, DB: Backend, { - fn from_sql(value: Option<&::RawValue>) -> deserialize::Result { + fn from_sql(value: ::RawValue<'_>) -> deserialize::Result { let i64_value = >::from_sql(value)?; SyncTimestamp::from_i64(i64_value) .map_err(|e| format!("Invalid SyncTimestamp i64 {}", e).into()) diff --git a/syncstorage-mysql/Cargo.toml b/syncstorage-mysql/Cargo.toml index 7d2a7c3421..39648f4d31 100644 --- a/syncstorage-mysql/Cargo.toml +++ b/syncstorage-mysql/Cargo.toml @@ -14,7 +14,6 @@ slog-scope.workspace = true thiserror.workspace = true async-trait = "0.1.40" -# There appears to be a compilation error with diesel diesel = { workspace = true, features = ["mysql", "r2d2"] } diesel_logger = { workspace = true } diesel_migrations = { workspace = true, features = ["mysql"] } diff --git a/syncstorage-mysql/src/batch.rs b/syncstorage-mysql/src/batch.rs index 1e487440b5..663e693f55 100644 --- a/syncstorage-mysql/src/batch.rs +++ b/syncstorage-mysql/src/batch.rs @@ -1,5 +1,8 @@ use base64::Engine; -use std::collections::HashSet; +use std::{ + collections::HashSet, + sync::atomic::{AtomicU32, Ordering}, +}; use diesel::{ self, @@ -21,6 +24,8 @@ use super::{ const MAXTTL: i32 = 2_100_000_000; +static COUNTER: AtomicU32 = AtomicU32::new(0); + pub fn create(db: &MysqlDb, params: params::CreateBatch) -> DbResult { let user_id = params.user_id.legacy_id as i64; let collection_id = db.get_collection_id(¶ms.collection)?; @@ -32,18 +37,16 @@ pub fn create(db: &MysqlDb, params: params::CreateBatch) -> DbResult DbError { match e { // The user tried to create two batches with the same timestamp @@ -74,7 +77,7 @@ pub fn validate(db: &MysqlDb, params: params::ValidateBatch) -> DbResult { .filter(batch_uploads::batch_id.eq(&batch_id)) .filter(batch_uploads::user_id.eq(&user_id)) .filter(batch_uploads::collection_id.eq(&collection_id)) - .get_result::(&db.conn) + .get_result::(&mut *db.conn.write()?) .optional()?; Ok(exists.is_some()) } @@ -124,11 +127,11 @@ pub fn delete(db: &MysqlDb, params: params::DeleteBatch) -> DbResult<()> { .filter(batch_uploads::batch_id.eq(&batch_id)) .filter(batch_uploads::user_id.eq(&user_id)) .filter(batch_uploads::collection_id.eq(&collection_id)) - .execute(&db.conn)?; + .execute(&mut *db.conn.write()?)?; diesel::delete(batch_upload_items::table) .filter(batch_upload_items::batch_id.eq(&batch_id)) .filter(batch_upload_items::user_id.eq(&user_id)) - .execute(&db.conn)?; + .execute(&mut *db.conn.write()?)?; Ok(()) } @@ -148,9 +151,9 @@ pub fn commit(db: &MysqlDb, params: params::CommitBatch) -> DbResult(user_id) .bind::(&db.timestamp().as_i64()) .bind::(&db.timestamp().as_i64()) - .execute(&db.conn)?; + .execute(&mut *db.conn.write()?)?; - db.update_collection(user_id as u32, collection_id)?; + db.update_collection(user_id as u32, collection_id, None)?; delete( db, @@ -186,14 +189,14 @@ pub fn do_append( // values contain a key that's already in the database, less so if the // the duplicate is in the value set we're inserting. #[derive(Debug, QueryableByName)] - #[table_name = "batch_upload_items"] + #[diesel(table_name = batch_upload_items)] struct ExistsResult { batch_id: i64, id: String, } #[derive(AsChangeset)] - #[table_name = "batch_upload_items"] + #[diesel(table_name = batch_upload_items)] struct UpdateBatches { payload: Option, payload_size: Option, @@ -208,7 +211,7 @@ pub fn do_append( ) .bind::(user_id.legacy_id as i64) .bind::(batch_id) - .get_results::(&db.conn)? + .get_results::(&mut *db.conn.write()?)? { existing.insert(exist_idx( user_id.legacy_id, @@ -232,7 +235,7 @@ pub fn do_append( payload_size, ttl_offset: bso.ttl.map(|ttl| ttl as i32), }) - .execute(&db.conn)?; + .execute(&mut *db.conn.write()?)?; } else { diesel::insert_into(batch_upload_items::table) .values(( @@ -244,7 +247,7 @@ pub fn do_append( batch_upload_items::payload_size.eq(payload_size), batch_upload_items::ttl_offset.eq(bso.ttl.map(|ttl| ttl as i32)), )) - .execute(&db.conn)?; + .execute(&mut *db.conn.write()?)?; // make sure to include the key into our table check. existing.insert(exist_idx); } diff --git a/syncstorage-mysql/src/diesel_ext.rs b/syncstorage-mysql/src/diesel_ext.rs index 31b29956dd..43f0acd8be 100644 --- a/syncstorage-mysql/src/diesel_ext.rs +++ b/syncstorage-mysql/src/diesel_ext.rs @@ -1,3 +1,5 @@ +use std::{fmt::Debug, marker::PhantomData}; + use diesel::{ backend::Backend, insertable::CanInsertInSingleQuery, @@ -5,7 +7,7 @@ use diesel::{ query_builder::{AstPass, InsertStatement, QueryFragment, QueryId}, query_dsl::methods::LockingDsl, result::QueryResult, - Expression, RunQueryDsl, Table, + Expression, QuerySource, RunQueryDsl, }; /// Emit MySQL <= 5.7's `LOCK IN SHARE MODE` @@ -32,26 +34,39 @@ where pub struct LockInShareMode; impl QueryFragment for LockInShareMode { - fn walk_ast(&self, mut out: AstPass<'_, Mysql>) -> QueryResult<()> { + fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, Mysql>) -> QueryResult<()> { out.push_sql(" LOCK IN SHARE MODE"); Ok(()) } } #[derive(Debug, Clone)] -pub struct OnDuplicateKeyUpdate(Box>, X); +pub struct OnDuplicateKeyUpdate( + Box>, + X, + PhantomData, +) +where + DB: Backend, + T: QuerySource, + T::FromClause: QueryFragment + Clone + Debug, + U: QueryFragment + CanInsertInSingleQuery, + Op: QueryFragment, + Ret: QueryFragment, + X: Expression; -impl QueryFragment for OnDuplicateKeyUpdate +impl QueryFragment for OnDuplicateKeyUpdate where DB: Backend, - T: Table, - T::FromClause: QueryFragment, + T: QuerySource, + T::FromClause: QueryFragment + Clone + Debug, + InsertStatement: QueryFragment, U: QueryFragment + CanInsertInSingleQuery, Op: QueryFragment, Ret: QueryFragment, X: Expression, { - fn walk_ast(&self, mut out: AstPass<'_, DB>) -> QueryResult<()> { + fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>) -> QueryResult<()> { self.0.walk_ast(out.reborrow())?; out.push_sql(" ON DUPLICATE KEY UPDATE "); //self.1.walk_ast(out.reborrow())?; @@ -59,9 +74,28 @@ where } } -impl RunQueryDsl for OnDuplicateKeyUpdate {} +impl RunQueryDsl for OnDuplicateKeyUpdate +where + DB: Backend, + T: QuerySource, + T::FromClause: QueryFragment + Clone + Debug, + U: QueryFragment + CanInsertInSingleQuery, + Op: QueryFragment, + Ret: QueryFragment, + X: Expression, +{ +} -impl QueryId for OnDuplicateKeyUpdate { +impl QueryId for OnDuplicateKeyUpdate +where + DB: Backend, + T: QuerySource, + T::FromClause: QueryFragment + Clone + Debug, + U: QueryFragment + CanInsertInSingleQuery, + Op: QueryFragment, + Ret: QueryFragment, + X: Expression, +{ type QueryId = (); const HAS_STATIC_QUERY_ID: bool = false; diff --git a/syncstorage-mysql/src/error.rs b/syncstorage-mysql/src/error.rs index d9a66d96ad..9df08390fe 100644 --- a/syncstorage-mysql/src/error.rs +++ b/syncstorage-mysql/src/error.rs @@ -155,9 +155,20 @@ from_error!( |error: diesel::r2d2::PoolError| DbError::from(DbErrorKind::Mysql(SqlError::from(error))) ); from_error!( - diesel_migrations::RunMigrationsError, + diesel_migrations::MigrationError, DbError, - |error: diesel_migrations::RunMigrationsError| DbError::from(DbErrorKind::Mysql( - SqlError::from(error) - )) + |error: diesel_migrations::MigrationError| DbError::from(DbErrorKind::Mysql(SqlError::from( + error + ))) +); +from_error!( + std::boxed::Box, + DbError, + |error: std::boxed::Box| DbError::internal_error(error.to_string()) ); + +impl From> for DbError { + fn from(inner: std::sync::PoisonError) -> DbError { + DbError::internal_error(inner.to_string()) + } +} diff --git a/syncstorage-mysql/src/lib.rs b/syncstorage-mysql/src/lib.rs index 4a93390070..a678677ad4 100644 --- a/syncstorage-mysql/src/lib.rs +++ b/syncstorage-mysql/src/lib.rs @@ -1,6 +1,5 @@ #[macro_use] extern crate diesel; -#[macro_use] extern crate diesel_migrations; #[macro_use] extern crate slog_scope; diff --git a/syncstorage-mysql/src/models.rs b/syncstorage-mysql/src/models.rs index 5598b479c9..44eef0d5ed 100644 --- a/syncstorage-mysql/src/models.rs +++ b/syncstorage-mysql/src/models.rs @@ -1,17 +1,17 @@ use futures::future::TryFutureExt; -use std::{self, cell::RefCell, collections::HashMap, fmt, ops::Deref, sync::Arc}; +use std::{self, cell::RefCell, collections::HashMap, fmt, ops::Deref, sync::Arc, sync::RwLock}; use diesel::{ connection::TransactionManager, delete, dsl::max, - expression::sql_literal::sql, + dsl::sql, mysql::MysqlConnection, r2d2::{ConnectionManager, PooledConnection}, sql_query, sql_types::{BigInt, Integer, Nullable, Text}, - Connection, ExpressionMethods, GroupByDsl, OptionalExtension, QueryDsl, RunQueryDsl, + Connection, ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, }; #[cfg(debug_assertions)] use diesel_logger::LoggingConnection; @@ -33,6 +33,10 @@ use super::{ }; type Conn = PooledConnection>; +#[cfg(not(debug_assertions))] +type InternalConn = Conn; +#[cfg(debug_assertions)] +type InternalConn = LoggingConnection; // display SQL when RUST_LOG="diesel_logger=trace" // this is the max number of records we will return. static DEFAULT_LIMIT: u32 = DEFAULT_MAX_TOTAL_RECORDS; @@ -93,10 +97,7 @@ pub struct MysqlDb { unsafe impl Send for MysqlDb {} pub struct MysqlDbInner { - #[cfg(not(debug_assertions))] - pub(super) conn: Conn, - #[cfg(debug_assertions)] - pub(super) conn: LoggingConnection, // display SQL when RUST_LOG="diesel_logger=trace" + pub(super) conn: RwLock, session: RefCell, } @@ -125,9 +126,9 @@ impl MysqlDb { ) -> Self { let inner = MysqlDbInner { #[cfg(not(debug_assertions))] - conn, + conn: RwLock::new(conn), #[cfg(debug_assertions)] - conn: LoggingConnection::new(conn), + conn: RwLock::new(LoggingConnection::new(conn)), session: RefCell::new(Default::default()), }; // https://github.com/mozilla-services/syncstorage-rs/issues/1480 @@ -179,7 +180,7 @@ impl MysqlDb { .filter(user_collections::user_id.eq(user_id)) .filter(user_collections::collection_id.eq(collection_id)) .lock_in_share_mode() - .first(&self.conn) + .first(&mut *self.conn.write()?) .optional()?; if let Some(modified) = modified { let modified = SyncTimestamp::from_i64(modified)?; @@ -212,24 +213,36 @@ impl MysqlDb { // Lock the db self.begin(true)?; - let modified = user_collections::table - .select(user_collections::modified) + // SyncTimestamp only has 10 ms resolution. + let result = user_collections::table + .select(( + sql::("UNIX_TIMESTAMP(UTC_TIMESTAMP(2))*1000"), + user_collections::modified, + )) .filter(user_collections::user_id.eq(user_id)) .filter(user_collections::collection_id.eq(collection_id)) .for_update() - .first(&self.conn) + .first(&mut *self.conn.write()?) .optional()?; - if let Some(modified) = modified { + let timestamp = if let Some((timestamp, modified)) = result { let modified = SyncTimestamp::from_i64(modified)?; + let now = SyncTimestamp::from_i64(timestamp)?; // Forbid the write if it would not properly incr the timestamp - if modified >= self.timestamp() { + if modified >= now { return Err(DbError::conflict()); } self.session .borrow_mut() .coll_modified_cache .insert((user_id as u32, collection_id), modified); - } + now + } else { + let result = sql_query("SELECT UNIX_TIMESTAMP(UTC_TIMESTAMP(2))*1000 AS timestamp") + .get_result::(&mut *self.conn.write()?)?; + SyncTimestamp::from_i64(result.timestamp)? + }; + self.set_timestamp(timestamp); + self.session .borrow_mut() .coll_locks @@ -238,9 +251,9 @@ impl MysqlDb { } pub(super) fn begin(&self, for_write: bool) -> DbResult<()> { - self.conn - .transaction_manager() - .begin_transaction(&self.conn)?; + ::TransactionManager::begin_transaction( + &mut *self.conn.write()?, + )?; self.session.borrow_mut().in_transaction = true; if for_write { self.session.borrow_mut().in_write_transaction = true; @@ -254,18 +267,18 @@ impl MysqlDb { fn commit_sync(&self) -> DbResult<()> { if self.session.borrow().in_transaction { - self.conn - .transaction_manager() - .commit_transaction(&self.conn)?; + ::TransactionManager::commit_transaction( + &mut *self.conn.write()?, + )?; } Ok(()) } fn rollback_sync(&self) -> DbResult<()> { if self.session.borrow().in_transaction { - self.conn - .transaction_manager() - .rollback_transaction(&self.conn)?; + ::TransactionManager::rollback_transaction( + &mut *self.conn.write()?, + )?; } Ok(()) } @@ -283,7 +296,7 @@ impl MysqlDb { .bind::(user_id as i64) .bind::(TOMBSTONE) .bind::(self.timestamp().as_i64()) - .execute(&self.conn)?; + .execute(&mut *self.conn.write()?)?; Ok(()) } @@ -292,11 +305,11 @@ impl MysqlDb { // Delete user data. delete(bso::table) .filter(bso::user_id.eq(user_id)) - .execute(&self.conn)?; + .execute(&mut *self.conn.write()?)?; // Delete user collections. delete(user_collections::table) .filter(user_collections::user_id.eq(user_id)) - .execute(&self.conn)?; + .execute(&mut *self.conn.write()?)?; Ok(()) } @@ -309,11 +322,11 @@ impl MysqlDb { let mut count = delete(bso::table) .filter(bso::user_id.eq(user_id)) .filter(bso::collection_id.eq(&collection_id)) - .execute(&self.conn)?; + .execute(&mut *self.conn.write()?)?; count += delete(user_collections::table) .filter(user_collections::user_id.eq(user_id)) .filter(user_collections::collection_id.eq(&collection_id)) - .execute(&self.conn)?; + .execute(&mut *self.conn.write()?)?; if count == 0 { return Err(DbError::collection_not_found()); } else { @@ -327,15 +340,15 @@ impl MysqlDb { return Ok(id); } - let id = self.conn.transaction(|| { + let id = self.conn.write()?.transaction(|tx| { diesel::insert_or_ignore_into(collections::table) .values(collections::name.eq(name)) - .execute(&self.conn)?; + .execute(tx)?; collections::table .select(collections::id) .filter(collections::name.eq(name)) - .first(&self.conn) + .first(tx) })?; if !self.session.borrow().in_write_transaction { @@ -356,7 +369,7 @@ impl MysqlDb { WHERE name = ?", ) .bind::(name) - .get_result::(&self.conn) + .get_result::(&mut *self.conn.write()?) .optional()? .ok_or_else(DbError::collection_not_found)? .id; @@ -376,7 +389,7 @@ impl MysqlDb { WHERE id = ?", ) .bind::(&id) - .get_result::(&self.conn) + .get_result::(&mut *self.conn.write()?) .optional()? .ok_or_else(DbError::collection_not_found)? .name @@ -414,7 +427,7 @@ impl MysqlDb { } } - self.conn.transaction(|| { + self.conn.write()?.transaction(|tx| { let payload = bso.payload.as_deref().unwrap_or_default(); let sortindex = bso.sortindex; let ttl = bso.ttl.map_or(DEFAULT_BSO_TTL, |ttl| ttl); @@ -470,8 +483,8 @@ impl MysqlDb { .bind::(payload) .bind::(timestamp) .bind::(timestamp + (i64::from(ttl) * 1000)) // remember: this is in millis - .execute(&self.conn)?; - self.update_collection(user_id as u32, collection_id) + .execute(tx)?; + self.update_collection(user_id as u32, collection_id, Some(tx)) }) } @@ -538,7 +551,7 @@ impl MysqlDb { // https://github.com/mozilla-services/server-syncstorage/blob/a0f8117/syncstorage/storage/sql/__init__.py#L404 query = query.offset(numeric_offset); } - let mut bsos = query.load::(&self.conn)?; + let mut bsos = query.load::(&mut *self.conn.write()?)?; // XXX: an additional get_collection_timestamp is done here in // python to trigger potential CollectionNotFoundErrors @@ -608,7 +621,7 @@ impl MysqlDb { // https://github.com/mozilla-services/server-syncstorage/blob/a0f8117/syncstorage/storage/sql/__init__.py#L404 query = query.offset(numeric_offset); } - let mut ids = query.load::(&self.conn)?; + let mut ids = query.load::(&mut *self.conn.write()?)?; // XXX: an additional get_collection_timestamp is done here in // python to trigger potential CollectionNotFoundErrors @@ -643,7 +656,7 @@ impl MysqlDb { .filter(bso::collection_id.eq(&collection_id)) .filter(bso::id.eq(¶ms.id)) .filter(bso::expiry.ge(self.timestamp().as_i64())) - .get_result::(&self.conn) + .get_result::(&mut *self.conn.write()?) .optional()?) } @@ -655,11 +668,11 @@ impl MysqlDb { .filter(bso::collection_id.eq(&collection_id)) .filter(bso::id.eq(params.id)) .filter(bso::expiry.gt(&self.timestamp().as_i64())) - .execute(&self.conn)?; + .execute(&mut *self.conn.write()?)?; if affected_rows == 0 { return Err(DbError::bso_not_found()); } - self.update_collection(user_id as u32, collection_id) + self.update_collection(user_id as u32, collection_id, None) } fn delete_bsos_sync(&self, params: params::DeleteBsos) -> DbResult { @@ -669,8 +682,8 @@ impl MysqlDb { .filter(bso::user_id.eq(user_id)) .filter(bso::collection_id.eq(&collection_id)) .filter(bso::id.eq_any(params.ids)) - .execute(&self.conn)?; - self.update_collection(user_id as u32, collection_id) + .execute(&mut *self.conn.write()?)?; + self.update_collection(user_id as u32, collection_id, None) } fn post_bsos_sync(&self, input: params::PostBsos) -> DbResult { @@ -702,7 +715,7 @@ impl MysqlDb { } } } - self.update_collection(input.user_id.legacy_id as u32, collection_id)?; + self.update_collection(input.user_id.legacy_id as u32, collection_id, None)?; Ok(result) } @@ -711,7 +724,7 @@ impl MysqlDb { let modified = user_collections::table .select(max(user_collections::modified)) .filter(user_collections::user_id.eq(user_id)) - .first::>(&self.conn)? + .first::>(&mut *self.conn.write()?)? .unwrap_or_default(); SyncTimestamp::from_i64(modified).map_err(Into::into) } @@ -734,7 +747,7 @@ impl MysqlDb { .select(user_collections::modified) .filter(user_collections::user_id.eq(user_id as i64)) .filter(user_collections::collection_id.eq(collection_id)) - .first(&self.conn) + .first(&mut *self.conn.write()?) .optional()? .ok_or_else(DbError::collection_not_found) } @@ -747,7 +760,7 @@ impl MysqlDb { .filter(bso::user_id.eq(user_id)) .filter(bso::collection_id.eq(&collection_id)) .filter(bso::id.eq(¶ms.id)) - .first::(&self.conn) + .first::(&mut *self.conn.write()?) .optional()? .unwrap_or_default(); SyncTimestamp::from_i64(modified).map_err(Into::into) @@ -768,7 +781,7 @@ impl MysqlDb { )) .bind::(user_id.legacy_id as i64) .bind::(TOMBSTONE) - .load::(&self.conn)? + .load::(&mut *self.conn.write()?)? .into_iter() .map(|cr| { SyncTimestamp::from_i64(cr.last_modified) @@ -781,7 +794,7 @@ impl MysqlDb { fn check_sync(&self) -> DbResult { // has the database been up for more than 0 seconds? - let result = sql_query("SHOW STATUS LIKE \"Uptime\"").execute(&self.conn)?; + let result = sql_query("SHOW STATUS LIKE \"Uptime\"").execute(&mut *self.conn.write()?)?; Ok(result as u64 > 0) } @@ -815,7 +828,7 @@ impl MysqlDb { let result = collections::table .select((collections::id, collections::name)) .filter(collections::id.eq_any(uncached)) - .load::<(i32, String)>(&self.conn)?; + .load::<(i32, String)>(&mut *self.conn.write()?)?; for (id, name) in result { names.insert(id, name.clone()); @@ -832,9 +845,10 @@ impl MysqlDb { &self, user_id: u32, collection_id: i32, + mut conn: Option<&mut InternalConn>, ) -> DbResult { let quota = if self.quota.enabled { - self.calc_quota_usage_sync(user_id, collection_id)? + self.calc_quota_usage_sync(user_id, collection_id, conn.as_deref_mut())? } else { results::GetQuotaUsage { count: 0, @@ -857,16 +871,21 @@ impl MysqlDb { total_bytes = TOTAL_BYTES, ); let total_bytes = quota.total_bytes as i64; - sql_query(upsert) + let timestamp = self.timestamp().as_i64(); + let q = sql_query(upsert) .bind::(user_id as i64) .bind::(&collection_id) - .bind::(&self.timestamp().as_i64()) + .bind::(×tamp) .bind::(&total_bytes) .bind::("a.count) - .bind::(&self.timestamp().as_i64()) + .bind::(×tamp) .bind::(&total_bytes) - .bind::("a.count) - .execute(&self.conn)?; + .bind::("a.count); + if let Some(conn) = conn { + q.execute(conn)?; + } else { + q.execute(&mut *self.conn.write()?)?; + } Ok(self.timestamp()) } @@ -880,7 +899,7 @@ impl MysqlDb { .select(sql::>("SUM(LENGTH(payload))")) .filter(bso::user_id.eq(uid)) .filter(bso::expiry.gt(&self.timestamp().as_i64())) - .get_result::>(&self.conn)?; + .get_result::>(&mut *self.conn.write()?)?; Ok(total_bytes.unwrap_or_default() as u64) } @@ -897,7 +916,7 @@ impl MysqlDb { )) .filter(user_collections::user_id.eq(uid)) .filter(user_collections::collection_id.eq(params.collection_id)) - .get_result(&self.conn) + .get_result(&mut *self.conn.write()?) .optional()? .unwrap_or_default(); Ok(results::GetQuotaUsage { @@ -911,18 +930,23 @@ impl MysqlDb { &self, user_id: u32, collection_id: i32, + conn: Option<&mut InternalConn>, ) -> DbResult { - let (total_bytes, count): (i64, i32) = bso::table + let q = bso::table .select(( sql::(r#"COALESCE(SUM(LENGTH(COALESCE(payload, ""))),0)"#), sql::("COALESCE(COUNT(*),0)"), )) .filter(bso::user_id.eq(user_id as i64)) .filter(bso::expiry.gt(self.timestamp().as_i64())) - .filter(bso::collection_id.eq(collection_id)) - .get_result(&self.conn) - .optional()? - .unwrap_or_default(); + .filter(bso::collection_id.eq(collection_id)); + let (total_bytes, count): (i64, i32) = if let Some(conn) = conn { + q.get_result(conn) + } else { + q.get_result(&mut *self.conn.write()?) + } + .optional()? + .unwrap_or_default(); Ok(results::GetQuotaUsage { total_bytes: total_bytes as usize, count, @@ -938,7 +962,7 @@ impl MysqlDb { .filter(bso::user_id.eq(user_id.legacy_id as i64)) .filter(bso::expiry.gt(&self.timestamp().as_i64())) .group_by(bso::collection_id) - .load(&self.conn)? + .load(&mut *self.conn.write()?)? .into_iter() .collect(); self.map_collection_names(counts) @@ -959,7 +983,7 @@ impl MysqlDb { .filter(bso::user_id.eq(user_id.legacy_id as i64)) .filter(bso::expiry.gt(&self.timestamp().as_i64())) .group_by(bso::collection_id) - .load(&self.conn)? + .load(&mut *self.conn.write()?)? .into_iter() .collect(); self.map_collection_names(counts) @@ -1084,7 +1108,7 @@ impl Db for MysqlDb { ) -> DbFuture<'_, SyncTimestamp, Self::Error> { let db = self.clone(); Box::pin(self.blocking_threadpool.spawn(move || { - db.update_collection(param.user_id.legacy_id as u32, param.collection_id) + db.update_collection(param.user_id.legacy_id as u32, param.collection_id, None) })) } @@ -1121,22 +1145,28 @@ impl Db for MysqlDb { #[derive(Debug, QueryableByName)] struct IdResult { - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] id: i32, } #[allow(dead_code)] // Not really dead, Rust can't see the use above #[derive(Debug, QueryableByName)] struct NameResult { - #[sql_type = "Text"] + #[diesel(sql_type = Text)] name: String, } +#[derive(Debug, QueryableByName)] +struct TimestampResult { + #[diesel(sql_type = BigInt)] + timestamp: i64, +} + #[derive(Debug, QueryableByName)] struct UserCollectionsResult { // Can't substitute column names here. - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] collection: i32, // COLLECTION_ID - #[sql_type = "BigInt"] + #[diesel(sql_type = BigInt)] last_modified: i64, // LAST_MODIFIED } diff --git a/syncstorage-mysql/src/pool.rs b/syncstorage-mysql/src/pool.rs index ea6030b9b5..fd9eced808 100644 --- a/syncstorage-mysql/src/pool.rs +++ b/syncstorage-mysql/src/pool.rs @@ -14,6 +14,7 @@ use diesel::{ }; #[cfg(debug_assertions)] use diesel_logger::LoggingConnection; +use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; use syncserver_common::{BlockingThreadpool, Metrics}; #[cfg(debug_assertions)] use syncserver_db_common::test::TestTransactionCustomizer; @@ -23,7 +24,7 @@ use syncstorage_settings::{Quota, Settings}; use super::{error::DbError, models::MysqlDb, DbResult}; -embed_migrations!(); +pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); /// Run the diesel embedded migrations /// @@ -31,12 +32,14 @@ embed_migrations!(); /// begin_test_transaction during tests. So this runs on its own separate conn. fn run_embedded_migrations(database_url: &str) -> DbResult<()> { let conn = MysqlConnection::establish(database_url)?; + + // This conn2 charade is to make mut-ness the same for both cases. #[cfg(debug_assertions)] - // XXX: this doesn't show the DDL statements - // https://github.com/shssoichiro/diesel-logger/issues/1 - embedded_migrations::run(&LoggingConnection::new(conn))?; + let mut conn2 = LoggingConnection::new(conn); #[cfg(not(debug_assertions))] - embedded_migrations::run(&conn)?; + let mut conn2 = conn; + + conn2.run_pending_migrations(MIGRATIONS)?; Ok(()) } diff --git a/syncstorage-mysql/src/test.rs b/syncstorage-mysql/src/test.rs index 7a6313f01d..6db92d23a7 100644 --- a/syncstorage-mysql/src/test.rs +++ b/syncstorage-mysql/src/test.rs @@ -58,7 +58,7 @@ fn static_collection_id() -> DbResult<()> { .filter(collections::name.ne("")) .filter(collections::name.ne("xxx_col2")) // from server::test .filter(collections::name.ne("col2")) // from older intergration tests - .load(&db.inner.conn)? + .load(&mut *db.inner.conn.write()?)? .into_iter() .collect(); assert_eq!(results.len(), cols.len(), "mismatched columns"); diff --git a/tokenserver-auth/src/crypto.rs b/tokenserver-auth/src/crypto.rs index fa6c5402fc..409c6af56a 100644 --- a/tokenserver-auth/src/crypto.rs +++ b/tokenserver-auth/src/crypto.rs @@ -24,7 +24,7 @@ pub trait Crypto { #[allow(dead_code)] /// Verify an HMAC signature on a payload given a shared key - #[test] + #[cfg(test)] fn hmac_verify(&self, key: &[u8], payload: &[u8], signature: &[u8]) -> Result<(), Self::Error>; /// Generates random bytes using a cryptographic random number generator @@ -54,7 +54,7 @@ impl Crypto for CryptoImpl { Ok(mac.finalize().into_bytes().to_vec()) } - #[test] + #[cfg(test)] fn hmac_verify(&self, key: &[u8], payload: &[u8], signature: &[u8]) -> Result<(), Self::Error> { let mut mac: Hmac = Hmac::new_from_slice(key).map_err(|_| TokenserverError::internal_error())?; diff --git a/tokenserver-auth/src/oauth/native.rs b/tokenserver-auth/src/oauth/native.rs index 67ec88aad1..ad570c3744 100644 --- a/tokenserver-auth/src/oauth/native.rs +++ b/tokenserver-auth/src/oauth/native.rs @@ -280,21 +280,23 @@ mod tests { #[tokio::test] async fn test_no_keys_in_verifier_fallsback_to_fxa() -> Result<(), TokenserverError> { - let mock_jwks = mockito::mock("GET", "/v1/jwks").with_status(500).create(); + let mut server = mockito::Server::new(); + let mock_jwks = server.mock("GET", "/v1/jwks").with_status(500).create(); let body = json!({ "user": "fxa_id", "scope": [SYNC_SCOPE], "generation": 123 }); - let mock_verify = mockito::mock("POST", "/v1/verify") + let mock_verify = server + .mock("POST", "/v1/verify") .with_header("content-type", "application/json") .with_status(200) .with_body(body.to_string()) .create(); let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Default::default() }; let verifer: Verifier = Verifier::new(&settings, vec![])?; @@ -310,12 +312,13 @@ mod tests { #[tokio::test] async fn test_expired_signature_fails() -> Result<(), TokenserverError> { - let mock = mockito::mock("POST", "/v1/verify").create(); + let mut server = mockito::Server::new(); + let mock = server.mock("POST", "/v1/verify").create(); mock_jwk_verifier!(Err(OAuthVerifyError::InvalidSignature)); let jwk_verifiers = vec![MockJWTVerifier {}]; let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; @@ -337,7 +340,8 @@ mod tests { #[tokio::test] async fn test_verifier_attempts_all_keys_if_invalid_signature() -> Result<(), TokenserverError> { - let mock = mockito::mock("POST", "/v1/verify").create(); + let mut server = mockito::Server::new(); + let mock = server.mock("POST", "/v1/verify").create(); #[derive(Debug, Clone)] struct MockJWTVerifier { id: u8, @@ -366,7 +370,7 @@ mod tests { let jwk_verifiers = vec![MockJWTVerifier { id: 0 }, MockJWTVerifier { id: 1 }]; let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; let verifier: Verifier = Verifier::new(&settings, jwk_verifiers).unwrap(); @@ -391,12 +395,13 @@ mod tests { #[tokio::test] async fn test_verifier_all_signature_failures_fails() -> Result<(), TokenserverError> { - let mock_verify = mockito::mock("POST", "/v1/verify").create(); + let mut server = mockito::Server::new(); + let mock_verify = server.mock("POST", "/v1/verify").create(); mock_jwk_verifier!(Err(OAuthVerifyError::InvalidSignature)); let jwk_verifiers = vec![MockJWTVerifier {}, MockJWTVerifier {}]; let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; let verifier: Verifier = Verifier::new(&settings, jwk_verifiers).unwrap(); @@ -417,12 +422,14 @@ mod tests { #[tokio::test] async fn test_verifier_fallsback_if_decode_error() -> Result<(), TokenserverError> { + let mut server = mockito::Server::new(); let body = json!({ "user": "fxa_id", "scope": [SYNC_SCOPE], "generation": 123 }); - let mock_verify = mockito::mock("POST", "/v1/verify") + let mock_verify = server + .mock("POST", "/v1/verify") .with_header("content-type", "application/json") .with_status(200) .with_body(body.to_string()) @@ -432,7 +439,7 @@ mod tests { let jwk_verifiers = vec![MockJWTVerifier {}]; let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; let verifier: Verifier = Verifier::new(&settings, jwk_verifiers).unwrap(); @@ -451,6 +458,7 @@ mod tests { #[tokio::test] async fn test_no_sync_scope_fails() -> Result<(), TokenserverError> { + let server = mockito::Server::new(); let token_claims = TokenClaims { user: "fxa_id".to_string(), scope: "some other scope".to_string(), @@ -459,7 +467,7 @@ mod tests { mock_jwk_verifier!(token, Ok(serde_json::from_str(token).unwrap())); let jwk_verifiers = vec![MockJWTVerifier {}]; let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; let verifier: Verifier = Verifier::new(&settings, jwk_verifiers).unwrap(); @@ -479,12 +487,14 @@ mod tests { #[tokio::test] async fn test_fxa_rejects_token_no_matter_the_body() -> Result<(), TokenserverError> { + let mut server = mockito::Server::new(); let body = json!({ "user": "fxa_id", "scope": [SYNC_SCOPE], "generation": 123 }); - let mock_verify = mockito::mock("POST", "/v1/verify") + let mock_verify = server + .mock("POST", "/v1/verify") .with_header("content-type", "application/json") .with_status(401) // Even though the body is fine, if FxA returns a none-200, we automatically @@ -492,7 +502,7 @@ mod tests { .with_body(body.to_string()) .create(); let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; @@ -518,12 +528,14 @@ mod tests { #[tokio::test] async fn test_fxa_accepts_token_but_bad_body() -> Result<(), TokenserverError> { + let mut server = mockito::Server::new(); let body = json!({ "bad_key": "foo", "scope": [SYNC_SCOPE], "bad_genreation": 123 }); - let mock_verify = mockito::mock("POST", "/v1/verify") + let mock_verify = server + .mock("POST", "/v1/verify") .with_header("content-type", "application/json") .with_status(200) // Even though the body is valid json, it doesn't match our expectation so we'll error @@ -531,7 +543,7 @@ mod tests { .with_body(body.to_string()) .create(); let settings = Settings { - fxa_oauth_server_url: mockito::server_url(), + fxa_oauth_server_url: server.url(), ..Settings::default() }; diff --git a/tokenserver-db/src/error.rs b/tokenserver-db/src/error.rs index bff809f5d7..765fa7fe46 100644 --- a/tokenserver-db/src/error.rs +++ b/tokenserver-db/src/error.rs @@ -118,9 +118,20 @@ from_error!( |error: diesel::r2d2::PoolError| DbError::from(DbErrorKind::Sql(SqlError::from(error))) ); from_error!( - diesel_migrations::RunMigrationsError, + diesel_migrations::MigrationError, DbError, - |error: diesel_migrations::RunMigrationsError| DbError::from(DbErrorKind::Sql(SqlError::from( + |error: diesel_migrations::MigrationError| DbError::from(DbErrorKind::Sql(SqlError::from( error ))) ); +from_error!( + std::boxed::Box, + DbError, + |error: std::boxed::Box| DbError::internal_error(error.to_string()) +); + +impl From> for DbError { + fn from(inner: std::sync::PoisonError) -> DbError { + DbError::internal_error(inner.to_string()) + } +} diff --git a/tokenserver-db/src/lib.rs b/tokenserver-db/src/lib.rs index 34447c3d59..a6da8fa270 100644 --- a/tokenserver-db/src/lib.rs +++ b/tokenserver-db/src/lib.rs @@ -1,5 +1,4 @@ extern crate diesel; -#[macro_use] extern crate diesel_migrations; #[macro_use] extern crate slog_scope; diff --git a/tokenserver-db/src/models.rs b/tokenserver-db/src/models.rs index 2e6ba32c19..e3918ca9d8 100644 --- a/tokenserver-db/src/models.rs +++ b/tokenserver-db/src/models.rs @@ -4,14 +4,14 @@ use diesel::{ sql_types::{Bigint, Float, Integer, Nullable, Text}, OptionalExtension, RunQueryDsl, }; -#[cfg(test)] +#[cfg(debug_assertions)] use diesel_logger::LoggingConnection; use http::StatusCode; use syncserver_common::{BlockingThreadpool, Metrics}; use syncserver_db_common::{sync_db_method, DbFuture}; use std::{ - sync::Arc, + sync::{Arc, RwLock}, time::{Duration, SystemTime, UNIX_EPOCH}, }; @@ -26,6 +26,11 @@ const MAX_GENERATION: i64 = i64::MAX; type Conn = PooledConnection>; +#[cfg(not(debug_assertions))] +type InternalConn = Conn; +#[cfg(debug_assertions)] +type InternalConn = LoggingConnection; // display SQL when RUST_LOG="diesel_logger=trace" + #[derive(Clone)] pub struct TokenserverDb { /// Synchronous Diesel calls are executed on a blocking threadpool to satisfy @@ -49,10 +54,7 @@ pub struct TokenserverDb { unsafe impl Send for TokenserverDb {} struct DbInner { - #[cfg(not(test))] - pub(super) conn: Conn, - #[cfg(test)] - pub(super) conn: LoggingConnection, // display SQL when RUST_LOG="diesel_logger=trace" + pub(super) conn: RwLock, } impl TokenserverDb { @@ -72,10 +74,10 @@ impl TokenserverDb { timeout: Option, ) -> Self { let inner = DbInner { - #[cfg(not(test))] - conn, - #[cfg(test)] - conn: LoggingConnection::new(conn), + #[cfg(not(debug_assertions))] + conn: RwLock::new(conn), + #[cfg(debug_assertions)] + conn: RwLock::new(LoggingConnection::new(conn)), }; // https://github.com/mozilla-services/syncstorage-rs/issues/1480 @@ -107,7 +109,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(params.service_id) .bind::(¶ms.node) - .get_result(&self.inner.conn) + .get_result(&mut *self.inner.conn.write()?) .map_err(Into::into) } } @@ -131,7 +133,7 @@ impl TokenserverDb { .bind::(¶ms.service_id) .bind::(¶ms.email) .bind::(params.replaced_at) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -149,7 +151,7 @@ impl TokenserverDb { .bind::(params.replaced_at) .bind::(params.service_id) .bind::(params.uid) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -183,7 +185,7 @@ impl TokenserverDb { .bind::(¶ms.email) .bind::(params.generation) .bind::, _>(params.keys_changed_at) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -206,17 +208,18 @@ impl TokenserverDb { .bind::(user.created_at) .bind::(user.node_id) .bind::, _>(user.keys_changed_at) - .execute(&self.inner.conn)?; + .execute(&mut *self.inner.conn.write()?)?; diesel::sql_query(Self::LAST_INSERT_ID_QUERY) .bind::(&user.email) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map_err(Into::into) } fn check_sync(&self) -> DbResult { // has the database been up for more than 0 seconds? - let result = diesel::sql_query("SHOW STATUS LIKE \"Uptime\"").execute(&self.inner.conn)?; + let result = diesel::sql_query("SHOW STATUS LIKE \"Uptime\"") + .execute(&mut *self.inner.conn.write()?)?; Ok(result as u64 > 0) } @@ -255,7 +258,7 @@ impl TokenserverDb { if let Some(spanner_node_id) = self.spanner_node_id { diesel::sql_query(SPANNER_QUERY) .bind::(spanner_node_id) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map_err(|e| { let mut db_error = DbError::internal(format!("unable to get Spanner node: {}", e)); @@ -268,7 +271,7 @@ impl TokenserverDb { for _ in 0..5 { let maybe_result = diesel::sql_query(GET_BEST_NODE_QUERY) .bind::(params.service_id) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .optional()?; if let Some(result) = maybe_result { @@ -284,7 +287,7 @@ impl TokenserverDb { .unwrap_or(DEFAULT_CAPACITY_RELEASE_RATE), ) .bind::(params.service_id) - .execute(&self.inner.conn)?; + .execute(&mut *self.inner.conn.write()?)?; // If no nodes were affected by the last query, give up. if affected_rows == 0 { @@ -328,7 +331,7 @@ impl TokenserverDb { diesel::sql_query(query) .bind::(params.service_id) .bind::(¶ms.node) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -351,7 +354,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(¶ms.email) .bind::(params.service_id) - .load::(&self.inner.conn) + .load::(&mut *self.inner.conn.write()?) .map_err(Into::into) } @@ -530,7 +533,7 @@ impl TokenserverDb { } else { diesel::sql_query(QUERY) .bind::(params.service) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map_err(Into::into) } } @@ -548,7 +551,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(params.created_at) .bind::(¶ms.uid) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -566,7 +569,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(params.replaced_at) .bind::(¶ms.uid) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -581,7 +584,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(params.id) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map_err(Into::into) } @@ -599,10 +602,10 @@ impl TokenserverDb { .bind::(params.capacity) .bind::(params.downed) .bind::(params.backoff) - .execute(&self.inner.conn)?; + .execute(&mut *self.inner.conn.write()?)?; diesel::sql_query(Self::LAST_INSERT_ID_QUERY) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map_err(Into::into) } @@ -616,7 +619,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(params.id) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map_err(Into::into) } @@ -636,7 +639,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(current_time) .bind::(params.node_id) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -647,7 +650,7 @@ impl TokenserverDb { diesel::sql_query(QUERY) .bind::(params.node_id) - .execute(&self.inner.conn) + .execute(&mut *self.inner.conn.write()?) .map(|_| ()) .map_err(Into::into) } @@ -662,10 +665,10 @@ impl TokenserverDb { diesel::sql_query(INSERT_SERVICE_QUERY) .bind::(¶ms.service) .bind::(¶ms.pattern) - .execute(&self.inner.conn)?; + .execute(&mut *self.inner.conn.write()?)?; diesel::sql_query(Self::LAST_INSERT_ID_QUERY) - .get_result::(&self.inner.conn) + .get_result::(&mut *self.inner.conn.write()?) .map(|result| results::PostService { id: result.id as i32, }) diff --git a/tokenserver-db/src/pool.rs b/tokenserver-db/src/pool.rs index 5c8d9b5e96..f41057c316 100644 --- a/tokenserver-db/src/pool.rs +++ b/tokenserver-db/src/pool.rs @@ -7,6 +7,7 @@ use diesel::{ Connection, }; use diesel_logger::LoggingConnection; +use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; use syncserver_common::{BlockingThreadpool, Metrics}; #[cfg(debug_assertions)] use syncserver_db_common::test::TestTransactionCustomizer; @@ -18,7 +19,7 @@ use super::{ models::{Db, TokenserverDb}, }; -embed_migrations!(); +pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); /// Run the diesel embedded migrations /// @@ -27,7 +28,7 @@ embed_migrations!(); fn run_embedded_migrations(database_url: &str) -> DbResult<()> { let conn = MysqlConnection::establish(database_url)?; - embedded_migrations::run(&LoggingConnection::new(conn))?; + LoggingConnection::new(conn).run_pending_migrations(MIGRATIONS)?; Ok(()) } diff --git a/tokenserver-db/src/results.rs b/tokenserver-db/src/results.rs index c9fb63bbd3..3137f799ad 100644 --- a/tokenserver-db/src/results.rs +++ b/tokenserver-db/src/results.rs @@ -7,19 +7,19 @@ use serde::{Deserialize, Serialize}; /// Represents a user record as it is stored in the database. #[derive(Clone, Debug, Default, Deserialize, QueryableByName, Serialize)] pub struct GetRawUser { - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub uid: i64, - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub client_state: String, - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub generation: i64, - #[sql_type = "Nullable"] + #[diesel(sql_type = Nullable)] pub node: Option, - #[sql_type = "Nullable"] + #[diesel(sql_type = Nullable)] pub keys_changed_at: Option, - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub created_at: i64, - #[sql_type = "Nullable"] + #[diesel(sql_type = Nullable)] pub replaced_at: Option, } @@ -51,7 +51,7 @@ pub struct GetOrCreateUser { #[derive(Default, QueryableByName)] pub struct LastInsertId { - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub id: i64, } @@ -62,15 +62,15 @@ pub type PutUser = (); #[derive(Default, QueryableByName)] pub struct GetNodeId { - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub id: i64, } #[derive(Default, QueryableByName)] pub struct GetBestNode { - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub id: i64, - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub node: String, } @@ -78,28 +78,28 @@ pub type AddUserToNode = (); #[derive(Default, QueryableByName)] pub struct GetServiceId { - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub id: i32, } #[cfg(test)] #[derive(Debug, Default, Eq, PartialEq, QueryableByName)] pub struct GetUser { - #[sql_type = "Integer"] - #[column_name = "service"] + #[diesel(sql_type = Integer)] + #[diesel(column_name = service)] pub service_id: i32, - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub email: String, - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub generation: i64, - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub client_state: String, - #[sql_type = "Nullable"] + #[diesel(sql_type = Nullable)] pub replaced_at: Option, - #[sql_type = "Bigint"] - #[column_name = "nodeid"] + #[diesel(sql_type = Bigint)] + #[diesel(column_name = nodeid)] pub node_id: i64, - #[sql_type = "Nullable"] + #[diesel(sql_type = Nullable)] pub keys_changed_at: Option, } @@ -109,29 +109,29 @@ pub type PostNode = LastInsertId; #[cfg(test)] #[derive(Default, QueryableByName)] pub struct GetNode { - #[sql_type = "Bigint"] + #[diesel(sql_type = Bigint)] pub id: i64, - #[sql_type = "Integer"] - #[column_name = "service"] + #[diesel(sql_type = Integer)] + #[diesel(column_name = service)] pub service_id: i32, - #[sql_type = "Text"] + #[diesel(sql_type = Text)] pub node: String, - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub available: i32, - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub current_load: i32, - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub capacity: i32, - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub downed: i32, - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub backoff: i32, } #[cfg(test)] #[derive(Default, QueryableByName)] pub struct PostService { - #[sql_type = "Integer"] + #[diesel(sql_type = Integer)] pub id: i32, }