diff --git a/.clippy.toml b/.clippy.toml new file mode 100644 index 0000000..5951be3 --- /dev/null +++ b/.clippy.toml @@ -0,0 +1,4 @@ +allow-expect-in-tests = true +check-private-items = true + +allowed-duplicate-crates = [] diff --git a/.gitignore b/.gitignore index 32be835..9fbfa1b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,23 @@ -# OS Files -*~ -._* -.DS_Store +* +!**/ -# Rust -/target +!.zed/settings.json +!.gitignore + +!/CONTRIBUTING.md +!/LICENSE.md +!/README.md + +!/.clippy.toml +!/.rustfmt.toml +!/.tombi.toml +!/Cargo.toml +!/Cargo.lock +!/justfile +!/rust-toolchain.toml + +!/crates/**/*.rs +!/crates/**/Cargo.toml +!/crates/**/README.md + +!/lints/*.toml diff --git a/.rustfmt.toml b/.rustfmt.toml index 5e7f9e2..218e203 100644 --- a/.rustfmt.toml +++ b/.rustfmt.toml @@ -1,2 +1 @@ hard_tabs = true -wrap_comments = true diff --git a/tombi.toml b/.tombi.toml similarity index 64% rename from tombi.toml rename to .tombi.toml index 34aa2df..9d33042 100644 --- a/tombi.toml +++ b/.tombi.toml @@ -1,10 +1,9 @@ -toml-version = "v1.0.0" - [format.rules] indent-style = "tab" indent-width = 4 +line-width = 120 -# Required for rust <1.94 +# Disable TOML 1.1 features from tombi as long as we support rust <1.94 [[schemas]] toml-version = "v1.0.0" path = "tombi://www.schemastore.org/cargo.json" diff --git a/.zed/settings.json b/.zed/settings.json index 14b551a..893dfca 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -1,11 +1,12 @@ { - "languages": { - "TOML": { - "format_on_save": "on", - "formatter": { "language_server": { "name": "tombi" } }, - }, - }, "lsp": { + "just-lsp": { + "initialization_options": { + "formatting": { + "indentation": "\t", + }, + }, + }, "rust-analyzer": { "initialization_options": { "imports": { diff --git a/Cargo.lock b/Cargo.lock index 1c31f76..0e77a6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,17 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.12" @@ -29,9 +18,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -50,24 +39,24 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" dependencies = [ "libc", ] [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "arrow" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd47f2a6ddc39244bd722a27ee5da66c03369d087b9e024eafdb03e98b98ea7" +checksum = "6cfdd0833e32a9874d2b55089333ad310c0be208aafa277385ce2461dec90be3" dependencies = [ "arrow-arith", "arrow-array", @@ -83,9 +72,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7bbd679c5418b8639b92be01f361d60013c4906574b578b77b63c78356594c" +checksum = "0a41203398f0eaa6f7ec8e62c0da742a21abf282c148fc157f6c35c90e29981a" dependencies = [ "arrow-array", "arrow-buffer", @@ -97,17 +86,17 @@ dependencies = [ [[package]] name = "arrow-array" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8a4ab47b3f3eac60f7fd31b81e9028fda018607bcc63451aca4f2b755269862" +checksum = "ae33dad492b7df00a217563a7b0ef2874df68a0deea1b1a3acf628152f7f7a69" dependencies = [ - "ahash 0.8.12", + "ahash", "arrow-buffer", "arrow-data", "arrow-schema", "chrono", "half", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "num-complex", "num-integer", "num-traits", @@ -115,9 +104,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d18b89b4c4f4811d0858175e79541fe98e33e18db3b011708bc287b1240593f" +checksum = "b9552f96391c005e6ab449fa941420935e7e062489b12b8b1b08879b2163f5b5" dependencies = [ "bytes", "half", @@ -127,9 +116,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722b5c41dd1d14d0a879a1bce92c6fe33f546101bb2acce57a209825edd075b3" +checksum = "3a8a327c9649f30d8406995f27642b68df354713cca3baaaf100f076f18d5f34" dependencies = [ "arrow-array", "arrow-buffer", @@ -148,9 +137,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1683705c63dcf0d18972759eda48489028cbbff67af7d6bef2c6b7b74ab778a" +checksum = "2b24852db04738907e06c04ea61e42fe7fda962a34513022dc0d0e754fb7976b" dependencies = [ "arrow-buffer", "arrow-schema", @@ -161,9 +150,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "082342947d4e5a2bcccf029a0a0397e21cb3bb8421edd9571d34fb5dd2670256" +checksum = "63a083ec750f5c043f02946b4baf05fcdbb55f4560a3277055caca5cc99f3eb0" dependencies = [ "arrow-array", "arrow-buffer", @@ -174,9 +163,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a931b520a2a5e22033e01a6f2486b4cdc26f9106b759abeebc320f125e94d7" +checksum = "514ba0ef0d4c5896202dae736251ce415abb43a950bed570fb7981b8716c0e4c" dependencies = [ "arrow-array", "arrow-buffer", @@ -187,17 +176,17 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4cf0d4a6609679e03002167a61074a21d7b1ad9ea65e462b2c0a97f8a3b2bc6" +checksum = "21ca356ad6425cecb6eb7b28e4f659f1ee7880fbb1a16127de7dd62901efee9e" [[package]] name = "arrow-select" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b320d86a9806923663bb0fd9baa65ecaba81cb0cd77ff8c1768b9716b4ef891" +checksum = "c58da39eb3d8350ad4a549e5c2bc49284dac554016c69829310350f1731b0aad" dependencies = [ - "ahash 0.8.12", + "ahash", "arrow-array", "arrow-buffer", "arrow-data", @@ -207,9 +196,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "57.3.1" +version = "58.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b493e99162e5764077e7823e50ba284858d365922631c7aaefe9487b1abd02c2" +checksum = "b6789b388467525e3271326b6b4915666ecfdf5142aef09779445c954b67543c" dependencies = [ "arrow-array", "arrow-buffer", @@ -241,18 +230,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] @@ -276,12 +265,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - [[package]] name = "bigdecimal" version = "0.4.10" @@ -298,25 +281,13 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" dependencies = [ "serde_core", ] -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -327,10 +298,19 @@ dependencies = [ ] [[package]] -name = "borsh" -version = "1.6.1" +name = "block-buffer" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "borsh" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a" dependencies = [ "borsh-derive", "bytes", @@ -339,15 +319,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.6.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +checksum = "12cdfe656708a01f89b451a7d36466e6fe6c414de0aa18fc54f864f6f9ca9f56" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] @@ -356,28 +336,6 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" -[[package]] -name = "bytecheck" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "byteorder" version = "1.5.0" @@ -386,15 +344,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cc" -version = "1.2.63" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" dependencies = [ "find-msvc-tools", "shlex", @@ -408,15 +366,26 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "rand_core 0.10.1", +] [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "num-traits", @@ -425,19 +394,10 @@ dependencies = [ ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "cmov" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" [[package]] name = "const-random" @@ -474,6 +434,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + [[package]] name = "crc" version = "3.4.0" @@ -491,18 +460,18 @@ checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crossbeam-queue" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "803d13fb3b09d88be9f4dbc29062c66b19bf7170867ceb746d2a8689bf6c7a26" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -512,14 +481,32 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "darling" version = "0.20.11" @@ -540,7 +527,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] @@ -551,18 +538,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.117", -] - -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", + "syn 2.0.119", ] [[package]] @@ -571,10 +547,20 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] +[[package]] +name = "derive-where" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "derive_more" version = "2.1.1" @@ -593,7 +579,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.117", + "syn 2.0.119", "unicode-xid", ] @@ -603,21 +589,30 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "block-buffer 0.10.4", + "crypto-common 0.1.6", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "crypto-common 0.2.2", + "ctutils", ] [[package]] name = "displaydoc" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] @@ -628,9 +623,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "either" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" dependencies = [ "serde", ] @@ -643,37 +638,35 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "etcetera" -version = "0.8.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" dependencies = [ "cfg-if", - "home", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ "futures-core", "futures-sink", @@ -688,9 +681,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" @@ -701,17 +694,11 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -719,15 +706,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -747,27 +734,27 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-io", @@ -780,9 +767,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -807,15 +794,27 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", ] [[package]] -name = "glob" -version = "0.3.3" +name = "getrandom" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "half" @@ -831,30 +830,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - [[package]] name = "hashbrown" version = "0.17.1" @@ -863,11 +847,11 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "hashlink" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -890,29 +874,29 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest", + "digest 0.11.3", ] [[package]] -name = "home" -version = "0.5.12" +name = "hybrid-array" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ - "windows-sys 0.61.2", + "typenum", ] [[package]] @@ -941,9 +925,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -955,9 +939,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -968,9 +952,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -982,16 +966,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -1002,15 +987,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" dependencies = [ "displaydoc", "icu_locale_core", @@ -1050,9 +1035,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown 0.17.1", @@ -1067,17 +1052,6 @@ dependencies = [ "rustversion", ] -[[package]] -name = "inherent" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "inventory" version = "0.3.24" @@ -1104,13 +1078,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1119,9 +1092,6 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] [[package]] name = "lexical-core" @@ -1182,9 +1152,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libm" @@ -1192,23 +1162,11 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" -[[package]] -name = "libredox" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" -dependencies = [ - "bitflags", - "libc", - "plain", - "redox_syscall 0.8.0", -] - [[package]] name = "libsqlite3-sys" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1" dependencies = [ "cc", "pkg-config", @@ -1217,9 +1175,9 @@ dependencies = [ [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "lock_api" @@ -1232,9 +1190,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "mac_address" @@ -1258,19 +1216,19 @@ dependencies = [ [[package]] name = "md-5" -version = "0.10.6" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" dependencies = [ "cfg-if", - "digest", + "digest 0.11.3", ] [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memoffset" @@ -1283,9 +1241,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", "wasi", @@ -1307,30 +1265,14 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", ] -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - [[package]] name = "num-complex" version = "0.4.6" @@ -1348,24 +1290,13 @@ checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1412,7 +1343,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] @@ -1439,20 +1370,11 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.2" @@ -1474,38 +1396,11 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" - -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "pluralizer" @@ -1519,9 +1414,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "zerovec", ] @@ -1550,33 +1445,11 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -1589,36 +1462,16 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", "version_check", "yansi", ] -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -1630,20 +1483,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "radium" -version = "0.7.0" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -1653,7 +1527,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] @@ -1665,6 +1549,21 @@ dependencies = [ "getrandom 0.2.17", ] +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "redox_syscall" version = "0.5.18" @@ -1674,20 +1573,11 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_syscall" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" -dependencies = [ - "bitflags", -] - [[package]] name = "regex" -version = "1.12.3" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -1697,9 +1587,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -1708,18 +1598,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "ring" @@ -1735,67 +1616,18 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rkyv" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rsa" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "signature", - "spki", - "subtle", - "zeroize", -] - [[package]] name = "rust_decimal" -version = "1.42.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c5108e3d4d903e21aac27f12ba5377b6b34f9f44b325e4894c7924169d06995" +checksum = "7653272e75dcac41dc199fbea6f5797633994fafd339943c06c9af16bf29cd3a" dependencies = [ "arrayvec", "borsh", "bytes", "num-traits", - "rand", - "rkyv", + "rand 0.8.8", + "rand 0.9.5", "serde", "serde_json", "wasm-bindgen", @@ -1812,9 +1644,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ "once_cell", "ring", @@ -1826,18 +1658,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "ring", "rustls-pki-types", @@ -1846,9 +1678,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "ryu" @@ -1864,27 +1696,27 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sea-bae" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f694a6ab48f14bc063cfadff30ab551d3c7e46d8f81836c51989d548f44a2a25" +checksum = "260bbc7148a8d6818ac5032a1b9970da1a68bdd723d45b12d59f7c1bf3565e24" dependencies = [ "heck 0.4.1", - "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] name = "sea-orm" -version = "2.0.0-rc.38" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5428ce6a0c8f6b9858df21ad1aa00c2fb94e1c9f344a0436bc855391e5a225" +checksum = "a334e83ced3ae3ee44db0f84d1fcf8d2087a1ad9bb9036f00f9f6067156ea197" dependencies = [ "async-stream", "async-trait", "bigdecimal", "chrono", + "derive-where", "derive_more", "futures-util", "inventory", @@ -1902,19 +1734,21 @@ dependencies = [ "serde", "serde_json", "sqlx", + "sqlx-core", "strum", "thiserror", "time", "tracing", "url", "uuid", + "web-time", ] [[package]] name = "sea-orm-arrow" -version = "2.0.0-rc.3" +version = "2.0.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2eee8405f16c1f337fe3a83389361caea83c928d14dbd666a480407072c365" +checksum = "4c800d9db902534d7d01728faf98e33d13c1d57bb8c57d8e4c518309172bddda" dependencies = [ "arrow", "sea-query", @@ -1923,9 +1757,9 @@ dependencies = [ [[package]] name = "sea-orm-cli" -version = "2.0.0-rc.38" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd42605c3b611785eed593406900f463b86c61792e723272e0434e77ed9cd8d" +checksum = "5a53505884d7c907bcf4f7b4ddb1b29425e62fef8b98aea9c99e17781cceb798" dependencies = [ "chrono", "glob", @@ -1941,9 +1775,9 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "2.0.0-rc.38" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1374d83dd5b43f14dcc90fc726486c556f4db774b680b12b8c680af76e8233" +checksum = "4039a86f9acc4d3b52747508b347dddc6fd725bbc429902ebeb6d26225fc2528" dependencies = [ "heck 0.5.0", "itertools", @@ -1951,15 +1785,15 @@ dependencies = [ "proc-macro2", "quote", "sea-bae", - "syn 2.0.117", + "syn 2.0.119", "unicode-ident", ] [[package]] name = "sea-orm-migration" -version = "2.0.0-rc.38" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f6ce467587c910bb2842cf001ea600ac6228ba5f3f39c1dc499929e34a8f29" +checksum = "bd09adbef87100d07131a60a8c5508b53d0cf2136521f654aae47af5e6a097fe" dependencies = [ "async-trait", "sea-orm", @@ -1971,12 +1805,11 @@ dependencies = [ [[package]] name = "sea-query" -version = "1.0.0-rc.33" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04cdb0135c16e829504e93fbe7880513578d56f07aaea152283526590111828" +checksum = "546040c653a705e60ec65ecd3191a809603734bebbc225775916dea9ae409b31" dependencies = [ "chrono", - "inherent", "ordered-float", "rust_decimal", "sea-query-derive", @@ -1995,15 +1828,15 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", "thiserror", ] [[package]] name = "sea-query-sqlx" -version = "0.8.0-rc.15" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a04aeecfe00614fece56336fd35dc385bb9ffed0c75660695ba925e42a3991ef" +checksum = "4eaa419cdb9157da1361186b1959983eb2ea0dcb9a3c69dc45c449ecb2af8fef" dependencies = [ "sea-query", "sqlx", @@ -2011,9 +1844,9 @@ dependencies = [ [[package]] name = "sea-schema" -version = "0.17.0-rc.17" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b363dd21c20fe4d1488819cb2bc7f8d4696c62dd9f39554f97639f54d57dd0ab" +checksum = "3553c77dceed56e95bece9ea876c4dd67ca879ef51055a0b97a7bb89a8ae4fed" dependencies = [ "async-trait", "sea-query", @@ -2031,18 +1864,12 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "seamantic" -version = "0.0.14" +version = "1.0.0" dependencies = [ "sea-orm", "sea-orm-migration", @@ -2059,9 +1886,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -2069,29 +1896,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -2109,27 +1936,15 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - [[package]] name = "sha1" -version = "0.10.6" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.3.1", + "digest 0.11.3", ] [[package]] @@ -2139,8 +1954,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.1", + "digest 0.11.3", ] [[package]] @@ -2158,22 +1984,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "slab" version = "0.4.12" @@ -2182,18 +1992,18 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "b9be42f50aa861c555654aa3a37f52f4b1074bacf4e48fe0ef7fa584e80f1f0f" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -2201,28 +2011,18 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - [[package]] name = "sqlx" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71" dependencies = [ "sqlx-core", "sqlx-macros", @@ -2233,12 +2033,13 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ "base64", "bytes", + "cfg-if", "chrono", "crc", "crossbeam-queue", @@ -2248,18 +2049,17 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "hashlink", "indexmap", "log", "memchr", - "once_cell", "percent-encoding", "rust_decimal", "rustls", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "smallvec", "thiserror", "time", @@ -2268,98 +2068,82 @@ dependencies = [ "tracing", "url", "uuid", - "webpki-roots 0.26.11", + "webpki-roots", ] [[package]] name = "sqlx-macros" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] name = "sqlx-macros-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3" dependencies = [ + "cfg-if", "dotenvy", "either", "heck 0.5.0", "hex", - "once_cell", "proc-macro2", "quote", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "sqlx-core", "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.117", + "syn 2.0.119", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27" dependencies = [ - "atoi", - "base64", "bitflags", "byteorder", "bytes", "chrono", "crc", - "digest", + "digest 0.11.3", "dotenvy", "either", - "futures-channel", "futures-core", - "futures-io", "futures-util", "generic-array", - "hex", - "hkdf", - "hmac", - "itoa", "log", - "md-5", - "memchr", - "once_cell", "percent-encoding", - "rand", - "rsa", "rust_decimal", "serde", "sha1", - "sha2", - "smallvec", + "sha2 0.11.0", "sqlx-core", - "stringprep", "thiserror", "time", "tracing", "uuid", - "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" dependencies = [ "atoi", "base64", @@ -2375,17 +2159,15 @@ dependencies = [ "hex", "hkdf", "hmac", - "home", "itoa", "log", "md-5", "memchr", - "once_cell", - "rand", + "rand 0.10.2", "rust_decimal", "serde", "serde_json", - "sha2", + "sha2 0.11.0", "smallvec", "sqlx-core", "stringprep", @@ -2398,13 +2180,14 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +checksum = "488e99c397a62007e4229aec669a179816339afc6d2620ca6fa420dbee2e982c" dependencies = [ "atoi", "chrono", "flume", + "form_urlencoded", "futures-channel", "futures-core", "futures-executor", @@ -2414,7 +2197,6 @@ dependencies = [ "log", "percent-encoding", "serde", - "serde_urlencoded", "sqlx-core", "thiserror", "time", @@ -2460,9 +2242,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -2471,9 +2253,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" dependencies = [ "proc-macro2", "quote", @@ -2488,52 +2270,45 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.47" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde_core", @@ -2543,15 +2318,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -2568,9 +2343,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "zerovec", @@ -2578,9 +2353,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "4cf0ded5c4e56918d8f8a339e1bb67d038d3bc6d144ac407904015ba2e4cde9b" dependencies = [ "tinyvec_macros", ] @@ -2593,9 +2368,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -2608,20 +2383,20 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] name = "tokio-stream" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" dependencies = [ "futures-core", "pin-project-lite", @@ -2639,9 +2414,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime", @@ -2651,9 +2426,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ "winnow", ] @@ -2678,7 +2453,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] @@ -2770,9 +2545,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.2" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" dependencies = [ "js-sys", "serde_core", @@ -2799,24 +2574,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ "wit-bindgen", ] -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -2828,9 +2597,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2838,53 +2607,50 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] [[package]] -name = "webpki-roots" -version = "0.26.11" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ - "webpki-roots 1.0.7", + "js-sys", + "wasm-bindgen", ] [[package]] name = "webpki-roots" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] [[package]] name = "whoami" -version = "1.6.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", -] +checksum = "626c4bac6755d76ffc12cb01b2eac751db1996b9e0041de9aa02c8c211ddc82c" [[package]] name = "winapi" @@ -2929,7 +2695,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] @@ -2940,7 +2706,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] @@ -2967,22 +2733,13 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -2994,67 +2751,34 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -3067,48 +2791,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -3117,9 +2817,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -3132,18 +2832,9 @@ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "yansi" @@ -3153,9 +2844,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -3170,28 +2861,28 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] @@ -3211,21 +2902,21 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -3234,9 +2925,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -3245,17 +2936,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 3.0.5", ] [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 5f23beb..bc585d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,41 +1,537 @@ [workspace] -resolver = "2" -members = ["seamantic"] +resolver = "3" +members = ["crates/*"] [workspace.package] -license-file = "LICENSE.md" - edition = "2024" -rust-version = "1.88.0" +rust-version = "1.94" +license-file = "LICENSE.md" +publish = false [workspace.dependencies] -seamantic = { path = "seamantic", version = "=0.0.14", default-features = false } - -sea-orm = { version = "=2.0.0-rc.38", default-features = false } -sea-orm-migration = { version = "=2.0.0-rc.38", default-features = false } - -serde = { version = "^1", default-features = false } -serde_test = { version = "^1", default-features = false } -tokio = { version = "^1", default-features = false } +sea-orm = { version = "^2.0.0", default-features = false } +sea-orm-migration = { version = "^2.0.0", default-features = false } +serde = { version = "^1.0.220", default-features = false } +serde_test = { version = "^1.0.0", default-features = false } +tokio = { version = "^1.38.2", default-features = false } [workspace.lints.clippy] -arithmetic_side_effects = "forbid" -as_conversions = "forbid" -checked_conversions = "forbid" -default_union_representation = "forbid" -expect_used = "forbid" -indexing_slicing = "forbid" -integer_division = "forbid" -integer_division_remainder_used = "forbid" -transmute_undefined_repr = "forbid" -unchecked_time_subtraction = "forbid" -unwrap_used = "forbid" +cargo = { level = "warn", priority = -1 } +complexity = { level = "warn", priority = -1 } +correctness = { level = "deny", priority = -1 } +perf = { level = "warn", priority = -1 } +style = { level = "warn", priority = -1 } +suspicious = { level = "warn", priority = -1 } + +absolute-paths = "allow" +alloc-instead-of-core = "warn" +allow-attributes = "warn" +allow-attributes-without-reason = "deny" +arbitrary-source-item-ordering = "allow" +arithmetic-side-effects = "deny" +as-conversions = "deny" +as-pointer-underscore = "deny" +as-ptr-cast-mut = "deny" +as-underscore = "deny" +assertions-on-result-states = "warn" +assigning-clones = "warn" +big-endian-bytes = "allow" +bool-to-int-with-if = "warn" +borrow-as-ptr = "warn" +branches-sharing-code = "warn" +case-sensitive-file-extension-comparisons = "warn" +cast-lossless = "deny" +cast-possible-truncation = "deny" +cast-possible-wrap = "deny" +cast-precision-loss = "deny" +cast-ptr-alignment = "deny" +cast-sign-loss = "deny" +cfg-not-test = "deny" +checked-conversions = "deny" +clear-with-drain = "warn" +clone-on-ref-ptr = "warn" +cloned-instead-of-copied = "warn" +coerce-container-to-any = "warn" +cognitive-complexity = "allow" +collapsible-else-if = "warn" +collection-is-never-read = "warn" +comparison-chain = "warn" +copy-iterator = "warn" +create-dir = "warn" +dbg-macro = "warn" +debug-assert-with-mut-call = "deny" +decimal-bitwise-operands = "warn" +decimal-literal-representation = "warn" +default-numeric-fallback = "warn" +default-trait-access = "warn" +default-union-representation = "allow" +deref-by-slicing = "warn" +derive-partial-eq-without-eq = "warn" +disallowed-script-idents = "deny" +doc-broken-link = "warn" +doc-comment-double-space-linebreaks = "warn" +doc-include-without-cfg = "warn" +doc-link-code = "warn" +doc-link-with-quotes = "warn" +doc-markdown = "warn" +doc-paragraphs-missing-punctuation = "warn" +duration-suboptimal-units = "warn" +elidable-lifetime-names = "warn" +else-if-without-else = "warn" +empty-drop = "warn" +empty-enum-variants-with-brackets = "warn" +empty-enums = "warn" +empty-structs-with-brackets = "warn" +enum-glob-use = "warn" +equatable-if-let = "warn" +error-impl-error = "warn" +exhaustive-enums = "warn" +exhaustive-structs = "warn" +exit = "warn" +expect-used = "warn" +expl-impl-clone-on-copy = "warn" +explicit-deref-methods = "warn" +explicit-into-iter-loop = "warn" +explicit-iter-loop = "warn" +fallible-impl-from = "warn" +field-scoped-visibility-modifiers = "warn" +filetype-is-file = "warn" +filter-map-next = "warn" +flat-map-option = "warn" +float-arithmetic = "warn" +float-cmp = "warn" +float-cmp-const = "warn" +fn-params-excessive-bools = "allow" +fn-to-numeric-cast-any = "warn" +format-collect = "warn" +format-push-string = "warn" +future-not-send = "warn" +get-unwrap = "warn" +host-endian-bytes = "allow" +if-not-else = "warn" +if-then-some-else-none = "warn" +ignore-without-reason = "warn" +ignored-unit-patterns = "warn" +impl-trait-in-params = "warn" +implicit-clone = "warn" +implicit-hasher = "warn" +implicit-return = "allow" +imprecise-flops = "warn" +inconsistent-struct-constructor = "warn" +index-refutable-slice = "deny" +indexing-slicing = "deny" +inefficient-to-string = "warn" +infinite-loop = "warn" +inline-always = "warn" +inline-asm-x86-att-syntax = "warn" +inline-asm-x86-intel-syntax = "warn" +inline-modules = "allow" +inline-trait-bounds = "allow" +integer-division = "deny" +integer-division-remainder-used = "deny" +into-iter-without-iter = "warn" +invalid-upcast-comparisons = "warn" +ip-constant = "warn" +items-after-statements = "warn" +iter-filter-is-ok = "warn" +iter-filter-is-some = "warn" +iter-not-returning-iterator = "warn" +iter-on-empty-collections = "warn" +iter-on-single-items = "warn" +iter-over-hash-type = "warn" +iter-with-drain = "warn" +iter-without-into-iter = "warn" +large-digit-groups = "warn" +large-futures = "warn" +large-include-file = "warn" +large-stack-arrays = "warn" +large-stack-frames = "warn" +large-types-passed-by-value = "warn" +let-underscore-must-use = "warn" +let-underscore-untyped = "warn" +linkedlist = "warn" +literal-string-with-formatting-args = "warn" +little-endian-bytes = "allow" +lossy-float-literal = "warn" +macro-use-imports = "warn" +manual-assert = "warn" +manual-assert-eq = "warn" +manual-ilog2 = "warn" +manual-instant-elapsed = "warn" +manual-is-power-of-two = "warn" +manual-is-variant-and = "warn" +manual-let-else = "warn" +manual-midpoint = "warn" +manual-string-new = "warn" +many-single-char-names = "warn" +map-err-ignore = "warn" +map-unwrap-or = "warn" +map-with-unused-argument-over-ranges = "warn" +match-bool = "warn" +match-same-arms = "warn" +match-wild-err-arm = "warn" +match-wildcard-for-single-variants = "warn" +maybe-infinite-iter = "warn" +mem-forget = "warn" +min-ident-chars = "allow" +mismatching-type-param-order = "warn" +missing-assert-message = "warn" +missing-asserts-for-indexing = "warn" +missing-const-for-fn = "warn" +missing-docs-in-private-items = "warn" +missing-errors-doc = "warn" +missing-fields-in-debug = "warn" +missing-inline-in-public-items = "warn" +missing-panics-doc = "warn" +missing-trait-methods = "warn" +mixed-read-write-in-expression = "warn" +mod-module-files = "allow" +module-name-repetitions = "warn" +modulo-arithmetic = "warn" +multiple-crate-versions = "allow" +multiple-inherent-impl = "warn" +multiple-unsafe-ops-per-block = "warn" +must-use-candidate = "warn" +mut-mut = "warn" +mutex-atomic = "warn" +mutex-integer = "warn" +naive-bytecount = "warn" +needless-bitwise-bool = "warn" +needless-collect = "warn" +needless-continue = "warn" +needless-for-each = "warn" +needless-pass-by-ref-mut = "warn" +needless-pass-by-value = "warn" +needless-raw-string-hashes = "warn" +needless-raw-strings = "warn" +needless-type-cast = "warn" +no-effect-underscore-binding = "warn" +no-mangle-with-rust-abi = "warn" +non-ascii-literal = "allow" +non-send-fields-in-send-ty = "warn" +non-std-lazy-statics = "warn" +non-zero-suggestions = "warn" +nonminimal-bool = "warn" +nonstandard-macro-braces = "warn" +option-as-ref-cloned = "warn" +option-if-let-else = "warn" +option-option = "warn" +or-fun-call = "warn" +overly-complex-bool-expr = "allow" +panic = "warn" +panic-in-result-fn = "warn" +partial-pub-fields = "warn" +path-buf-push-overwrite = "warn" +pathbuf-init-then-push = "warn" +pattern-type-mismatch = "allow" +pointer-format = "warn" +precedence-bits = "warn" +print-stderr = "warn" +print-stdout = "warn" +ptr-as-ptr = "warn" +ptr-cast-constness = "warn" +ptr-offset-by-literal = "warn" +pub-underscore-fields = "warn" +pub-use = "allow" +pub-with-shorthand = "allow" +pub-without-shorthand = "warn" +question-mark-used = "allow" +range-minus-one = "warn" +range-plus-one = "warn" +rc-buffer = "warn" +rc-mutex = "warn" +read-zero-byte-vec = "warn" +redundant-clone = "warn" +redundant-closure-for-method-calls = "warn" +redundant-else = "warn" +redundant-pub-crate = "allow" +redundant-test-prefix = "warn" +redundant-type-annotations = "warn" +ref-as-ptr = "warn" +ref-binding-to-reference = "warn" +ref-option = "warn" +ref-option-ref = "warn" +ref-patterns = "warn" +renamed-function-params = "warn" +rest-pat-in-fully-bound-structs = "warn" +return-and-then = "warn" +return-self-not-must-use = "warn" +same-functions-in-if-condition = "warn" +same-length-and-capacity = "warn" +same-name-method = "warn" +search-is-some = "warn" +self-named-module-files = "warn" +self-only-used-in-recursion = "warn" +semicolon-if-nothing-returned = "warn" +semicolon-inside-block = "warn" +semicolon-outside-block = "allow" +separated-literal-suffix = "allow" +set-contains-or-insert = "warn" +shadow-reuse = "allow" +shadow-same = "allow" +shadow-unrelated = "allow" +should-panic-without-expect = "warn" +significant-drop-in-scrutinee = "warn" +significant-drop-tightening = "warn" +similar-names = "allow" +single-call-fn = "allow" +single-char-lifetime-names = "allow" +single-char-pattern = "allow" +single-match-else = "warn" +single-option-map = "warn" +stable-sort-primitive = "warn" +std-instead-of-alloc = "warn" +std-instead-of-core = "warn" +str-split-at-newline = "warn" +str-to-string = "warn" +string-add = "warn" +string-add-assign = "warn" +string-lit-as-bytes = "warn" +string-lit-chars-any = "warn" +string-slice = "warn" +struct-excessive-bools = "allow" +struct-field-names = "warn" +suboptimal-flops = "warn" +suspicious-operation-groupings = "warn" +suspicious-xor-used-as-pow = "warn" +tests-outside-test-module = "warn" +todo = "warn" +too-long-first-doc-paragraph = "allow" +too-many-lines = "allow" +trailing-empty-array = "warn" +trait-duplication-in-bounds = "warn" +transmute-ptr-to-ptr = "warn" +transmute-undefined-repr = "warn" +trivial-regex = "warn" +trivially-copy-pass-by-ref = "warn" +try-err = "warn" +tuple-array-conversions = "warn" +type-repetition-in-bounds = "warn" +unchecked-time-subtraction = "deny" +undocumented-unsafe-blocks = "deny" +unicode-not-nfc = "warn" +unimplemented = "warn" +uninhabited-references = "warn" +uninlined-format-args = "warn" +unnecessary-box-returns = "warn" +unnecessary-debug-formatting = "warn" +unnecessary-join = "warn" +unnecessary-literal-bound = "warn" +unnecessary-safety-comment = "warn" +unnecessary-safety-doc = "warn" +unnecessary-self-imports = "warn" +unnecessary-semicolon = "warn" +unnecessary-struct-initialization = "warn" +unnecessary-trailing-comma = "warn" +unnecessary-wraps = "warn" +unneeded-field-pattern = "warn" +unnested-or-patterns = "warn" +unreachable = "warn" +unreadable-literal = "warn" +unsafe-derive-deserialize = "warn" +unseparated-literal-suffix = "warn" +unused-async = "warn" +unused-async-trait-impl = "warn" +unused-peekable = "warn" +unused-result-ok = "warn" +unused-rounding = "warn" +unused-self = "warn" +unused-trait-names = "warn" +unwrap-in-result = "warn" +unwrap-used = "warn" +use-debug = "warn" +use-self = "warn" +used-underscore-binding = "warn" +used-underscore-items = "warn" +useless-let-if-seq = "warn" +verbose-bit-mask = "warn" +verbose-file-reads = "warn" +volatile-composites = "warn" +while-float = "warn" +wildcard-enum-match-arm = "warn" +wildcard-imports = "warn" +with-capacity-zero = "warn" +zero-sized-map-values = "warn" [workspace.lints.rust] -arithmetic_overflow = "forbid" -missing_docs = "forbid" -unsafe_code = "forbid" -unused_doc_comments = "forbid" +deprecated-safe = "forbid" +future-incompatible = "deny" +keyword-idents = "deny" +let-underscore = "warn" +nonstandard-style = "warn" +refining-impl-trait = "warn" +rust-2018-compatibility = "deny" +rust-2018-idioms = "deny" +rust-2021-compatibility = "deny" +rust-2024-compatibility = "deny" +unknown-or-malformed-diagnostic-attributes = "deny" +unused = { level = "warn", priority = -1 } + +ambiguous-glob-reexports = "warn" +ambiguous-negative-literals = "deny" +ambiguous-wide-pointer-comparisons = "warn" +arithmetic-overflow = "deny" +asm-sub-register = "warn" +async-fn-in-trait = "warn" +bad-asm-style = "warn" +binary-asm-labels = "deny" +bindings-with-variant-name = "deny" +break-with-label-and-loop = "warn" +c-void-returns = "warn" +clashing-extern-declarations = "warn" +closure-returning-async-block = "warn" +confusable-idents = "warn" +const-item-interior-mutations = "warn" +const-item-mutation = "warn" +dangerous-implicit-autorefs = "deny" +dangling-pointers-from-locals = "warn" +dangling-pointers-from-temporaries = "warn" +dead-code-pub-in-binary = "warn" +deprecated = "warn" +deprecated-in-future = "allow" +deprecated-where-clause-location = "warn" +deref-into-dyn-supertrait = "warn" +deref-nullptr = "deny" +double-negations = "warn" +drop-bounds = "warn" +dropping-copy-types = "warn" +dropping-references = "warn" +duplicate-features = "deny" +duplicate-macro-attributes = "warn" +dyn-drop = "warn" +enum-intrinsics-non-enums = "deny" +explicit-builtin-cfgs-in-flags = "deny" +exported-private-dependencies = "warn" +ffi-unwind-calls = "warn" +for-loops-over-fallibles = "warn" +forgetting-copy-types = "warn" +forgetting-references = "warn" +function-casts-as-integer = "warn" +function-item-references = "warn" +hidden-glob-reexports = "warn" +impl-trait-redundant-captures = "warn" +improper-ctypes = "warn" +improper-ctypes-definitions = "warn" +improper-gpu-kernel-arg = "warn" +incomplete-features = "warn" +incomplete-include = "deny" +ineffective-unstable-trait-impl = "deny" +inline-no-sanitize = "warn" +integer-to-ptr-transmutes = "warn" +internal-features = "warn" +invalid-atomic-ordering = "deny" +invalid-doc-attributes = "warn" +invalid-from-utf8 = "warn" +invalid-from-utf8-unchecked = "deny" +invalid-nan-comparisons = "warn" +invalid-null-arguments = "deny" +invalid-reference-casting = "deny" +invalid-runtime-symbol-definitions = "deny" +invalid-value = "warn" +irrefutable-let-patterns = "warn" +large-assignments = "warn" +linker-info = "allow" +linker-messages = "warn" +long-running-const-eval = "deny" +macro-use-extern-crate = "warn" +meta-variable-misuse = "warn" +mismatched-lifetime-syntaxes = "warn" +missing-abi = "warn" +missing-copy-implementations = "warn" +missing-debug-implementations = "warn" +missing-docs = "warn" +missing-gpu-kernel-export-name = "warn" +mixed-script-confusables = "warn" +mutable-transmutes = "deny" +named-arguments-used-positionally = "warn" +named-asm-labels = "deny" +no-mangle-const-items = "deny" +no-mangle-generic-items = "warn" +non-ascii-idents = "deny" +non-contiguous-range-endpoints = "warn" +non-local-definitions = "warn" +non-shorthand-field-patterns = "warn" +noop-method-call = "warn" +opaque-hidden-inferred-bound = "warn" +overflowing-literals = "deny" +overlapping-range-endpoints = "warn" +private-bounds = "warn" +private-interfaces = "warn" +ptr-to-integer-transmute-in-consts = "warn" +redundant-imports = "warn" +redundant-lifetimes = "warn" +renamed-and-removed-lints = "warn" +rtsan-nonblocking-async = "warn" +single-use-lifetimes = "warn" +special-module-name = "warn" +stable-features = "warn" +suspicious-double-ref-op = "warn" +suspicious-runtime-symbol-definitions = "warn" +text-direction-codepoint-in-comment = "deny" +text-direction-codepoint-in-literal = "deny" +trivial-bounds = "warn" +trivial-casts = "warn" +trivial-numeric-casts = "warn" +type-alias-bounds = "warn" +uncommon-codepoints = "warn" +unconditional-panic = "deny" +unconditional-recursion = "warn" +undropped-manually-drops = "deny" +unexpected-cfgs = "warn" +unfulfilled-lint-expectations = "warn" +ungated-async-fn-track-caller = "warn" +unit-bindings = "warn" +unknown-crate-types = "deny" +unknown-lints = "warn" +unnameable-test-items = "warn" +unnameable-types = "warn" +unnecessary-transmutes = "warn" +unpredictable-function-pointer-comparisons = "warn" +unreachable-cfg-select-predicates = "warn" +unreachable-pub = "warn" +unsafe-code = "forbid" +unstable-features = "forbid" +unused-associated-type-bounds = "warn" +unused-comparisons = "warn" +unused-crate-dependencies = "warn" +unused-import-braces = "warn" +unused-lifetimes = "warn" +unused-qualifications = "warn" +unused-results = "warn" +useless-deprecated = "deny" +useless-ptr-null-checks = "warn" +uses-power-alignment = "warn" +variant-size-differences = "warn" +warnings = "warn" +while-true = "warn" + +# unstable lints +# default-overrides-default-fields = "deny" +# deprecated-llvm-intrinsic = "warn" +# implicit-provenance-casts = "deny" +# multiple-supertrait-upcastable = "warn" +# must-not-suspend = "warn" +# non-exhaustive-omitted-patterns = "warn" +# resolving-to-items-shadowing-supertrait-items = "warn" +# shadowing-supertrait-items = "warn" +# tail-call-track-caller = "warn" +# test-unstable-lint = "deny" +# unqualified-local-imports = "deny" + +[workspace.lints.rustdoc] +bare-urls = "warn" +broken-intra-doc-links = "warn" +invalid-codeblock-attributes = "warn" +invalid-html-tags = "warn" +invalid-rust-codeblocks = "warn" +missing-crate-level-docs = "warn" +private-doc-tests = "warn" +private-intra-doc-links = "warn" +redundant-explicit-links = "warn" +unescaped-backticks = "warn" + +# unstable lints +# missing-doc-code-examples = "warn" [profile.release] opt-level = 3 diff --git a/README.md b/README.md index d706ca7..d8c3980 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,16 @@ # Seamantic -[![Crates Version](https://img.shields.io/crates/v/seamantic.svg)](https://crates.io/crates/seamantic) +## Development -A library to enhance SeaORM +Run the full validation suite before committing: -## Various builds +```sh +just all +just install +``` -- build: `cargo hack --feature-powerset build` -- clippy: `cargo hack --feature-powerset clippy -- -D warnings` -- test: `cargo hack --feature-powerset test` -- test old: `cargo +1.88 hack --feature-powerset test` -- example: `cargo run --example=migrations --features=sqlite` -- fmt: `cargo fmt --check` -- docs: `RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features` -- semver: `cargo semver-checks --all-features` -- publish: `cargo publish --dry-run -p seamantic` +##### Publish + +- `cargo semver-checks --all-features` +- `cargo publish --dry-run -p ` +- `cargo publish --dry-run --workspace` diff --git a/seamantic/Cargo.toml b/crates/seamantic/Cargo.toml similarity index 82% rename from seamantic/Cargo.toml rename to crates/seamantic/Cargo.toml index ce39b40..6c051c6 100644 --- a/seamantic/Cargo.toml +++ b/crates/seamantic/Cargo.toml @@ -1,14 +1,16 @@ [package] name = "seamantic" -version = "0.0.14" -license-file.workspace = true - +version = "1.0.0" description = "A library to enhance SeaORM" -repository = "https://github.com/QuantumShade/seamantic" -categories = [] +repository = "https://git.skrundz.dev/quantumshade/seamantic" +keywords = ["SeaORM"] +categories = ["database"] +include = ["/src"] +publish = true edition.workspace = true rust-version.workspace = true +license-file.workspace = true [package.metadata.docs.rs] all-features = true @@ -31,7 +33,7 @@ serde_test = { workspace = true } tokio = { workspace = true, features = ["macros", "rt"] } [features] -default = [] +default = ["sqlite"] serde = ["dep:serde"] sqlite = ["sea-orm-migration/sqlx-sqlite"] diff --git a/seamantic/README.md b/crates/seamantic/README.md similarity index 100% rename from seamantic/README.md rename to crates/seamantic/README.md diff --git a/seamantic/examples/migrations/m_01.rs b/crates/seamantic/examples/migrations/m_01.rs similarity index 79% rename from seamantic/examples/migrations/m_01.rs rename to crates/seamantic/examples/migrations/m_01.rs index 2848d58..75b737a 100644 --- a/seamantic/examples/migrations/m_01.rs +++ b/crates/seamantic/examples/migrations/m_01.rs @@ -14,6 +14,10 @@ pub(super) struct Migration; #[async_trait::async_trait] impl MigrationTrait for Migration { + #[expect( + elided_lifetimes_in_paths, + reason = "async_trait causes lifetimes to be strange" + )] async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( @@ -28,6 +32,10 @@ impl MigrationTrait for Migration { Ok(()) } + #[expect( + elided_lifetimes_in_paths, + reason = "async_trait causes lifetimes to be strange" + )] async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .drop_table(Table::drop().table(Objects::Table).to_owned()) diff --git a/seamantic/examples/migrations/main.rs b/crates/seamantic/examples/migrations/main.rs similarity index 83% rename from seamantic/examples/migrations/main.rs rename to crates/seamantic/examples/migrations/main.rs index 49138b2..d292377 100644 --- a/seamantic/examples/migrations/main.rs +++ b/crates/seamantic/examples/migrations/main.rs @@ -15,3 +15,6 @@ async fn main() { let database = Database::connect(options).await.expect("Database::connect"); Migrator::up(&database, None).await.expect("Migrator::up"); } + +// dev-dependencies cannot be optional and `serde_test` is not used +use {serde_test as _, tokio as _}; diff --git a/seamantic/src/lib.rs b/crates/seamantic/src/lib.rs similarity index 85% rename from seamantic/src/lib.rs rename to crates/seamantic/src/lib.rs index dbe72de..3d2f396 100644 --- a/seamantic/src/lib.rs +++ b/crates/seamantic/src/lib.rs @@ -1,4 +1,4 @@ -//! A library for enhacing SeaORM +//! A library for enhacing `SeaORM`. #![cfg_attr(docsrs, feature(doc_cfg))] @@ -46,3 +46,8 @@ macro_rules! migrations { } }; } + +// dev-dependencies cannot be optional and `tokio` and `serde_test` are only used +// when the `sqlite` feature is active +#[cfg(test)] +use {serde_test as _, tokio as _}; diff --git a/seamantic/src/model/duration.rs b/crates/seamantic/src/model/duration.rs similarity index 73% rename from seamantic/src/model/duration.rs rename to crates/seamantic/src/model/duration.rs index 21dde2c..c482506 100644 --- a/seamantic/src/model/duration.rs +++ b/crates/seamantic/src/model/duration.rs @@ -1,37 +1,45 @@ -//! [Duration] utilities +//! [Duration] utilities. use core::time::Duration; use sea_orm::sea_query::{ArrayType, Nullable, ValueType, ValueTypeErr}; use sea_orm::{ColIdx, ColumnType, DbErr, QueryResult, TryFromU64, TryGetError, TryGetable, Value}; -// "u64 unsupported by sqlx-sqlite", so use i64 as the bit representation +/// The internal representation that `SeaORM` uses for durations. +/// +/// "u64 unsupported by sqlx-sqlite", so use i64 as the bit representation. type SeaOrmRepr = i64; +/// The internal represenation that [Duration] uses. type DurationRepr = u64; -/// Wrapper around [Duration] to store a number of seconds +/// Wrapper around [Duration] to store a number of seconds. /// -/// ### Warning: -/// Sub-second precision will be lost +/// # Warning: +/// Sub-second precision will be lost. #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", serde(transparent))] #[repr(transparent)] +#[expect(clippy::exhaustive_structs, reason = "unlikely to change")] pub struct Seconds(pub Duration); impl From for Seconds { + #[inline] fn from(value: Duration) -> Self { Self(Duration::from_secs(value.as_secs())) } } impl From for Duration { + #[inline] fn from(value: Seconds) -> Self { value.0 } } +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ValueType for Seconds { + #[inline] fn try_from(v: Value) -> Result { ::try_from(v) .map(|i| DurationRepr::from_ne_bytes(i.to_ne_bytes())) @@ -39,26 +47,32 @@ impl ValueType for Seconds { .map(Self) } + #[inline] fn type_name() -> String { - core::any::type_name::().to_string() + core::any::type_name::().to_owned() } + #[inline] fn array_type() -> ArrayType { SeaOrmRepr::array_type() } + #[inline] fn column_type() -> ColumnType { SeaOrmRepr::column_type() } } impl From for Value { + #[inline] fn from(value: Seconds) -> Self { value.0.as_secs().into() } } +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl TryGetable for Seconds { + #[inline] fn try_get_by(res: &QueryResult, index: I) -> Result { SeaOrmRepr::try_get_by(res, index) .map(|i| DurationRepr::from_ne_bytes(i.to_ne_bytes())) @@ -68,6 +82,7 @@ impl TryGetable for Seconds { } impl TryFromU64 for Seconds { + #[inline] fn try_from_u64(n: u64) -> Result { SeaOrmRepr::try_from_u64(n) .map(|i| DurationRepr::from_ne_bytes(i.to_ne_bytes())) @@ -77,6 +92,7 @@ impl TryFromU64 for Seconds { } impl Nullable for Seconds { + #[inline] fn null() -> Value { SeaOrmRepr::null() } @@ -91,10 +107,9 @@ mod tests { use super::Seconds; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "seconds")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: u8, #[sea_orm(primary_key, auto_increment = false)] @@ -102,9 +117,9 @@ mod tests { nullable: Option, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} - #[allow(dead_code)] #[derive(Debug, EnumIter, DeriveRelation)] - pub enum Relation {} + enum Relation {} } diff --git a/seamantic/src/model/id.rs b/crates/seamantic/src/model/id.rs similarity index 62% rename from seamantic/src/model/id.rs rename to crates/seamantic/src/model/id.rs index 0dc56d4..1919f3c 100644 --- a/seamantic/src/model/id.rs +++ b/crates/seamantic/src/model/id.rs @@ -1,4 +1,4 @@ -//! Typed IDs for use as primary keys +//! Typed IDs for use as primary keys. use core::cmp::Ordering; use core::fmt; @@ -8,57 +8,70 @@ use core::marker::PhantomData; use sea_orm::sea_query::{ArrayType, Nullable, ValueType, ValueTypeErr}; use sea_orm::{ColIdx, ColumnType, DbErr, QueryResult, TryFromU64, TryGetError, TryGetable, Value}; -/// The internal representation used by the database +/// The internal representation used by the database. pub type SeaOrmRepr = i64; -/// An opaque type representing a row ID +/// An opaque type representing a row ID. /// -/// IDs should be tagged with `#[sea_orm(primary_key, auto_increment = false)]` +/// IDs should be tagged with `#[sea_orm(primary_key, auto_increment = false)]`. #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", serde(transparent))] #[repr(transparent)] pub struct Id { + /// The ID. id: SeaOrmRepr, + /// `PhantomData` for `T`. #[cfg_attr(feature = "serde", serde(skip_serializing, default))] _phantom: PhantomData, } -// Manual implementation since `T: Clone` is not required +// Manual implementation since `T: Clone` is not required. +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl Clone for Id { + #[inline] fn clone(&self) -> Self { *self } } -// Manual implementation since `T: Copy` is not required +// Manual implementation since `T: Copy` is not required. impl Copy for Id {} -// Manual implementation since `T: PartialEq` is not required +// Manual implementation since `T: PartialEq` is not required. +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl PartialEq for Id { + #[inline] fn eq(&self, other: &Self) -> bool { - self.id == other.id + self.id.eq(&other.id) } } -// Manual implementation since `T: Eq` is not required +// Manual implementation since `T: Eq` is not required. +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl Eq for Id {} -// Manual implementation since `T: PartialOrd` is not required +// Manual implementation since `T: PartialOrd` is not required. +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl PartialOrd for Id { + #[inline] fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } // Manual implementation since `T: Ord` is not required +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl Ord for Id { + #[inline] fn cmp(&self, other: &Self) -> Ordering { self.id.cmp(&other.id) } } // Manual implementation since `T: Hash` is not required +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl Hash for Id { + #[inline] fn hash(&self, state: &mut H) { self.id.hash(state); } @@ -66,7 +79,9 @@ impl Hash for Id { impl Id { /// Allows the conversion from a raw value to [Id], though the use is discouraged. - pub fn from_raw(raw: SeaOrmRepr) -> Self { + #[inline] + #[must_use] + pub const fn from_raw(raw: SeaOrmRepr) -> Self { Self { id: raw, _phantom: PhantomData, @@ -74,13 +89,16 @@ impl Id { } /// Allows extracting the raw value, though the use is discouraged. - pub fn into_raw(self) -> SeaOrmRepr { + #[inline] + #[must_use] + pub const fn into_raw(self) -> SeaOrmRepr { self.id } } impl fmt::Debug for Id { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Id") .field("T", &core::any::type_name::()) .field("id", &self.id) @@ -88,7 +106,9 @@ impl fmt::Debug for Id { } } +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ValueType for Id { + #[inline] fn try_from(v: Value) -> Result { ::try_from(v).map(|id| Self { id, @@ -96,26 +116,32 @@ impl ValueType for Id { }) } + #[inline] fn type_name() -> String { - format!("Id<{}>", &core::any::type_name::()) + format!("Id<{}>", core::any::type_name::()) } + #[inline] fn array_type() -> ArrayType { SeaOrmRepr::array_type() } + #[inline] fn column_type() -> ColumnType { SeaOrmRepr::column_type() } } impl From> for Value { + #[inline] fn from(value: Id) -> Self { value.id.into() } } +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl TryGetable for Id { + #[inline] fn try_get_by(res: &QueryResult, index: I) -> Result { SeaOrmRepr::try_get_by(res, index).map(|id| Self { id, @@ -125,6 +151,7 @@ impl TryGetable for Id { } impl TryFromU64 for Id { + #[inline] fn try_from_u64(n: u64) -> Result { SeaOrmRepr::try_from_u64(n).map(|id| Self { id, @@ -134,6 +161,7 @@ impl TryFromU64 for Id { } impl Nullable for Id { + #[inline] fn null() -> Value { SeaOrmRepr::null() } @@ -148,24 +176,32 @@ mod tests { use super::Id; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "ids")] - pub struct Model { + #[expect(clippy::use_self, reason = "derive macros cause Self to be invalid")] + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: Id, nullable: Option>, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} - #[allow(dead_code)] #[derive(Debug, EnumIter, DeriveRelation)] - pub enum Relation {} + enum Relation {} + + #[test] + #[expect(clippy::missing_panics_doc, reason = "unit test")] + fn round_trip() { + let raw = 1234; + let id = Id::<()>::from_raw(raw); + assert_eq!(raw, id.into_raw()); + } #[test] #[cfg(feature = "serde")] - fn test_serde() { + fn ser_de() { let id: Id<()> = Id::from_raw(1234); serde_test::assert_tokens(&id, &[serde_test::Token::I64(1234)]); } diff --git a/crates/seamantic/src/model/mod.rs b/crates/seamantic/src/model/mod.rs new file mode 100644 index 0000000..66b5e20 --- /dev/null +++ b/crates/seamantic/src/model/mod.rs @@ -0,0 +1,6 @@ +//! `SeaORM` column types for enforcing data consistency. + +pub mod duration; +pub mod id; +pub mod net; +pub mod path; diff --git a/seamantic/src/model/ip.rs b/crates/seamantic/src/model/net.rs similarity index 75% rename from seamantic/src/model/ip.rs rename to crates/seamantic/src/model/net.rs index 9cdb526..68d0e5b 100644 --- a/seamantic/src/model/ip.rs +++ b/crates/seamantic/src/model/net.rs @@ -1,74 +1,89 @@ -//! [IpAddr], [Ipv4Addr], and [Ipv6Addr] utilities +//! [`IpAddr`], [`Ipv4Addr`], and [`Ipv6Addr`] utilities. use core::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use sea_orm::sea_query::{ArrayType, Nullable, ValueType, ValueTypeErr}; use sea_orm::{ColIdx, ColumnType, DbErr, QueryResult, TryFromU64, TryGetError, TryGetable, Value}; +/// The internal representation used by the database. type SeaOrmRepr = String; -/// Wrapper around [IpAddr] -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +/// Wrapper around [`IpAddr`]. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", serde(transparent))] #[repr(transparent)] +#[expect(clippy::exhaustive_structs, reason = "unlikely to change")] pub struct IpAddress(pub IpAddr); -/// Wrapper around [IpAddr] -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +/// Wrapper around [`Ipv4Addr`]. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", serde(transparent))] #[repr(transparent)] +#[expect(clippy::exhaustive_structs, reason = "unlikely to change")] pub struct Ipv4Address(pub Ipv4Addr); -/// Wrapper around [IpAddr] -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +/// Wrapper around [`Ipv6Addr`]. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", serde(transparent))] #[repr(transparent)] +#[expect(clippy::exhaustive_structs, reason = "unlikely to change")] pub struct Ipv6Address(pub Ipv6Addr); +/// Implements `SeaORM` traits for `IP` types. macro_rules! impl_addr { ($t:ty, $inner:ty, $repr:ty) => { impl From<$inner> for $t { + #[inline] fn from(value: $inner) -> Self { Self(value) } } impl From<$t> for $inner { + #[inline] fn from(value: $t) -> Self { value.0 } } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ValueType for $t { + #[inline] fn try_from(v: Value) -> Result { ::try_from(v) .and_then(|s| s.parse().map_err(|_| ValueTypeErr)) .map(Self) } + #[inline] fn type_name() -> String { core::any::type_name::().to_string() } + #[inline] fn array_type() -> ArrayType { SeaOrmRepr::array_type() } + #[inline] fn column_type() -> ColumnType { SeaOrmRepr::column_type() } } impl From<$t> for Value { + #[inline] fn from(value: $t) -> Self { value.0.to_string().into() } } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl TryGetable for $t { + #[inline] fn try_get_by(res: &QueryResult, index: I) -> Result { SeaOrmRepr::try_get_by(res, index) .and_then(|s| s.parse().map_err(|_| TryGetError::Null(Self::type_name()))) @@ -77,6 +92,7 @@ macro_rules! impl_addr { } impl TryFromU64 for $t { + #[inline] fn try_from_u64(n: u64) -> Result { SeaOrmRepr::try_from_u64(n) .and_then(|s| { @@ -88,6 +104,7 @@ macro_rules! impl_addr { } impl Nullable for $t { + #[inline] fn null() -> Value { SeaOrmRepr::null() } @@ -109,10 +126,9 @@ mod tests { use super::super::IpAddress; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "ipaddress")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: u8, #[sea_orm(primary_key, auto_increment = false)] @@ -120,11 +136,11 @@ mod tests { nullable: Option, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} - #[allow(dead_code)] #[derive(Debug, EnumIter, DeriveRelation)] - pub enum Relation {} + enum Relation {} } mod ipv4address { use sea_orm::{ @@ -134,10 +150,9 @@ mod tests { use super::super::Ipv4Address; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "ipv4address")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: u8, #[sea_orm(primary_key, auto_increment = false)] @@ -145,11 +160,11 @@ mod tests { nullable: Option, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} - #[allow(dead_code)] #[derive(Debug, EnumIter, DeriveRelation)] - pub enum Relation {} + enum Relation {} } mod ipv6address { use sea_orm::{ @@ -159,10 +174,9 @@ mod tests { use super::super::Ipv6Address; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "ipv6address")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: u8, #[sea_orm(primary_key, auto_increment = false)] @@ -170,10 +184,10 @@ mod tests { nullable: Option, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} - #[allow(dead_code)] #[derive(Debug, EnumIter, DeriveRelation)] - pub enum Relation {} + enum Relation {} } } diff --git a/seamantic/src/model/path.rs b/crates/seamantic/src/model/path.rs similarity index 76% rename from seamantic/src/model/path.rs rename to crates/seamantic/src/model/path.rs index c0fd788..bd27ade 100644 --- a/seamantic/src/model/path.rs +++ b/crates/seamantic/src/model/path.rs @@ -1,4 +1,4 @@ -//! [Path] and [PathBuf] utilities +//! [Path] and [`PathBuf`] utilities. use std::ffi::OsString; use std::path::{Path, PathBuf}; @@ -11,34 +11,42 @@ compile_error!("PathBytes is not supported on Windows"); use sea_orm::sea_query::{ArrayType, Nullable, ValueType, ValueTypeErr}; use sea_orm::{ColIdx, ColumnType, DbErr, QueryResult, TryFromU64, TryGetError, TryGetable, Value}; +/// The internal representation used by the database. type SeaOrmRepr = Vec; -/// Wrapper around [PathBuf] to store paths as bytes in SeaORM +/// Wrapper around [`PathBuf`] to store paths as bytes in `SeaORM`. #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr(feature = "serde", serde(transparent))] #[repr(transparent)] +#[expect(clippy::exhaustive_structs, reason = "unlikely to change")] +#[expect(clippy::module_name_repetitions, reason = "Bytes wouldn't make sense")] pub struct PathBytes(pub PathBuf); impl From for PathBytes { + #[inline] fn from(value: PathBuf) -> Self { Self(value) } } impl From for PathBuf { + #[inline] fn from(value: PathBytes) -> Self { value.0 } } impl AsRef for PathBytes { + #[inline] fn as_ref(&self) -> &Path { &self.0 } } +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ValueType for PathBytes { + #[inline] fn try_from(v: Value) -> Result { ::try_from(v) .map(OsString::from_vec) @@ -46,26 +54,32 @@ impl ValueType for PathBytes { .map(Self) } + #[inline] fn type_name() -> String { - core::any::type_name::().to_string() + core::any::type_name::().to_owned() } + #[inline] fn array_type() -> ArrayType { SeaOrmRepr::array_type() } + #[inline] fn column_type() -> ColumnType { SeaOrmRepr::column_type() } } impl From for Value { + #[inline] fn from(value: PathBytes) -> Self { value.0.into_os_string().into_vec().into() } } +#[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl TryGetable for PathBytes { + #[inline] fn try_get_by(res: &QueryResult, index: I) -> Result { SeaOrmRepr::try_get_by(res, index) .map(OsString::from_vec) @@ -75,6 +89,7 @@ impl TryGetable for PathBytes { } impl TryFromU64 for PathBytes { + #[inline] fn try_from_u64(n: u64) -> Result { SeaOrmRepr::try_from_u64(n) .map(OsString::from_vec) @@ -84,6 +99,7 @@ impl TryFromU64 for PathBytes { } impl Nullable for PathBytes { + #[inline] fn null() -> Value { SeaOrmRepr::null() } @@ -98,10 +114,9 @@ mod tests { use super::PathBytes; - #[allow(dead_code)] #[derive(Debug, Clone, PartialEq, Eq, DeriveEntityModel)] #[sea_orm(table_name = "paths")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: u8, #[sea_orm(primary_key, auto_increment = false)] @@ -109,9 +124,9 @@ mod tests { nullable: Option, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} - #[allow(dead_code)] #[derive(Debug, EnumIter, DeriveRelation)] - pub enum Relation {} + enum Relation {} } diff --git a/seamantic/src/orm/mod.rs b/crates/seamantic/src/orm/mod.rs similarity index 51% rename from seamantic/src/orm/mod.rs rename to crates/seamantic/src/orm/mod.rs index b225a97..22bc4aa 100644 --- a/seamantic/src/orm/mod.rs +++ b/crates/seamantic/src/orm/mod.rs @@ -1,4 +1,4 @@ -//! Helpers for working with SeaORM +//! Helpers for working with `SeaORM`. mod upsert; pub use upsert::UpsertTrait; diff --git a/crates/seamantic/src/orm/upsert.rs b/crates/seamantic/src/orm/upsert.rs new file mode 100644 index 0000000..c36932f --- /dev/null +++ b/crates/seamantic/src/orm/upsert.rs @@ -0,0 +1,66 @@ +//! Provides [`UpsertTrait`] for performing an upsert into a database. + +use sea_orm::sea_query::{IntoColumnRef as _, OnConflict}; +use sea_orm::{ActiveModelTrait, EntityTrait, Insert, Iterable as _}; + +/// This trait add a method on [Insert] to allow for upsert behavior. +pub trait UpsertTrait: private::Sealed { + /// Set ON CONFLICT on primary key to update all other columns. + #[must_use] + fn on_conflict_upsert(self) -> Self; +} + +/// Returns an [Iterator] over the `PrimaryKey` columns of an [`ActiveModelTrait`]. +fn primary_key_iter() +-> impl Iterator::PrimaryKey> { + ::PrimaryKey::iter() +} + +/// Returns an [Iterator] over the [`EntityTrait`] columns of an [`ActiveModelTrait`]. +fn column_iter() -> impl Iterator::Column> { + <::Entity as EntityTrait>::Column::iter() +} + +impl private::Sealed for Insert {} +impl UpsertTrait for Insert { + #[inline] + fn on_conflict_upsert(self) -> Self { + self.on_conflict( + OnConflict::columns(primary_key_iter::()) + .update_columns(column_iter::().filter(|col| { + !primary_key_iter::().any(|pk| pk.into_column_ref() == col.into_column_ref()) + })) + .to_owned(), + ) + } +} + +/// Private module. +mod private { + /// Sealed trait to prevent implementations of `UpsertTrait`. + #[expect(unnameable_types, reason = "sealed trait")] + pub trait Sealed {} +} + +#[cfg(test)] +mod tests { + use super::{UpsertTrait, private::Sealed}; + + #[test] + fn seal() { + struct S; + + impl Sealed for S {} + impl UpsertTrait for S { + fn on_conflict_upsert(self) -> Self { + self + } + } + + fn is_sealed() {} + fn is_upsert() {} + + is_sealed::(); + is_upsert::(); + } +} diff --git a/seamantic/src/schema/mod.rs b/crates/seamantic/src/schema/mod.rs similarity index 75% rename from seamantic/src/schema/mod.rs rename to crates/seamantic/src/schema/mod.rs index 0e8374c..9a00117 100644 --- a/seamantic/src/schema/mod.rs +++ b/crates/seamantic/src/schema/mod.rs @@ -1,4 +1,4 @@ -//! Helpers for defining SeaORM schemas +//! Helpers for defining `SeaORM` schemas. #[cfg(feature = "sqlite")] mod sqlite; diff --git a/seamantic/src/schema/sqlite.rs b/crates/seamantic/src/schema/sqlite.rs similarity index 72% rename from seamantic/src/schema/sqlite.rs rename to crates/seamantic/src/schema/sqlite.rs index fffe75c..ac9bf3c 100644 --- a/seamantic/src/schema/sqlite.rs +++ b/crates/seamantic/src/schema/sqlite.rs @@ -1,16 +1,18 @@ +//! Helper functions for declaring `SQLite` schemas. + use sea_orm_migration::schema::{integer_null, string}; use sea_orm_migration::sea_query::{ColumnDef, IntoIden}; /// Sets the column to be an alias for SQLite's rowid. /// /// Required conditions: -/// - This column must *not* be auto_increment -/// - There cannot be other primary_key columns in the table +/// - This column must *not* be `auto_increment` +/// - There cannot be other `primary_key` columns in the table /// /// When using `DeriveEntityModel`, the type must be `i64` (or equivalent) /// and should be tagged with: /// -/// `#[sea_orm(primary_key, auto_increment = false)]` +/// > `#[sea_orm(primary_key, auto_increment = false)]`. /// /// When using the new entity format: /// @@ -25,11 +27,12 @@ use sea_orm_migration::sea_query::{ColumnDef, IntoIden}; /// id: Id, /// } /// impl ActiveModelBehavior for ActiveModel {} +#[inline] pub fn sqlite_rowid_alias(name: T) -> ColumnDef { integer_null(name).primary_key().take() } -/// Set the column to be a case insensitive string +/// Set the column to be a case insensitive string. /// /// When using the new entity format: /// @@ -46,6 +49,7 @@ pub fn sqlite_rowid_alias(name: T) -> ColumnDef { /// nocase: String, /// } /// impl ActiveModelBehavior for ActiveModel {} +#[inline] pub fn sqlite_case_insensitive_string(name: T) -> ColumnDef { string(name).extra("COLLATE NOCASE").take() } @@ -54,7 +58,12 @@ pub fn sqlite_case_insensitive_string(name: T) -> ColumnDef { mod entity_tests { use sea_orm::{ConnectOptions, Database, DatabaseConnection}; - pub async fn new_initialized_memory_db() -> DatabaseConnection { + /// Create and initialize a new in-memory SQLite database. + /// + /// # Panics + /// If the database driver fails to connect, or if the schema registry fails + /// to sync the database schema. + async fn new_initialized_memory_db() -> DatabaseConnection { let options = ConnectOptions::new("sqlite::memory:"); let db = Database::connect(options) @@ -67,6 +76,22 @@ mod entity_tests { db } + #[expect( + clippy::unused_async_trait_impl, + reason = "sea_orm::model generates unpolled futures" + )] + #[expect( + clippy::same_name_method, + reason = "sea_orm::model generates the same method names" + )] + #[expect( + clippy::allow_attributes, + reason = "under different conditions sea_orm::model generates different code" + )] + #[allow( + clippy::future_not_send, + reason = "sea_orm::model generates un-send futures" + )] mod rowid_test { use sea_orm::ActiveValue::{NotSet, Set}; use sea_orm::entity::prelude::*; @@ -76,14 +101,18 @@ mod entity_tests { #[sea_orm::model] #[derive(Debug, Clone, DeriveEntityModel)] #[sea_orm(table_name = "rowid_test")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: Id, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} + #[cfg(not(miri))] #[tokio::test] - async fn test_sqlite_rowid_alias() { + #[expect(clippy::missing_panics_doc, reason = "unit test")] + #[expect(clippy::default_numeric_fallback, reason = "numbers are not ambiguous")] + async fn sqlite_rowid_alias() { let db = super::new_initialized_memory_db().await; // Starts at 1 and increments @@ -98,7 +127,7 @@ mod entity_tests { let model = ActiveModel { id: Set(Id::from_raw(i)), }; - model.delete(&db).await.expect("delete"); + _ = model.delete(&db).await.expect("delete"); let model = ActiveModel { id: NotSet }; let model = model.insert(&db).await.expect("insert"); assert_eq!(model.id.into_raw(), i); @@ -156,6 +185,22 @@ mod entity_tests { } } + #[expect( + clippy::unused_async_trait_impl, + reason = "sea_orm::model generates unpolled futures" + )] + #[expect( + clippy::same_name_method, + reason = "sea_orm::model generates the same method names" + )] + #[expect( + clippy::allow_attributes, + reason = "under different conditions sea_orm::model generates different code" + )] + #[allow( + clippy::future_not_send, + reason = "sea_orm::model generates un-send futures" + )] mod nocase_test { use sea_orm::ActiveValue::Set; use sea_orm::entity::prelude::*; @@ -163,17 +208,20 @@ mod entity_tests { #[sea_orm::model] #[derive(Debug, Clone, DeriveEntityModel)] #[sea_orm(table_name = "nocase_test")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: i64, case: String, #[sea_orm(extra = "COLLATE NOCASE")] nocase: String, } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} + #[cfg(not(miri))] #[tokio::test] - async fn test_sqlite_case_insensitive_string() { + #[expect(clippy::missing_panics_doc, reason = "unit test")] + async fn sqlite_case_insensitive_string() { let db = super::new_initialized_memory_db().await; let i = 50; @@ -185,7 +233,7 @@ mod entity_tests { case: Set("abcd".to_owned()), nocase: Set("abcd".to_owned()), }; - model.insert(&db).await.expect("insert"); + drop(model.insert(&db).await.expect("insert")); } // Query by uppercase string @@ -216,7 +264,7 @@ mod entity_tests { mod tests { use sea_orm::ActiveValue::{NotSet, Set}; use sea_orm::entity::prelude::*; - use sea_orm::{ConnectOptions, Database, DatabaseConnection}; + use sea_orm::{ConnectOptions, Database}; use sea_orm_migration::async_trait::async_trait; use sea_orm_migration::prelude::*; @@ -224,14 +272,21 @@ mod tests { use super::{sqlite_case_insensitive_string, sqlite_rowid_alias}; + #[expect(clippy::missing_panics_doc, reason = "unit test")] async fn new_memory_db() -> DatabaseConnection { let options = ConnectOptions::new("sqlite::memory:"); Database::connect(options).await.expect("Database::connect") } + #[cfg(not(miri))] #[tokio::test] + #[expect(unused_qualifications, reason = "derive macro qualifies everything")] + #[expect(clippy::missing_panics_doc, reason = "unit test")] + #[expect(clippy::default_numeric_fallback, reason = "numbers are not ambiguous")] + #[expect(clippy::redundant_test_prefix, reason = "name collision")] async fn test_sqlite_rowid_alias() { struct Migrator; + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl MigratorTrait for Migrator { fn migrations() -> Vec> { vec![Box::new(Migration)] @@ -246,7 +301,12 @@ mod tests { #[derive(DeriveMigrationName)] struct Migration; #[async_trait] + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl MigrationTrait for Migration { + #[expect( + elided_lifetimes_in_paths, + reason = "async_trait causes lifetimes to be strange" + )] async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( @@ -263,17 +323,21 @@ mod tests { #[derive(Debug, Clone, DeriveEntityModel)] #[sea_orm(table_name = "test_table")] - pub struct Model { + #[expect(clippy::use_self, reason = "derive macros cause Self to be invalid")] + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: Id, } #[derive(Debug, EnumIter)] - pub enum Relation {} + enum Relation {} + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl RelationTrait for Relation { + #[expect(clippy::panic, reason = "no relation")] fn def(&self) -> RelationDef { panic!("No RelationDef") } } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} let db = new_memory_db().await; @@ -291,7 +355,7 @@ mod tests { let model = ActiveModel { id: Set(Id::from_raw(i)), }; - model.delete(&db).await.expect("delete"); + _ = model.delete(&db).await.expect("delete"); let model = ActiveModel { id: NotSet }; let model = model.insert(&db).await.expect("insert"); assert_eq!(model.id.into_raw(), i); @@ -348,9 +412,14 @@ mod tests { } } + #[cfg(not(miri))] #[tokio::test] + #[expect(unused_qualifications, reason = "derive macro qualifies everything")] + #[expect(clippy::missing_panics_doc, reason = "unit test")] + #[expect(clippy::redundant_test_prefix, reason = "name collision")] async fn test_sqlite_case_insensitive_string() { struct Migrator; + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl MigratorTrait for Migrator { fn migrations() -> Vec> { vec![Box::new(Migration)] @@ -366,7 +435,12 @@ mod tests { #[derive(DeriveMigrationName)] struct Migration; #[async_trait] + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl MigrationTrait for Migration { + #[expect( + elided_lifetimes_in_paths, + reason = "async_trait causes lifetimes to be strange" + )] async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { manager .create_table( @@ -384,18 +458,21 @@ mod tests { #[derive(Debug, Clone, DeriveEntityModel)] #[sea_orm(table_name = "test_table")] - pub struct Model { + struct Model { #[sea_orm(primary_key, auto_increment = false)] id: i64, ci_str: String, } #[derive(Debug, EnumIter)] - pub enum Relation {} + enum Relation {} + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl RelationTrait for Relation { + #[expect(clippy::panic, reason = "no relation")] fn def(&self) -> RelationDef { panic!("No RelationDef") } } + #[expect(clippy::missing_trait_methods, reason = "accept default methods")] impl ActiveModelBehavior for ActiveModel {} let db = new_memory_db().await; @@ -409,7 +486,7 @@ mod tests { id: Set(i), ci_str: Set("abcd".to_owned()), }; - model.insert(&db).await.expect("insert"); + drop(model.insert(&db).await.expect("insert")); } // Query by uppercase string diff --git a/justfile b/justfile new file mode 100644 index 0000000..50d5594 --- /dev/null +++ b/justfile @@ -0,0 +1,43 @@ +set minimum-version := '1.55.0' +set default-list + +alias update := update-min + +all: + just all-min + just all-max +all-min: update-min build lint test example doc format +all-max: update-max build lint test example doc format + +update-min: + cargo +nightly update -Z direct-minimal-versions + +update-max: + cargo update + +build: + cargo hack --feature-powerset build + +lint: + cargo hack --feature-powerset clippy -- -D warnings + cargo hack --feature-powerset clippy --tests -- -D warnings + +test: + cargo hack --feature-powerset test + cargo +1.94 hack --feature-powerset test + cargo +nightly hack --feature-powerset miri test + +example: + cargo run --example=migrations --features=sqlite + +doc *args: + RUSTDOCFLAGS="--cfg docsrs -D warnings" cargo +nightly doc \ + --workspace --all-features --document-private-items \ + --lib --bins --no-deps --locked \ + {{ args }} + +format: + cargo fmt --check + +install: + cargo install --path crates/lint-policy-cli diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 292fe49..e000fd2 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "stable" +channel = "1.98" diff --git a/seamantic/src/model/mod.rs b/seamantic/src/model/mod.rs deleted file mode 100644 index 7e142e8..0000000 --- a/seamantic/src/model/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! SeaORM column types for enforcing data consistency - -pub mod duration; -pub mod id; -pub mod ip; -pub mod path; diff --git a/seamantic/src/orm/upsert.rs b/seamantic/src/orm/upsert.rs deleted file mode 100644 index 26c8c03..0000000 --- a/seamantic/src/orm/upsert.rs +++ /dev/null @@ -1,34 +0,0 @@ -use sea_orm::sea_query::{IntoColumnRef, OnConflict}; -use sea_orm::{ActiveModelTrait, EntityTrait, Insert, Iterable}; - -/// This trait add a method on [Insert] to allow for upsert behavior -pub trait UpsertTrait: private::Sealed { - /// Set ON CONFLICT on primary key to update all other columns - fn on_conflict_upsert(self) -> Self; -} - -fn primary_key_iter() --> impl Iterator::PrimaryKey> { - ::PrimaryKey::iter() -} - -fn column_iter() -> impl Iterator::Column> { - <::Entity as EntityTrait>::Column::iter() -} - -impl UpsertTrait for Insert { - fn on_conflict_upsert(self) -> Self { - self.on_conflict( - OnConflict::columns(primary_key_iter::()) - .update_columns(column_iter::().filter(|col| { - !primary_key_iter::().any(|pk| pk.into_column_ref() == col.into_column_ref()) - })) - .to_owned(), - ) - } -} - -mod private { - pub trait Sealed {} - impl Sealed for ::sea_orm::Insert {} -}