diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 3998e04..0d69e7c 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -24,9 +24,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", ] @@ -48,9 +48,9 @@ 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", ] @@ -113,15 +113,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "ar_archive_writer" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb93bbb63b9c227414f6eb3a0adfddca591a8ce1e9b60661bb08969b87e340b" +checksum = "73cd58deff2140a0a8eae87e417bd01db68a33e148aa93d1e8cd837e55e312b6" dependencies = [ "object", ] @@ -142,23 +142,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed51fe0f224d1d4ea768be38c51f9f831dee9d05c163c11fba0b8c44387b1fc3" -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[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 = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61d285d16bce7d0be61912f7928342b673067b6b7d7ef6cc179258ba7de1fecf" +checksum = "7c14b3d39f306bc28fd639d59f06e17a0f377d0021e1b7e9054e4d6fedc98774" dependencies = [ "arrow-arith", "arrow-array", @@ -175,9 +169,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "757ef1836251e88222542a7da2623bc1c9cb9e20afefa6db2c41e79991cd91d4" +checksum = "ce2961626677665b2195eb59242af4c7befe7b8737ca2050295389362380104e" dependencies = [ "arrow-array", "arrow-buffer", @@ -189,9 +183,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9a4a4b2b5ecd0e04df03471661cb61f28bed3c7fd50994715129b01b2edb97" +checksum = "1e5f6adeffdf587d7a31db5d2266189624b526730cd3627f9ff9fedae97ad584" dependencies = [ "ahash", "arrow-buffer", @@ -208,9 +202,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c12b576ef18c1deb80925a248b25ad84f419198d791b8e293fc6aaa60441fe90" +checksum = "097d193003ce7995d5d087089069ec2a6e0187faf5a6f8c9f38af2645d987182" dependencies = [ "bytes", "half", @@ -220,9 +214,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68338a9096a5dc9bc11927c58c43a8526d96bf6abd2012ef6c0c9f505991cc79" +checksum = "635c9c635668ad26adf76cce8fb276c4be7cf06e63bd516de7da514f9680ee53" dependencies = [ "arrow-array", "arrow-buffer", @@ -241,9 +235,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723fe4aeed7604e00b9883a465af4ff0a0e6c44c03e41a68c3d1cbc403e0e44d" +checksum = "9ba2f832eaeca24b8f26143dba750e42ee4ab51cf7d65e701ca9607cfda9f358" dependencies = [ "arrow-buffer", "arrow-schema", @@ -254,9 +248,9 @@ dependencies = [ [[package]] name = "arrow-flight" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bebfacc9d71f0728f6774164e4d4254b5e504d2b46812d0512d8290ec119a64" +checksum = "be0e6d452fff35cb4a3ef1a719d03fdfe653e590e8012b57d3057a316e295402" dependencies = [ "arrow-array", "arrow-buffer", @@ -275,9 +269,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "149437b14371f5b9ec60f5ddc751483ae99d7a7072653c0075e5e469156eea7b" +checksum = "dcc41681ea80f521df14c36725b74d4c60702c47f0793af2be469c04527e2599" dependencies = [ "arrow-array", "arrow-buffer", @@ -289,9 +283,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c08dff0686cf23ca4f562803f191ccbeb726dbae6309cd4b4aaf65e0f2c979" +checksum = "2c900759f3bd8354fd4196bc4403eee846894dc2adf66b4225472006a0bf18c5" dependencies = [ "arrow-array", "arrow-buffer", @@ -302,9 +296,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbec439386df71ad570e6758a946111322b9e9dc8db83b5527321f0b4c9119c2" +checksum = "f4c6425032e28266e3fc4ff680805e57e670d6ea92473043f3e65b7ed6ac79f2" dependencies = [ "arrow-array", "arrow-buffer", @@ -315,18 +309,18 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6fed2ca0d1eade57e811cbe73b98ad50cc08a1183e13b2d2aa43a7df593f40e" +checksum = "10fab8d4563491417ba801fab29d205104d20d4bdf37bda6cd1cf425cff598cd" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] name = "arrow-select" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "466b19cf75130b891dc1b23a84b343c714c62c64c9c62e365c76aa0ff90a53fb" +checksum = "fc58569193c2525915f3cc6310edba3792f1200f65d6e9ed330aa33e691493b8" dependencies = [ "ahash", "arrow-array", @@ -338,9 +332,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "59.2.0" +version = "59.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c838a25bb3691e919e0f617616ac51a4ff8517a952e29ca133cf0c22b2ce65b1" +checksum = "2e0813f3c35c1cfea65e14c20a953440f7783c088b7ad2d0db162ccdeefcec14" dependencies = [ "arrow-array", "arrow-buffer", @@ -355,9 +349,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" +checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8" dependencies = [ "asn1-rs-derive", "asn1-rs-impl", @@ -377,7 +371,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -389,7 +383,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -423,18 +417,18 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn", + "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", + "syn 3.0.5", ] [[package]] @@ -464,9 +458,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "axum" @@ -560,25 +554,24 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[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 = "blake3" -version = "1.8.5" +version = "1.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" dependencies = [ - "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", ] [[package]] @@ -592,9 +585,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] @@ -607,35 +600,35 @@ checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[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" dependencies = [ "serde", ] @@ -657,9 +650,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" dependencies = [ "find-msvc-tools", "jobserver", @@ -675,18 +668,18 @@ 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.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "rand_core 0.10.1", ] @@ -741,18 +734,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstyle", "clap_lex", @@ -772,9 +765,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "compact_str" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" dependencies = [ "castaway", "cfg-if", @@ -853,18 +846,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "8498c871161e1742aaa9d52551b2d6ebdd4c3d45a3be423e3728f33b955be550" dependencies = [ "cfg-if", ] @@ -907,18 +900,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -926,27 +919,27 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "03e8bd762f7479489c70ed6c768ddca99d7296857de437a68dcb2a94365b3fae" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -966,18 +959,18 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "hybrid-array", ] [[package]] name = "data-encoding" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "debug_unsafe" @@ -985,6 +978,37 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7eed2c4702fa172d1ce21078faa7c5203e69f5394d48cc436d25928394a867a2" +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror", +] + [[package]] name = "der-parser" version = "10.0.0" @@ -994,7 +1018,7 @@ dependencies = [ "asn1-rs", "displaydoc", "nom", - "num-bigint 0.4.6", + "num-bigint 0.4.8", "num-traits", "rusticata-macros", ] @@ -1004,9 +1028,6 @@ name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] [[package]] name = "digest" @@ -1024,9 +1045,9 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid", - "crypto-common 0.2.1", + "crypto-common 0.2.2", ] [[package]] @@ -1040,13 +1061,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[package]] @@ -1057,15 +1078,15 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "env_filter" -version = "1.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" +checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" dependencies = [ "log", "regex", @@ -1073,9 +1094,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" +checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" dependencies = [ "anstream", "anstyle", @@ -1108,11 +1129,10 @@ checksum = "40404c3f5f511ec4da6fe866ddf6a717c309fdbb69fbbad7b0f3edab8f2e835f" [[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", ] @@ -1135,21 +1155,21 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fast-float2" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" +checksum = "c6e8948ce679d00a02a94739ea185595dca7118ed04feb991127e443bd3d761f" [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[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 = "flatbuffers" @@ -1157,18 +1177,19 @@ version = "25.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "rustc_version", ] [[package]] name = "flate2" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ "crc32fast", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -1219,9 +1240,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -1234,9 +1255,9 @@ dependencies = [ [[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", @@ -1244,15 +1265,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", @@ -1261,38 +1282,38 @@ 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-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[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-channel", "futures-core", @@ -1335,40 +1356,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 5.3.0", "wasip2", - "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi 6.0.0", "rand_core 0.10.1", - "wasip2", - "wasip3", "wasm-bindgen", ] [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "h2" -version = "0.4.14" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -1472,9 +1489,9 @@ checksum = "1a9fcbcc408c5526c3ab80d534e5c86e7967c1fb7aa0a8c76abd1edc27deb877" [[package]] name = "http" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -1482,9 +1499,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -1492,9 +1509,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", @@ -1517,24 +1534,24 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "typenum", ] [[package]] name = "hyper" -version = "1.9.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43" dependencies = [ "atomic-waker", "bytes", @@ -1598,7 +1615,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.5", "tokio", "tower-service", "tracing", @@ -1630,9 +1647,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", @@ -1644,9 +1661,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", @@ -1657,9 +1674,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", @@ -1671,16 +1688,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", @@ -1691,15 +1709,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", @@ -1710,12 +1728,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "idna" version = "1.1.0" @@ -1739,9 +1751,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", @@ -1761,9 +1773,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.12.0" +version = "2.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" [[package]] name = "is_terminal_polyfill" @@ -1797,10 +1809,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.24" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" dependencies = [ + "defmt", + "jiff-core", "jiff-static", "log", "portable-atomic", @@ -1808,36 +1822,45 @@ dependencies = [ "serde_core", ] +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + [[package]] name = "jiff-static" -version = "0.2.24" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" dependencies = [ + "jiff-core", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -1847,12 +1870,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lexical-core" version = "1.0.6" @@ -1912,9 +1929,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" @@ -1975,9 +1992,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[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" @@ -1990,9 +2007,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "lru-slab" @@ -2033,9 +2050,9 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -2048,7 +2065,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minarrow" -version = "0.17.0" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a92f9ea49a9b48aa50d62d75824dd14c5802229c6f18f10d6cd880f390d637" dependencies = [ "arrow", "arrow-schema", @@ -2064,9 +2083,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.9" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" dependencies = [ "adler2", "simd-adler32", @@ -2074,9 +2093,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", "wasi", @@ -2113,9 +2132,9 @@ 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", @@ -2142,9 +2161,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-derive" @@ -2154,14 +2173,14 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[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", ] @@ -2182,7 +2201,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] @@ -2197,9 +2216,9 @@ dependencies = [ [[package]] name = "object" -version = "0.37.3" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b" dependencies = [ "memchr", ] @@ -2226,7 +2245,7 @@ dependencies = [ "parking_lot", "percent-encoding", "quick-xml", - "rand 0.10.1", + "rand 0.10.2", "reqwest", "ring", "serde", @@ -2243,9 +2262,9 @@ dependencies = [ [[package]] name = "octets" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8311fa8ab7a57759b4ff1f851a3048d9ef0effaa0130726426b742d26d8a88e7" +checksum = "4d59d30d3ad7f7e1c9a66e51c9cb71ae1c794b28ffe7053fd785defb0d180069" [[package]] name = "oid-registry" @@ -2329,6 +2348,16 @@ dependencies = [ "serde_core", ] +[[package]] +name = "pem" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d354a98a3d1251555de99e8fdd8afda05573c31b82f59063a7b0a29b5527f120" +dependencies = [ + "base64 0.23.1", + "serde_core", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -2370,7 +2399,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2381,9 +2410,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "planus" @@ -2430,7 +2459,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52d3ed4e6b3917427f6d3c43edbd2740babe228bb4ccfa3431eac105844045d" dependencies = [ "getrandom 0.2.17", - "getrandom 0.4.2", + "getrandom 0.4.3", "polars-arrow", "polars-buffer", "polars-compute", @@ -2451,7 +2480,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5ab55460ca2553d1a2bbaf2046998cfbbb685bc18d1e168b4367b63301eb271" dependencies = [ "atoi_simd", - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "bytes", "chrono", @@ -2460,7 +2489,7 @@ dependencies = [ "either", "ethnum", "getrandom 0.2.17", - "getrandom 0.4.2", + "getrandom 0.4.3", "half", "hashbrown 0.17.1", "itoa", @@ -2504,7 +2533,7 @@ dependencies = [ "polars-config", "polars-error", "polars-utils", - "rand 0.10.1", + "rand 0.10.2", "slotmap", "tokio", ] @@ -2540,7 +2569,7 @@ dependencies = [ "polars-buffer", "polars-error", "polars-utils", - "rand 0.10.1", + "rand 0.10.2", "serde", "strength_reduce", "strum_macros", @@ -2564,13 +2593,13 @@ version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac24a25f4c2696089bb9059e4b45338ea74833a79b9552fef066d6f2cfb3aaed" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "boxcar", "bytemuck", "chrono", "chrono-tz", "either", - "getrandom 0.4.2", + "getrandom 0.4.3", "hashbrown 0.17.1", "indexmap", "itoa", @@ -2585,7 +2614,7 @@ dependencies = [ "polars-row", "polars-schema", "polars-utils", - "rand 0.10.1", + "rand 0.10.2", "rand_distr", "rayon", "regex", @@ -2633,7 +2662,7 @@ version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b59262210ac41f3b30f49f46855501206eba27baaa6bd919545703bc706dd617" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "hashbrown 0.17.1", "num-traits", "polars-arrow", @@ -2646,7 +2675,7 @@ dependencies = [ "polars-row", "polars-time", "polars-utils", - "rand 0.10.1", + "rand 0.10.2", "rayon", "recursive", "regex", @@ -2688,7 +2717,7 @@ dependencies = [ "polars-parquet", "polars-schema", "polars-utils", - "rand 0.10.1", + "rand 0.10.2", "rayon", "regex", "reqwest", @@ -2705,7 +2734,7 @@ version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79654a98520b5df9be08ce5004be90a5c8004d0f73d54500c1aa923874ec84f3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "chrono", "either", "memchr", @@ -2761,7 +2790,7 @@ dependencies = [ "polars-error", "polars-io", "polars-utils", - "rand 0.10.1", + "rand 0.10.2", "rand_distr", "thread_local", "tokio", @@ -2844,7 +2873,7 @@ version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "467bd857c46405807e6645942be2de284aa43bc503fc6d20efb16e1adf25b7a6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "blake3", "bytemuck", "bytes", @@ -2885,7 +2914,7 @@ version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71ac05187ac33abcfe9b7c997f0cd2ea9bfe8e04e9018d343e16fb2b64e2f5bb" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "polars-arrow", "polars-buffer", @@ -2914,7 +2943,7 @@ version = "0.55.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae4b287917a1c50b9fab9618c32d3ac8c4b18ef1c61aded55d065c97c921c793" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "hex", "polars-core", "polars-error", @@ -2936,7 +2965,7 @@ checksum = "b173c0c52f53ca930f3b59bc56a5854a650eb9555d67bba9022051714bc0b88f" dependencies = [ "async-channel", "async-trait", - "bitflags 2.11.1", + "bitflags 2.13.1", "bytes", "chrono", "chrono-tz", @@ -3019,7 +3048,7 @@ dependencies = [ "num-traits", "polars-config", "polars-error", - "rand 0.10.1", + "rand 0.10.2", "raw-cpuid", "rayon", "regex", @@ -3037,24 +3066,24 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" dependencies = [ "portable-atomic", ] [[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", ] @@ -3074,30 +3103,20 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[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", ] [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", "prost-derive", @@ -3105,31 +3124,31 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", "itertools 0.14.0", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ "prost", ] [[package]] name = "psm" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" +checksum = "4dcd034599e63b970727f70d79e02d62390a4a84f7c6b827c27c46d5ac3fa622" dependencies = [ "ar_archive_writer", "cc", @@ -3147,9 +3166,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -3158,7 +3177,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.3", + "socket2 0.6.5", "thiserror", "tokio", "tracing", @@ -3167,14 +3186,15 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83" dependencies = [ "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.4", + "rand 0.10.2", + "rand_pcg", "ring", "rustc-hash", "rustls", @@ -3188,23 +3208,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2 0.6.5", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[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", ] @@ -3223,9 +3243,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha", "rand_core 0.9.5", @@ -3233,12 +3253,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", - "getrandom 0.4.2", + "getrandom 0.4.3", "rand_core 0.10.1", ] @@ -3274,7 +3294,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d431c2703ccf129de4d45253c03f49ebb22b97d6ad79ee3ecfc7e3f4862c1d8" dependencies = [ "num-traits", - "rand 0.10.1", + "rand 0.10.2", +] + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", ] [[package]] @@ -3283,7 +3312,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] @@ -3308,11 +3337,11 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.14.8" +version = "0.14.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57f6d249aad744e274e682777a50283a225a32705394ee6d5fcc01efa25e4055" +checksum = "8774e05a7d0de114588e6a28fe7e71694b82614ed569d86d8b389dfbc98b8ad8" dependencies = [ - "pem", + "pem 4.0.0", "ring", "rustls-pki-types", "time", @@ -3337,7 +3366,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3346,34 +3375,34 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "7e440fb4e4b4147295338efb76001ab9e4efc0e5839df2c47fc5ac2381d365c3" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "92ecd8964f8453721699a1ed72037b0db49ce2f5a5138486ee89bed6f67cdf3a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.5", ] [[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", @@ -3383,9 +3412,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", @@ -3394,9 +3423,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" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" @@ -3475,9 +3504,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -3503,7 +3532,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", @@ -3512,9 +3541,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6725596c3f2c3a0aef021139e145d4eafe314a6623e4680ca83852b2c67ab2ba" dependencies = [ "once_cell", "ring", @@ -3526,9 +3555,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -3538,9 +3567,9 @@ 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 = [ "web-time", "zeroize", @@ -3548,9 +3577,9 @@ dependencies = [ [[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", @@ -3559,9 +3588,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" @@ -3599,7 +3628,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "core-foundation", "core-foundation-sys", "libc", @@ -3624,9 +3653,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", @@ -3634,29 +3663,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", + "syn 3.0.5", ] [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -3690,9 +3719,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", "cpufeatures 0.2.17", @@ -3706,15 +3735,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "digest 0.11.3", ] [[package]] name = "shlex" -version = "1.3.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "signal-hook" @@ -3738,19 +3767,18 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd-json" -version = "0.17.0" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4255126f310d2ba20048db6321c81ab376f6a6735608bf11f0785c41f01f64e3" +checksum = "e32d7ab2678282d21e53374fbead7119b7eacbede73685dcaac472870a29a11c" dependencies = [ "ahash", "halfbrown", - "once_cell", "ref-cast", "serde", "serde_json", @@ -3787,15 +3815,15 @@ dependencies = [ [[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" [[package]] name = "snap" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" +checksum = "199905e6153d6405f9728fe44daace35f8f837bbf830bb6e85fbd5828709a886" [[package]] name = "socket2" @@ -3809,9 +3837,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -3836,7 +3864,7 @@ checksum = "a6dd45d8fc1c79299bfbb7190e42ccbbdf6a5f52e4a6ad98d92357ea965bd289" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3847,9 +3875,9 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" +checksum = "707f49d46706bacf8a2b00d51dace3f9de527c13eec3778f570c411f89e69967" dependencies = [ "cc", "cfg-if", @@ -3894,7 +3922,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3905,9 +3933,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" dependencies = [ "proc-macro2", "quote", @@ -3931,7 +3970,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3955,7 +3994,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -3963,22 +4002,22 @@ dependencies = [ [[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", + "syn 3.0.5", ] [[package]] @@ -3992,12 +4031,11 @@ dependencies = [ [[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", @@ -4007,15 +4045,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", @@ -4032,9 +4070,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", @@ -4052,9 +4090,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", ] @@ -4067,35 +4105,35 @@ 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", "mio", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.6.5", "tokio-macros", "windows-sys 0.61.2", ] [[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", + "syn 3.0.5", ] [[package]] name = "tokio-rustls" -version = "0.26.4" +version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" dependencies = [ "rustls", "tokio", @@ -4103,9 +4141,9 @@ dependencies = [ [[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", @@ -4144,13 +4182,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] @@ -4174,7 +4213,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "socket2 0.6.3", + "socket2 0.6.5", "sync_wrapper", "tokio", "tokio-stream", @@ -4216,11 +4255,11 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.10" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytes", "futures-util", "http", @@ -4263,7 +4302,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4292,7 +4331,7 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.4", + "rand 0.9.5", "rustls", "rustls-pki-types", "sha1", @@ -4302,9 +4341,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" @@ -4332,15 +4371,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - -[[package]] -name = "unicode-xid" -version = "0.2.6" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "untrusted" @@ -4386,11 +4419,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "b5772d71c9be8a8a6ac2117d949c5b224c1b72241bb611d9a3012edcf8af7812" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "wasm-bindgen", @@ -4398,9 +4431,9 @@ dependencies = [ [[package]] name = "value-trait" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e80f0c733af0720a501b3905d22e2f97662d8eacfe082a75ed7ffb5ab08cb59" +checksum = "f3f4b4a98dfe54bc9ed3641af7ffcb837240269627dbd5cb047d13daa39736cc" dependencies = [ "float-cmp", "halfbrown", @@ -4410,9 +4443,9 @@ dependencies = [ [[package]] name = "vec64" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b5a35bf381f20a9d41312bd977f43e997ab5bc82deb85b503b3346e6a437b7" +checksum = "1aef6bbef159f21ac387220ebc71141524423f7886afd390bc7b140f12630425" dependencies = [ "libc", ] @@ -4456,27 +4489,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 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -4487,9 +4511,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" dependencies = [ "js-sys", "wasm-bindgen", @@ -4497,9 +4521,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4507,48 +4531,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 3.0.5", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -4562,23 +4564,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.1", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" dependencies = [ "js-sys", "wasm-bindgen", @@ -4600,14 +4590,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.7", + "webpki-roots 1.0.9", ] [[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", ] @@ -4696,7 +4686,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4707,7 +4697,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4750,16 +4740,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", + "windows-targets", ] [[package]] @@ -4777,31 +4758,14 @@ 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_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -4819,211 +4783,75 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.1", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "wtransport" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4aacf790813ee1956751491800537f4e04af7557b7b370501ccbfbc85963e4" +checksum = "b4273ce3157a3262a68665f8d3f20a0ac0c5b8a69ffd67f05ae986832ebec036" dependencies = [ "bytes", - "pem", + "pem 3.0.6", "quinn", "rcgen", "rustls", "rustls-native-certs", "rustls-pki-types", "sha2", - "socket2 0.6.3", + "socket2 0.6.5", "thiserror", "time", "tokio", @@ -5035,9 +4863,9 @@ dependencies = [ [[package]] name = "wtransport-proto" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5867c629e4252f7439d82315923daaf27f4fa442410d51b78ab93ef4c432a11" +checksum = "aad9059572c7dbd6901ccef37f3b7321678cd708dcf58a64b1921dbeab7bfede" dependencies = [ "httlib-huffman", "octets", @@ -5065,9 +4893,9 @@ dependencies = [ [[package]] name = "xxhash-rust" -version = "0.8.15" +version = "0.8.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" +checksum = "aee1b19627c7c60102ab80d3a9cbe18de90bfe03bfa6c3715447681f0e8c8af6" [[package]] name = "yasna" @@ -5081,9 +4909,9 @@ dependencies = [ [[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", @@ -5098,35 +4926,35 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -5139,21 +4967,21 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "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", @@ -5162,9 +4990,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", @@ -5173,20 +5001,26 @@ 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", + "syn 3.0.5", ] +[[package]] +name = "zlib-rs" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b31d188d9d685a4f9c7b46d6e36631b07058d2cfe190267adce54dc230bf12" + [[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" [[package]] name = "zstd" @@ -5199,18 +5033,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.4" +version = "7.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +checksum = "64d80649ab6db9d9f6f9c80a40becd948eda4714a0a5ac8c4d157a32231c7882" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.16+zstd.1.5.7" +version = "2.1.0+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +checksum = "0ef0a8027ec3ee71300ab3bcbcd0393f434aa72b91ca6d635a39941deae8eea0" dependencies = [ "cc", "pkg-config", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 04e07f4..f6ce1da 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -42,7 +42,7 @@ flatbuffers = "25.12.19" libc = { version = "0.2.183", optional = true } futures-sink = "0.3.32" log = "0.4" -minarrow = { version = "0.17.0", features = ["chunked", "views", "select", "size"], default-features = false } +minarrow = { version = "0.18.0", features = ["chunked", "views", "select", "size"], default-features = false } vec64 = { version = "0.5.0" } snap = { version = "1.0", optional = true } tokio-tungstenite = { version = "0.28", optional = true } @@ -150,6 +150,7 @@ extended_categorical = ["default_categorical_8", "minarrow/extended_categorical" large_string = ["minarrow/large_string"] datetime = ["minarrow/datetime"] extended_numeric_types = ["minarrow/extended_numeric_types"] +decimal = ["minarrow/decimal"] lbuffer = ["minarrow/lbuffer"] # Schema-level Table metadata as key-value pairs table_metadata = ["minarrow/table_metadata"] diff --git a/rust/src/arrow/file.rs b/rust/src/arrow/file.rs index a3e8713..194890c 100644 --- a/rust/src/arrow/file.rs +++ b/rust/src/arrow/file.rs @@ -632,13 +632,14 @@ pub const ENUM_MIN_TYPE: u8 = 0; pub const ENUM_MAX_TYPE: u8 = 23; #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[allow(non_camel_case_types)] -pub const ENUM_VALUES_TYPE: [Type; 13] = [ +pub const ENUM_VALUES_TYPE: [Type; 14] = [ Type::NONE, Type::Null, Type::Int, Type::FloatingPoint, Type::Utf8, Type::Bool, + Type::Decimal, Type::Date, Type::Time, Type::Timestamp, @@ -666,6 +667,7 @@ impl Type { pub const FloatingPoint: Self = Self(3); pub const Utf8: Self = Self(5); pub const Bool: Self = Self(6); + pub const Decimal: Self = Self(7); pub const Date: Self = Self(8); pub const Time: Self = Self(9); pub const Timestamp: Self = Self(10); @@ -683,6 +685,7 @@ impl Type { Self::FloatingPoint, Self::Utf8, Self::Bool, + Self::Decimal, Self::Date, Self::Time, Self::Timestamp, @@ -700,6 +703,7 @@ impl Type { Self::FloatingPoint => Some("FloatingPoint"), Self::Utf8 => Some("Utf8"), Self::Bool => Some("Bool"), + Self::Decimal => Some("Decimal"), Self::Date => Some("Date"), Self::Time => Some("Time"), Self::Timestamp => Some("Timestamp"), @@ -1847,6 +1851,127 @@ impl core::fmt::Debug for Bool<'_> { ds.finish() } } +pub enum DecimalOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct Decimal<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for Decimal<'a> { + type Inner = Decimal<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> Decimal<'a> { + pub const VT_PRECISION: flatbuffers::VOffsetT = 4; + pub const VT_SCALE: flatbuffers::VOffsetT = 6; + pub const VT_BITWIDTH: flatbuffers::VOffsetT = 8; + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + Decimal { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>, + args: &'args DecimalArgs + ) -> flatbuffers::WIPOffset> { + let mut builder = DecimalBuilder::new(_fbb); + builder.add_bitWidth(args.bitWidth); + builder.add_scale(args.scale); + builder.add_precision(args.precision); + builder.finish() + } + + #[inline] + pub fn precision(&self) -> i32 { + unsafe { self._tab.get::(Decimal::VT_PRECISION, Some(0)).unwrap()} + } + #[inline] + pub fn scale(&self) -> i32 { + unsafe { self._tab.get::(Decimal::VT_SCALE, Some(0)).unwrap()} + } + #[inline] + pub fn bitWidth(&self) -> i32 { + unsafe { self._tab.get::(Decimal::VT_BITWIDTH, Some(128)).unwrap()} + } +} + +impl flatbuffers::Verifiable for Decimal<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::("precision", Self::VT_PRECISION, false)? + .visit_field::("scale", Self::VT_SCALE, false)? + .visit_field::("bitWidth", Self::VT_BITWIDTH, false)? + .finish(); + Ok(()) + } +} +pub struct DecimalArgs { + pub precision: i32, + pub scale: i32, + pub bitWidth: i32, +} +impl<'a> Default for DecimalArgs { + #[inline] + fn default() -> Self { + DecimalArgs { + precision: 0, + scale: 0, + bitWidth: 128, + } + } +} + +pub struct DecimalBuilder<'a: 'b, 'b> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b> DecimalBuilder<'a, 'b> { + #[inline] + pub fn add_precision(&mut self, precision: i32) { + self.fbb_.push_slot::(Decimal::VT_PRECISION, precision, 0); + } + #[inline] + pub fn add_scale(&mut self, scale: i32) { + self.fbb_.push_slot::(Decimal::VT_SCALE, scale, 0); + } + #[inline] + pub fn add_bitWidth(&mut self, bitWidth: i32) { + self.fbb_.push_slot::(Decimal::VT_BITWIDTH, bitWidth, 128); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> DecimalBuilder<'a, 'b> { + let start = _fbb.start_table(); + DecimalBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for Decimal<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("Decimal"); + ds.field("precision", &self.precision()); + ds.field("scale", &self.scale()); + ds.field("bitWidth", &self.bitWidth()); + ds.finish() + } +} pub enum DateOffset {} #[derive(Copy, Clone, PartialEq)] @@ -2957,6 +3082,21 @@ impl<'a> Field<'a> { } } + #[inline] + #[allow(non_snake_case)] + pub fn type__as_decimal(&self) -> Option> { + if self.type_type() == Type::Decimal { + self.type_().map(|t| { + // Safety: + // Created from a valid Table for this object + // Which contains a valid union in this slot + unsafe { Decimal::init_from_table(t) } + }) + } else { + None + } + } + #[inline] #[allow(non_snake_case)] pub fn type__as_date(&self) -> Option> { @@ -3080,6 +3220,7 @@ impl flatbuffers::Verifiable for Field<'_> { Type::FloatingPoint => v.verify_union_variant::>("Type::FloatingPoint", pos), Type::Utf8 => v.verify_union_variant::>("Type::Utf8", pos), Type::Bool => v.verify_union_variant::>("Type::Bool", pos), + Type::Decimal => v.verify_union_variant::>("Type::Decimal", pos), Type::Date => v.verify_union_variant::>("Type::Date", pos), Type::Time => v.verify_union_variant::>("Type::Time", pos), Type::Timestamp => v.verify_union_variant::>("Type::Timestamp", pos), @@ -3211,6 +3352,13 @@ impl core::fmt::Debug for Field<'_> { ds.field("type_", &"InvalidFlatbuffer: Union discriminant does not match value.") } }, + Type::Decimal => { + if let Some(x) = self.type__as_decimal() { + ds.field("type_", &x) + } else { + ds.field("type_", &"InvalidFlatbuffer: Union discriminant does not match value.") + } + }, Type::Date => { if let Some(x) = self.type__as_date() { ds.field("type_", &x) diff --git a/rust/src/arrow/message.rs b/rust/src/arrow/message.rs index 337dd30..b7c1272 100644 --- a/rust/src/arrow/message.rs +++ b/rust/src/arrow/message.rs @@ -632,13 +632,14 @@ pub const ENUM_MIN_TYPE: u8 = 0; pub const ENUM_MAX_TYPE: u8 = 23; #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[allow(non_camel_case_types)] -pub const ENUM_VALUES_TYPE: [Type; 13] = [ +pub const ENUM_VALUES_TYPE: [Type; 14] = [ Type::NONE, Type::Null, Type::Int, Type::FloatingPoint, Type::Utf8, Type::Bool, + Type::Decimal, Type::Date, Type::Time, Type::Timestamp, @@ -666,6 +667,7 @@ impl Type { pub const FloatingPoint: Self = Self(3); pub const Utf8: Self = Self(5); pub const Bool: Self = Self(6); + pub const Decimal: Self = Self(7); pub const Date: Self = Self(8); pub const Time: Self = Self(9); pub const Timestamp: Self = Self(10); @@ -683,6 +685,7 @@ impl Type { Self::FloatingPoint, Self::Utf8, Self::Bool, + Self::Decimal, Self::Date, Self::Time, Self::Timestamp, @@ -700,6 +703,7 @@ impl Type { Self::FloatingPoint => Some("FloatingPoint"), Self::Utf8 => Some("Utf8"), Self::Bool => Some("Bool"), + Self::Decimal => Some("Decimal"), Self::Date => Some("Date"), Self::Time => Some("Time"), Self::Timestamp => Some("Timestamp"), @@ -2107,6 +2111,127 @@ impl core::fmt::Debug for Bool<'_> { ds.finish() } } +pub enum DecimalOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct Decimal<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for Decimal<'a> { + type Inner = Decimal<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> Decimal<'a> { + pub const VT_PRECISION: flatbuffers::VOffsetT = 4; + pub const VT_SCALE: flatbuffers::VOffsetT = 6; + pub const VT_BITWIDTH: flatbuffers::VOffsetT = 8; + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + Decimal { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>, + args: &'args DecimalArgs + ) -> flatbuffers::WIPOffset> { + let mut builder = DecimalBuilder::new(_fbb); + builder.add_bitWidth(args.bitWidth); + builder.add_scale(args.scale); + builder.add_precision(args.precision); + builder.finish() + } + + #[inline] + pub fn precision(&self) -> i32 { + unsafe { self._tab.get::(Decimal::VT_PRECISION, Some(0)).unwrap()} + } + #[inline] + pub fn scale(&self) -> i32 { + unsafe { self._tab.get::(Decimal::VT_SCALE, Some(0)).unwrap()} + } + #[inline] + pub fn bitWidth(&self) -> i32 { + unsafe { self._tab.get::(Decimal::VT_BITWIDTH, Some(128)).unwrap()} + } +} + +impl flatbuffers::Verifiable for Decimal<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::("precision", Self::VT_PRECISION, false)? + .visit_field::("scale", Self::VT_SCALE, false)? + .visit_field::("bitWidth", Self::VT_BITWIDTH, false)? + .finish(); + Ok(()) + } +} +pub struct DecimalArgs { + pub precision: i32, + pub scale: i32, + pub bitWidth: i32, +} +impl<'a> Default for DecimalArgs { + #[inline] + fn default() -> Self { + DecimalArgs { + precision: 0, + scale: 0, + bitWidth: 128, + } + } +} + +pub struct DecimalBuilder<'a: 'b, 'b> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b> DecimalBuilder<'a, 'b> { + #[inline] + pub fn add_precision(&mut self, precision: i32) { + self.fbb_.push_slot::(Decimal::VT_PRECISION, precision, 0); + } + #[inline] + pub fn add_scale(&mut self, scale: i32) { + self.fbb_.push_slot::(Decimal::VT_SCALE, scale, 0); + } + #[inline] + pub fn add_bitWidth(&mut self, bitWidth: i32) { + self.fbb_.push_slot::(Decimal::VT_BITWIDTH, bitWidth, 128); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> DecimalBuilder<'a, 'b> { + let start = _fbb.start_table(); + DecimalBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for Decimal<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("Decimal"); + ds.field("precision", &self.precision()); + ds.field("scale", &self.scale()); + ds.field("bitWidth", &self.bitWidth()); + ds.finish() + } +} pub enum DateOffset {} #[derive(Copy, Clone, PartialEq)] @@ -3217,6 +3342,21 @@ impl<'a> Field<'a> { } } + #[inline] + #[allow(non_snake_case)] + pub fn type__as_decimal(&self) -> Option> { + if self.type_type() == Type::Decimal { + self.type_().map(|t| { + // Safety: + // Created from a valid Table for this object + // Which contains a valid union in this slot + unsafe { Decimal::init_from_table(t) } + }) + } else { + None + } + } + #[inline] #[allow(non_snake_case)] pub fn type__as_date(&self) -> Option> { @@ -3340,6 +3480,7 @@ impl flatbuffers::Verifiable for Field<'_> { Type::FloatingPoint => v.verify_union_variant::>("Type::FloatingPoint", pos), Type::Utf8 => v.verify_union_variant::>("Type::Utf8", pos), Type::Bool => v.verify_union_variant::>("Type::Bool", pos), + Type::Decimal => v.verify_union_variant::>("Type::Decimal", pos), Type::Date => v.verify_union_variant::>("Type::Date", pos), Type::Time => v.verify_union_variant::>("Type::Time", pos), Type::Timestamp => v.verify_union_variant::>("Type::Timestamp", pos), @@ -3471,6 +3612,13 @@ impl core::fmt::Debug for Field<'_> { ds.field("type_", &"InvalidFlatbuffer: Union discriminant does not match value.") } }, + Type::Decimal => { + if let Some(x) = self.type__as_decimal() { + ds.field("type_", &x) + } else { + ds.field("type_", &"InvalidFlatbuffer: Union discriminant does not match value.") + } + }, Type::Date => { if let Some(x) = self.type__as_date() { ds.field("type_", &x) diff --git a/rust/src/models/decoders/ipc/parser.rs b/rust/src/models/decoders/ipc/parser.rs index 8868304..b3f7d88 100644 --- a/rust/src/models/decoders/ipc/parser.rs +++ b/rust/src/models/decoders/ipc/parser.rs @@ -472,6 +472,52 @@ impl RecordBatchParser { } } + #[cfg(feature = "decimal")] + ArrowType::Decimal32(p, s) => { + let (slice, _) = Self::extract_buffer_slice( + &fbuf_meta, + &mut buffer_idx, + arrow_buf, + &field.name, + corrections, + )?; + let data = + unsafe { Self::buffer_from_slice::(slice, field_len, &arc_opt) }; + Array::NumericArray(NumericArray::Decimal32(Arc::new( + DecimalArray { data, null_mask, precision: *p, scale: *s }, + ))) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal64(p, s) => { + let (slice, _) = Self::extract_buffer_slice( + &fbuf_meta, + &mut buffer_idx, + arrow_buf, + &field.name, + corrections, + )?; + let data = + unsafe { Self::buffer_from_slice::(slice, field_len, &arc_opt) }; + Array::NumericArray(NumericArray::Decimal64(Arc::new( + DecimalArray { data, null_mask, precision: *p, scale: *s }, + ))) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal128(p, s) => { + let (slice, _) = Self::extract_buffer_slice( + &fbuf_meta, + &mut buffer_idx, + arrow_buf, + &field.name, + corrections, + )?; + let data = + unsafe { Self::buffer_from_slice::(slice, field_len, &arc_opt) }; + Array::NumericArray(NumericArray::Decimal128(Arc::new( + DecimalArray { data, null_mask, precision: *p, scale: *s }, + ))) + } + other => { return Err(io::Error::new( io::ErrorKind::InvalidData, @@ -1135,6 +1181,61 @@ pub fn decode_record_batch( )? } + #[cfg(feature = "decimal")] + ArrowType::Decimal32(p, s) => { + let (off, len) = consume_buffer( + &buffers, + &mut buffer_idx, + body_start, + body_len, + &field.name, + corrections, + )?; + let data = shared.slice(off..off + len); + Array::NumericArray(NumericArray::Decimal32(Arc::new(DecimalArray { + data: minarrow::Buffer::from_shared(data), + null_mask, + precision: *p, + scale: *s, + }))) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal64(p, s) => { + let (off, len) = consume_buffer( + &buffers, + &mut buffer_idx, + body_start, + body_len, + &field.name, + corrections, + )?; + let data = shared.slice(off..off + len); + Array::NumericArray(NumericArray::Decimal64(Arc::new(DecimalArray { + data: minarrow::Buffer::from_shared(data), + null_mask, + precision: *p, + scale: *s, + }))) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal128(p, s) => { + let (off, len) = consume_buffer( + &buffers, + &mut buffer_idx, + body_start, + body_len, + &field.name, + corrections, + )?; + let data = shared.slice(off..off + len); + Array::NumericArray(NumericArray::Decimal128(Arc::new(DecimalArray { + data: minarrow::Buffer::from_shared(data), + null_mask, + precision: *p, + scale: *s, + }))) + } + other => { return Err(io::Error::new( io::ErrorKind::InvalidData, @@ -1762,6 +1863,23 @@ fn extract_base_type(fb_field: &fb::Field) -> io::Result { Ok(ArrowType::Duration64(convert_time_unit_fb(d.unit())?)) } fb::Type::Bool => Ok(ArrowType::Boolean), + #[cfg(feature = "decimal")] + fb::Type::Decimal => { + let d = fb_field.type__as_decimal().ok_or_else(|| { + io::Error::new(io::ErrorKind::InvalidData, "missing Decimal type") + })?; + let precision = d.precision() as u8; + let scale = d.scale() as i8; + match d.bitWidth() { + 32 => Ok(ArrowType::Decimal32(precision, scale)), + 64 => Ok(ArrowType::Decimal64(precision, scale)), + 128 => Ok(ArrowType::Decimal128(precision, scale)), + w => Err(io::Error::new( + io::ErrorKind::InvalidData, + format!("unsupported Decimal bit width {w}"), + )), + } + } other => { if let Some(dict) = fb_field.dictionary() { let idx_ty = extract_categorical_index_type(dict.indexType().as_ref())?; @@ -1963,6 +2081,25 @@ pub fn convert_fb_field_to_arrow( })?; ArrowType::Duration64(convert_time_unit_fbf(d.unit())?) } + #[cfg(feature = "decimal")] + fbf::Type::Decimal => { + let d = fbf_field.type__as_decimal().ok_or_else(|| { + io::Error::new(io::ErrorKind::InvalidData, "missing Decimal type") + })?; + let precision = d.precision() as u8; + let scale = d.scale() as i8; + match d.bitWidth() { + 32 => ArrowType::Decimal32(precision, scale), + 64 => ArrowType::Decimal64(precision, scale), + 128 => ArrowType::Decimal128(precision, scale), + w => { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + format!("unsupported Decimal bit width {w}"), + )); + } + } + } other => { return Err(io::Error::new( io::ErrorKind::InvalidData, diff --git a/rust/src/models/encoders/csv.rs b/rust/src/models/encoders/csv.rs index 784f27c..f4635c7 100644 --- a/rust/src/models/encoders/csv.rs +++ b/rust/src/models/encoders/csv.rs @@ -106,6 +106,43 @@ fn append_str_cell( append_csv_string(out, &data[start..end], delimiter, quote); } +/// Format one decimal storage integer with its scale into the CSV output +/// buffer, placing the decimal point at the position determined by scale. +#[cfg(feature = "decimal")] +fn write_decimal_cell(out: &mut Vec, raw: i128, scale: i8) { + use std::fmt::Write as _; + let mut buf = String::with_capacity(48); + if scale == 0 { + let _ = write!(buf, "{}", raw); + } else if scale < 0 { + let _ = write!(buf, "{}", raw); + for _ in 0..(-scale) { + buf.push('0'); + } + } else { + let s = scale as usize; + let raw_str = format!("{}", raw); + let (is_negative, digits) = if raw_str.starts_with('-') { + (true, &raw_str[1..]) + } else { + (false, raw_str.as_str()) + }; + let padded = if digits.len() <= s { + format!("{:0>width$}", digits, width = s + 1) + } else { + digits.to_string() + }; + let (integer_part, frac_part) = padded.split_at(padded.len() - s); + if is_negative { + buf.push('-'); + } + buf.push_str(integer_part); + buf.push('.'); + buf.push_str(frac_part); + } + out.extend_from_slice(buf.as_bytes()); +} + /// Average bytes per cell heuristic per column type; used to size the /// scratch buffer up front so the encode loop hits no Vec growth. fn estimate_cell_width(arr: &Array, n_rows: usize) -> usize { @@ -290,6 +327,18 @@ pub fn encode_table_csv( NumericArray::Float64(arr) => { out.extend_from_slice(ryu_buf.format(arr.data.as_ref()[row]).as_bytes()); } + #[cfg(feature = "decimal")] + NumericArray::Decimal32(arr) => { + write_decimal_cell(&mut out, arr.data.as_ref()[row] as i128, arr.scale); + } + #[cfg(feature = "decimal")] + NumericArray::Decimal64(arr) => { + write_decimal_cell(&mut out, arr.data.as_ref()[row] as i128, arr.scale); + } + #[cfg(feature = "decimal")] + NumericArray::Decimal128(arr) => { + write_decimal_cell(&mut out, arr.data.as_ref()[row], arr.scale); + } _ => { out.extend_from_slice(b""); } diff --git a/rust/src/models/encoders/ipc/record_batch.rs b/rust/src/models/encoders/ipc/record_batch.rs index d2a262e..7d46f8a 100644 --- a/rust/src/models/encoders/ipc/record_batch.rs +++ b/rust/src/models/encoders/ipc/record_batch.rs @@ -224,6 +224,18 @@ pub(crate) fn compute_body_layout<'a, B: StreamBuffer>( NumericArray::UInt16(arr) => { (as_bytes(&arr.data.as_slice()[offset..offset + len]), arr.null_mask.as_ref()) } + #[cfg(feature = "decimal")] + NumericArray::Decimal32(arr) => { + (as_bytes(&arr.data.as_slice()[offset..offset + len]), arr.null_mask.as_ref()) + } + #[cfg(feature = "decimal")] + NumericArray::Decimal64(arr) => { + (as_bytes(&arr.data.as_slice()[offset..offset + len]), arr.null_mask.as_ref()) + } + #[cfg(feature = "decimal")] + NumericArray::Decimal128(arr) => { + (as_bytes(&arr.data.as_slice()[offset..offset + len]), arr.null_mask.as_ref()) + } _ => { return Err(io::Error::new( io::ErrorKind::InvalidInput, diff --git a/rust/src/models/encoders/ipc/schema.rs b/rust/src/models/encoders/ipc/schema.rs index 84bfe3d..3b6c737 100644 --- a/rust/src/models/encoders/ipc/schema.rs +++ b/rust/src/models/encoders/ipc/schema.rs @@ -317,6 +317,42 @@ fn build_flatbuf_field<'fbb>( let duration = fbm::Duration::create(fbb, &fbm::DurationArgs { unit }); (fbm::Type::Duration, Some(duration.as_union_value()), None) } + #[cfg(feature = "decimal")] + ArrowType::Decimal32(p, s) => { + let dec = fbm::Decimal::create( + fbb, + &fbm::DecimalArgs { + precision: *p as i32, + scale: *s as i32, + bitWidth: 32, + }, + ); + (fbm::Type::Decimal, Some(dec.as_union_value()), None) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal64(p, s) => { + let dec = fbm::Decimal::create( + fbb, + &fbm::DecimalArgs { + precision: *p as i32, + scale: *s as i32, + bitWidth: 64, + }, + ); + (fbm::Type::Decimal, Some(dec.as_union_value()), None) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal128(p, s) => { + let dec = fbm::Decimal::create( + fbb, + &fbm::DecimalArgs { + precision: *p as i32, + scale: *s as i32, + bitWidth: 128, + }, + ); + (fbm::Type::Decimal, Some(dec.as_union_value()), None) + } ArrowType::Dictionary(idx_ty) => { // Build index type for dictionary let idx_width = match idx_ty { @@ -810,6 +846,42 @@ fn build_flatbuf_field_file<'fbb>( let duration = fbf::Duration::create(fbb, &fbf::DurationArgs { unit }); (fbf::Type::Duration, Some(duration.as_union_value()), None) } + #[cfg(feature = "decimal")] + ArrowType::Decimal32(p, s) => { + let dec = fbf::Decimal::create( + fbb, + &fbf::DecimalArgs { + precision: *p as i32, + scale: *s as i32, + bitWidth: 32, + }, + ); + (fbf::Type::Decimal, Some(dec.as_union_value()), None) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal64(p, s) => { + let dec = fbf::Decimal::create( + fbb, + &fbf::DecimalArgs { + precision: *p as i32, + scale: *s as i32, + bitWidth: 64, + }, + ); + (fbf::Type::Decimal, Some(dec.as_union_value()), None) + } + #[cfg(feature = "decimal")] + ArrowType::Decimal128(p, s) => { + let dec = fbf::Decimal::create( + fbb, + &fbf::DecimalArgs { + precision: *p as i32, + scale: *s as i32, + bitWidth: 128, + }, + ); + (fbf::Type::Decimal, Some(dec.as_union_value()), None) + } ArrowType::Dictionary(idx_ty) => { let idx_width = match idx_ty { #[cfg(any( diff --git a/rust/src/models/readers/ipc/window.rs b/rust/src/models/readers/ipc/window.rs index 4a09213..1c85e82 100644 --- a/rust/src/models/readers/ipc/window.rs +++ b/rust/src/models/readers/ipc/window.rs @@ -18,6 +18,8 @@ use minarrow::{ Array, Bitmask, BooleanArray, Buffer, CategoricalArray, FieldArray, FloatArray, Integer, IntegerArray, NumericArray, StringArray, Table, TextArray, Vec64, }; +#[cfg(feature = "decimal")] +use minarrow::DecimalArray; #[cfg(feature = "datetime")] use minarrow::{DatetimeArray, TemporalArray}; @@ -91,6 +93,33 @@ fn window_array(array: &Array, offset: usize, len: usize) -> io::Result { NumericArray::Int16(arr) => win_int!(Int16, arr), #[cfg(feature = "extended_numeric_types")] NumericArray::UInt16(arr) => win_int!(UInt16, arr), + #[cfg(feature = "decimal")] + NumericArray::Decimal32(arr) => { + NumericArray::Decimal32(Arc::new(DecimalArray { + data: window_buffer(&arr.data, offset, len), + null_mask: window_mask(arr.null_mask.as_ref(), offset, len), + precision: arr.precision, + scale: arr.scale, + })) + } + #[cfg(feature = "decimal")] + NumericArray::Decimal64(arr) => { + NumericArray::Decimal64(Arc::new(DecimalArray { + data: window_buffer(&arr.data, offset, len), + null_mask: window_mask(arr.null_mask.as_ref(), offset, len), + precision: arr.precision, + scale: arr.scale, + })) + } + #[cfg(feature = "decimal")] + NumericArray::Decimal128(arr) => { + NumericArray::Decimal128(Arc::new(DecimalArray { + data: window_buffer(&arr.data, offset, len), + null_mask: window_mask(arr.null_mask.as_ref(), offset, len), + precision: arr.precision, + scale: arr.scale, + })) + } NumericArray::Null => NumericArray::Null, }) } diff --git a/rust/src/models/types/parquet.rs b/rust/src/models/types/parquet.rs index 89f6a0d..424aa6a 100644 --- a/rust/src/models/types/parquet.rs +++ b/rust/src/models/types/parquet.rs @@ -91,6 +91,14 @@ pub(crate) enum ParquetLogicalType { /// 64-bit time - nanoseconds since midnight #[cfg(feature = "datetime")] TimeNanos, + /// Fixed-point decimal with precision and scale. + #[cfg(feature = "decimal")] + Decimal { + /// Total number of significant digits. + precision: u8, + /// Digits after the decimal point. + scale: i8, + }, /// Integer type with specified bit width and sign. IntType { /// Number of bits (8, 16, 32, 64). @@ -118,6 +126,9 @@ impl ParquetLogicalType { Some(2) => None, // MAP_KEY_VALUE (unsupported) Some(3) => None, // LIST (unsupported) Some(4) => None, // ENUM (unsupported) + #[cfg(feature = "decimal")] + Some(5) => None, // DECIMAL - precision/scale come from the schema element, not the converted type + #[cfg(not(feature = "decimal"))] Some(5) => None, // DECIMAL (unsupported) #[cfg(feature = "datetime")] Some(6) => Some(ParquetLogicalType::Date32), @@ -295,6 +306,21 @@ pub(crate) fn arrow_type_to_parquet( ArrowType::Dictionary(CategoricalIndexType::UInt8) => { Ok((ParquetPhysicalType::ByteArray, ParquetLogicalType::Utf8)) } + #[cfg(feature = "decimal")] + ArrowType::Decimal32(p, s) => Ok(( + ParquetPhysicalType::Int32, + ParquetLogicalType::Decimal { precision: *p, scale: *s }, + )), + #[cfg(feature = "decimal")] + ArrowType::Decimal64(p, s) => Ok(( + ParquetPhysicalType::Int64, + ParquetLogicalType::Decimal { precision: *p, scale: *s }, + )), + #[cfg(feature = "decimal")] + ArrowType::Decimal128(p, s) => Ok(( + ParquetPhysicalType::Int64, + ParquetLogicalType::Decimal { precision: *p, scale: *s }, + )), ArrowType::Float32 => Ok((ParquetPhysicalType::Float, ParquetLogicalType::NoneType)), ArrowType::Float64 => Ok((ParquetPhysicalType::Double, ParquetLogicalType::NoneType)), ArrowType::String => Ok((ParquetPhysicalType::ByteArray, ParquetLogicalType::Utf8)), @@ -512,3 +538,41 @@ pub(crate) fn parquet_to_arrow_type( ))), } } + +#[cfg(test)] +mod tests { + use super::*; + + #[cfg(feature = "decimal")] + #[test] + fn decimal32_maps_to_int32_physical() { + let (phys, logical) = arrow_type_to_parquet(&ArrowType::Decimal32(7, 2)).unwrap(); + assert_eq!(phys, ParquetPhysicalType::Int32); + assert_eq!( + logical, + ParquetLogicalType::Decimal { precision: 7, scale: 2 } + ); + } + + #[cfg(feature = "decimal")] + #[test] + fn decimal64_maps_to_int64_physical() { + let (phys, logical) = arrow_type_to_parquet(&ArrowType::Decimal64(18, 4)).unwrap(); + assert_eq!(phys, ParquetPhysicalType::Int64); + assert_eq!( + logical, + ParquetLogicalType::Decimal { precision: 18, scale: 4 } + ); + } + + #[cfg(feature = "decimal")] + #[test] + fn decimal128_maps_to_int64_physical() { + let (phys, logical) = arrow_type_to_parquet(&ArrowType::Decimal128(38, 6)).unwrap(); + assert_eq!(phys, ParquetPhysicalType::Int64); + assert_eq!( + logical, + ParquetLogicalType::Decimal { precision: 38, scale: 6 } + ); + } +} diff --git a/rust/tests/decimal_roundtrip.rs b/rust/tests/decimal_roundtrip.rs new file mode 100644 index 0000000..f00078c --- /dev/null +++ b/rust/tests/decimal_roundtrip.rs @@ -0,0 +1,475 @@ +// Copyright Peter G. Bower 2025-2026. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +//! Round-trip tests for decimal columns through IPC write, full read, +//! windowed read, and parquet type mapping. +//! +//! Each test constructs a table with one column per decimal width +//! (Decimal32, Decimal64, Decimal128) including null entries, writes it +//! through the IPC file protocol, reads it back, and asserts that the +//! storage values, null mask, precision and scale are preserved. + +#![cfg(feature = "decimal")] + +use std::sync::Arc; + +use lightstream::enums::IPCMessageProtocol; +use lightstream::models::readers::ipc::file_table::FileTableReader; +use lightstream::models::writers::ipc::sync_table::write_tables_to_file_sync; +use minarrow::{ + Array, ArrowType, Bitmask, DecimalArray, Field, FieldArray, NumericArray, Table, +}; +use tempfile::NamedTempFile; + +// --------------------------------------------------------------------------- +// Fixture builders +// --------------------------------------------------------------------------- + +/// Decimal32 column: storage values [100, -250, 0, 9999], second entry null. +/// Precision 7, scale 2 (values represent 1.00, null, 0.00, 99.99). +fn decimal32_col() -> FieldArray { + let mask = Bitmask::from_bools(&[true, false, true, true]); + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&[100i32, -250, 0, 9999])), + null_mask: Some(mask), + precision: 7, + scale: 2, + }; + FieldArray::new( + Field::new("dec32", ArrowType::Decimal32(7, 2), true, None), + Array::NumericArray(NumericArray::Decimal32(Arc::new(arr))), + ) +} + +/// Decimal64 column: storage values [123456789, -987654321, 0, 42], +/// third entry null. Precision 18, scale 4. +fn decimal64_col() -> FieldArray { + let mask = Bitmask::from_bools(&[true, true, false, true]); + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&[ + 123456789i64, + -987654321, + 0, + 42, + ])), + null_mask: Some(mask), + precision: 18, + scale: 4, + }; + FieldArray::new( + Field::new("dec64", ArrowType::Decimal64(18, 4), true, None), + Array::NumericArray(NumericArray::Decimal64(Arc::new(arr))), + ) +} + +/// Decimal128 column: storage values [10_000_000_000, -1, 0, 77777], +/// first entry null. Precision 38, scale 6. +fn decimal128_col() -> FieldArray { + let mask = Bitmask::from_bools(&[false, true, true, true]); + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&[ + 10_000_000_000i128, + -1, + 0, + 77777, + ])), + null_mask: Some(mask), + precision: 38, + scale: 6, + }; + FieldArray::new( + Field::new("dec128", ArrowType::Decimal128(38, 6), true, None), + Array::NumericArray(NumericArray::Decimal128(Arc::new(arr))), + ) +} + +/// Build a 4-row table holding one column of each decimal width. +fn decimal_table() -> Table { + Table { + cols: vec![decimal32_col(), decimal64_col(), decimal128_col()], + n_rows: 4, + name: "decimal_test".into(), + ..Default::default() + } +} + +fn schema_for(table: &Table) -> Vec { + table + .cols + .iter() + .map(|c| (*c.field).clone()) + .collect() +} + +// --------------------------------------------------------------------------- +// IPC file round-trip +// --------------------------------------------------------------------------- + +#[test] +fn decimal_ipc_file_roundtrip() { + let table = decimal_table(); + let schema = schema_for(&table); + + let file = NamedTempFile::new().unwrap(); + let path = file.path().to_path_buf(); + write_tables_to_file_sync(&path, std::slice::from_ref(&table), schema).unwrap(); + + let reader = FileTableReader::open(&path).unwrap(); + assert_eq!(reader.num_batches(), 1); + let mut got = reader.read_batch(0).unwrap(); + got.name = table.name.clone(); + + assert_eq!(got.n_rows, 4); + assert_eq!(got.cols.len(), 3); + + // Decimal32 + match &got.cols[0].array { + Array::NumericArray(NumericArray::Decimal32(arr)) => { + assert_eq!(arr.data.as_slice(), &[100i32, -250, 0, 9999]); + assert_eq!(arr.precision, 7); + assert_eq!(arr.scale, 2); + let mask = arr.null_mask.as_ref().unwrap(); + assert!(mask.get(0)); + assert!(!mask.get(1)); + assert!(mask.get(2)); + assert!(mask.get(3)); + } + other => panic!("Expected Decimal32, got {:?}", other), + } + assert_eq!(got.cols[0].field.dtype, ArrowType::Decimal32(7, 2)); + + // Decimal64 + match &got.cols[1].array { + Array::NumericArray(NumericArray::Decimal64(arr)) => { + assert_eq!( + arr.data.as_slice(), + &[123456789i64, -987654321, 0, 42] + ); + assert_eq!(arr.precision, 18); + assert_eq!(arr.scale, 4); + let mask = arr.null_mask.as_ref().unwrap(); + assert!(mask.get(0)); + assert!(mask.get(1)); + assert!(!mask.get(2)); + assert!(mask.get(3)); + } + other => panic!("Expected Decimal64, got {:?}", other), + } + assert_eq!(got.cols[1].field.dtype, ArrowType::Decimal64(18, 4)); + + // Decimal128 + match &got.cols[2].array { + Array::NumericArray(NumericArray::Decimal128(arr)) => { + assert_eq!( + arr.data.as_slice(), + &[10_000_000_000i128, -1, 0, 77777] + ); + assert_eq!(arr.precision, 38); + assert_eq!(arr.scale, 6); + let mask = arr.null_mask.as_ref().unwrap(); + assert!(!mask.get(0)); + assert!(mask.get(1)); + assert!(mask.get(2)); + assert!(mask.get(3)); + } + other => panic!("Expected Decimal128, got {:?}", other), + } + assert_eq!(got.cols[2].field.dtype, ArrowType::Decimal128(38, 6)); +} + +// --------------------------------------------------------------------------- +// IPC stream round-trip (in-memory) +// --------------------------------------------------------------------------- + +#[test] +fn decimal_ipc_stream_roundtrip() { + use lightstream::models::readers::ipc::table::TableReader; + use lightstream::models::writers::ipc::table_stream::TableStreamWriter; + use minarrow::Vec64; + + let table = decimal_table(); + let schema = schema_for(&table); + + let mut writer = + TableStreamWriter::>::new(schema.clone(), IPCMessageProtocol::Stream, None); + writer.write(table.clone()).unwrap(); + writer.finish().unwrap(); + + let mut all_bytes = Vec::new(); + while let Some(frame) = writer.next_frame() { + all_bytes.extend_from_slice(frame.unwrap().as_ref()); + } + + let rt = tokio::runtime::Runtime::new().unwrap(); + let reader: TableReader> = TableReader::new( + std::io::Cursor::new(all_bytes), + 8 * 1024, + IPCMessageProtocol::Stream, + None, + ); + let tables = rt.block_on(reader.read_all_tables()).unwrap(); + assert_eq!(tables.len(), 1); + + let mut got = tables.into_iter().next().unwrap(); + got.name = table.name.clone(); + + assert_eq!(got.n_rows, 4); + assert_eq!(got.cols.len(), 3); + + // Verify Decimal32 + match &got.cols[0].array { + Array::NumericArray(NumericArray::Decimal32(arr)) => { + assert_eq!(arr.data.as_slice(), &[100i32, -250, 0, 9999]); + assert_eq!(arr.precision, 7); + assert_eq!(arr.scale, 2); + } + other => panic!("Expected Decimal32, got {:?}", other), + } + + // Verify Decimal64 + match &got.cols[1].array { + Array::NumericArray(NumericArray::Decimal64(arr)) => { + assert_eq!(arr.data.as_slice(), &[123456789i64, -987654321, 0, 42]); + assert_eq!(arr.precision, 18); + assert_eq!(arr.scale, 4); + } + other => panic!("Expected Decimal64, got {:?}", other), + } + + // Verify Decimal128 + match &got.cols[2].array { + Array::NumericArray(NumericArray::Decimal128(arr)) => { + assert_eq!(arr.data.as_slice(), &[10_000_000_000i128, -1, 0, 77777]); + assert_eq!(arr.precision, 38); + assert_eq!(arr.scale, 6); + } + other => panic!("Expected Decimal128, got {:?}", other), + } +} + +// --------------------------------------------------------------------------- +// Windowed read +// --------------------------------------------------------------------------- + +#[test] +fn decimal_windowed_read() { + // Write a 1024-row table so the mmap/file reader can window it. + // Row count must be a multiple of 512 for the windowing constraint. + let n = 1024usize; + let vals: Vec = (0..n as i32).collect(); + let mask = Bitmask::from_bools(&(0..n).map(|i| i % 3 != 0).collect::>()); + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&vals)), + null_mask: Some(mask), + precision: 9, + scale: 3, + }; + let table = Table { + cols: vec![FieldArray::new( + Field::new("dec", ArrowType::Decimal32(9, 3), true, None), + Array::NumericArray(NumericArray::Decimal32(Arc::new(arr))), + )], + n_rows: n, + name: "windowed".into(), + ..Default::default() + }; + let schema = schema_for(&table); + + let file = NamedTempFile::new().unwrap(); + let path = file.path().to_path_buf(); + write_tables_to_file_sync(&path, std::slice::from_ref(&table), schema).unwrap(); + + let reader = FileTableReader::open(&path).unwrap(); + // Read window [512..1024) + let window = reader.read_batch_window(0, 512, 512).unwrap(); + assert_eq!(window.n_rows, 512); + + match &window.cols[0].array { + Array::NumericArray(NumericArray::Decimal32(arr)) => { + assert_eq!(arr.data.len(), 512); + assert_eq!(arr.data.as_slice()[0], 512i32); + assert_eq!(*arr.data.as_slice().last().unwrap(), 1023i32); + assert_eq!(arr.precision, 9); + assert_eq!(arr.scale, 3); + // Null mask should be present and correctly windowed + let mask = arr.null_mask.as_ref().unwrap(); + assert_eq!(mask.len(), 512); + } + other => panic!("Expected Decimal32, got {:?}", other), + } +} + +// --------------------------------------------------------------------------- +// CSV encoding of decimal values +// --------------------------------------------------------------------------- + +#[cfg(feature = "csv")] +mod csv_encoding { + use super::*; + use lightstream::models::encoders::csv::{CsvEncodeOptions, encode_table_csv}; + + #[test] + fn decimal_csv_renders_scaled_values() { + // Decimal64 with scale=2: [12345, -67890] -> "123.45", "-678.90" + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&[12345i64, -67890])), + null_mask: None, + precision: 10, + scale: 2, + }; + let table = Table { + cols: vec![FieldArray::new( + Field::new("amount", ArrowType::Decimal64(10, 2), false, None), + Array::NumericArray(NumericArray::Decimal64(Arc::new(arr))), + )], + n_rows: 2, + name: "csv_test".into(), + ..Default::default() + }; + + let mut out = Vec::new(); + encode_table_csv(&table, &mut out, &CsvEncodeOptions::default()).unwrap(); + let csv = String::from_utf8(out).unwrap(); + assert!(csv.contains("123.45"), "csv was: {csv}"); + assert!(csv.contains("-678.90"), "csv was: {csv}"); + } + + #[test] + fn decimal_csv_scale_zero() { + // Decimal32 with scale=0: values written as integers + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&[42i32, 100])), + null_mask: None, + precision: 5, + scale: 0, + }; + let table = Table { + cols: vec![FieldArray::new( + Field::new("qty", ArrowType::Decimal32(5, 0), false, None), + Array::NumericArray(NumericArray::Decimal32(Arc::new(arr))), + )], + n_rows: 2, + name: "csv_test".into(), + ..Default::default() + }; + + let mut out = Vec::new(); + encode_table_csv(&table, &mut out, &CsvEncodeOptions::default()).unwrap(); + let csv = String::from_utf8(out).unwrap(); + assert!(csv.contains("42"), "csv was: {csv}"); + assert!(csv.contains("100"), "csv was: {csv}"); + } + + #[test] + fn decimal_csv_with_nulls() { + let mask = Bitmask::from_bools(&[true, false, true]); + let arr = DecimalArray:: { + data: minarrow::Buffer::from(minarrow::Vec64::from_slice(&[999i64, 0, 500])), + null_mask: Some(mask), + precision: 10, + scale: 1, + }; + let table = Table { + cols: vec![FieldArray::new( + Field::new("val", ArrowType::Decimal64(10, 1), true, None), + Array::NumericArray(NumericArray::Decimal64(Arc::new(arr))), + )], + n_rows: 3, + name: "csv_null_test".into(), + ..Default::default() + }; + + let mut opts = CsvEncodeOptions::default(); + opts.null_repr = "NULL"; + let mut out = Vec::new(); + encode_table_csv(&table, &mut out, &opts).unwrap(); + let csv = String::from_utf8(out).unwrap(); + assert!(csv.contains("99.9"), "csv was: {csv}"); + assert!(csv.contains("NULL"), "csv was: {csv}"); + assert!(csv.contains("50.0"), "csv was: {csv}"); + } +} + +// --------------------------------------------------------------------------- +// Multiple batches +// --------------------------------------------------------------------------- + +#[test] +fn decimal_multi_batch_roundtrip() { + use lightstream::models::writers::ipc::sync_table::SyncTableWriter; + use minarrow::Vec64; + + let arr1 = DecimalArray:: { + data: minarrow::Buffer::from(Vec64::from_slice(&[100i64, 200, 300])), + null_mask: None, + precision: 10, + scale: 2, + }; + let arr2 = DecimalArray:: { + data: minarrow::Buffer::from(Vec64::from_slice(&[400i64, 500])), + null_mask: None, + precision: 10, + scale: 2, + }; + let field = Field::new("val", ArrowType::Decimal64(10, 2), false, None); + let t1 = Table { + cols: vec![FieldArray::new( + field.clone(), + Array::NumericArray(NumericArray::Decimal64(Arc::new(arr1))), + )], + n_rows: 3, + name: "multi".into(), + ..Default::default() + }; + let t2 = Table { + cols: vec![FieldArray::new( + field.clone(), + Array::NumericArray(NumericArray::Decimal64(Arc::new(arr2))), + )], + n_rows: 2, + name: "multi".into(), + ..Default::default() + }; + + let file = NamedTempFile::new().unwrap(); + let path = file.path().to_path_buf(); + let schema = vec![field]; + + let mut writer = SyncTableWriter::<_, Vec64>::new( + std::fs::File::create(&path).unwrap(), + schema, + IPCMessageProtocol::File, + None, + ); + writer.write_table(t1).unwrap(); + writer.write_table(t2).unwrap(); + writer.finish().unwrap(); + + let reader = FileTableReader::open(&path).unwrap(); + assert_eq!(reader.num_batches(), 2); + + let b0 = reader.read_batch(0).unwrap(); + assert_eq!(b0.n_rows, 3); + match &b0.cols[0].array { + Array::NumericArray(NumericArray::Decimal64(arr)) => { + assert_eq!(arr.data.as_slice(), &[100i64, 200, 300]); + assert_eq!(arr.precision, 10); + assert_eq!(arr.scale, 2); + } + other => panic!("Expected Decimal64, got {:?}", other), + } + + let b1 = reader.read_batch(1).unwrap(); + assert_eq!(b1.n_rows, 2); + match &b1.cols[0].array { + Array::NumericArray(NumericArray::Decimal64(arr)) => { + assert_eq!(arr.data.as_slice(), &[400i64, 500]); + assert_eq!(arr.precision, 10); + assert_eq!(arr.scale, 2); + } + other => panic!("Expected Decimal64, got {:?}", other), + } +}