diff --git a/Cargo.lock b/Cargo.lock index d72c090..7e2e2d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,6 +109,21 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "anymap3" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170433209e817da6aae2c51aa0dd443009a613425dd041ebfb2492d1c4c11a25" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arboard" version = "3.6.1" @@ -191,6 +206,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "atomic" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" +dependencies = [ + "bytemuck", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -252,21 +276,15 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64ct" -version = "1.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" - [[package]] name = "bcrypt" -version = "0.17.1" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abaf6da45c74385272ddf00e1ac074c7d8a6c1a1dda376902bd6a427522a8b2c" +checksum = "24ae5479c93d3720e4c1dbd6b945b97457c50cb672781104768190371df1a905" dependencies = [ "base64", "blowfish", - "getrandom 0.3.4", + "getrandom 0.4.2", "subtle", "zeroize", ] @@ -293,21 +311,42 @@ dependencies = [ "serde", ] +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec 0.6.3", +] + [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bit-vec" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.13.0" @@ -357,10 +396,19 @@ dependencies = [ ] [[package]] -name = "blowfish" -version = "0.9.1" +name = "block-buffer" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "blowfish" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ce3946557b35e71d1bbe07ec385073ce9eda05043f95de134eb578fcf1a298" dependencies = [ "byteorder", "cipher", @@ -421,6 +469,12 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "bytecheck" version = "0.6.12" @@ -467,12 +521,6 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -[[package]] -name = "cassowary" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" - [[package]] name = "castaway" version = "0.2.4" @@ -512,6 +560,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + [[package]] name = "chrono" version = "0.4.45" @@ -528,11 +587,11 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ - "crypto-common", + "crypto-common 0.2.2", "inout", ] @@ -549,8 +608,8 @@ dependencies = [ "futures", "lazy_static", "nucleo", - "prost 0.13.5", - "prost-types 0.13.5", + "prost", + "prost-types", "ratatui", "regex", "rstest", @@ -558,8 +617,8 @@ dependencies = [ "serde_json", "steel-core", "steel-decimal", - "strum 0.27.2", - "strum_macros 0.27.2", + "strum", + "strum_macros", "time", "tokio", "tokio-test", @@ -569,7 +628,7 @@ dependencies = [ "tracing-subscriber", "tui-pages", "unicode-segmentation", - "unicode-width 0.2.0", + "unicode-width 0.2.2", "uuid", ] @@ -582,6 +641,12 @@ dependencies = [ "error-code", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "codegen" version = "0.2.0" @@ -605,14 +670,16 @@ dependencies = [ name = "common" version = "0.8.1" dependencies = [ - "prost 0.13.5", - "prost-build 0.14.4", - "prost-types 0.13.5", + "prost", + "prost-build", + "prost-types", "serde", "serde_json", "tantivy", "tonic", "tonic-build", + "tonic-prost", + "tonic-prost-build", ] [[package]] @@ -630,6 +697,20 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "compact_str" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dfdd1c2274d9aa354115b09dc9a901d6c5576818cdf70d14cae2bdb47df00ab" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -639,12 +720,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - [[package]] name = "const_panic" version = "0.2.15" @@ -655,13 +730,12 @@ dependencies = [ ] [[package]] -name = "core-foundation" -version = "0.10.1" +name = "convert_case" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ - "core-foundation-sys", - "libc", + "unicode-segmentation", ] [[package]] @@ -694,6 +768,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc" version = "3.4.0" @@ -718,6 +801,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -763,15 +852,17 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags", + "bitflags 2.13.0", "crossterm_winapi", + "derive_more", + "document-features", "mio", "parking_lot", - "rustix 0.38.44", + "rustix", "serde", "signal-hook", "signal-hook-mio", @@ -803,6 +894,34 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "csscolorparser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" +dependencies = [ + "lab", + "phf", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "darling" version = "0.20.11" @@ -887,15 +1006,16 @@ dependencies = [ ] [[package]] -name = "der" -version = "0.7.10" +name = "datasketches" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] +checksum = "c286de4e81ea2590afc24d754e0f83810c566f50a1388fa75ebd57928c0d9745" + +[[package]] +name = "deltae" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" [[package]] name = "deranged" @@ -918,16 +1038,47 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "block-buffer 0.10.4", + "crypto-common 0.1.7", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.0", + "crypto-common 0.2.2", + "ctutils", ] [[package]] @@ -957,7 +1108,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags", + "bitflags 2.13.0", "objc2", ] @@ -972,6 +1123,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -1005,6 +1165,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + [[package]] name = "errno" version = "0.3.14" @@ -1023,13 +1194,21 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "etcetera" -version = "0.8.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" dependencies = [ "cfg-if", - "home", - "windows-sys 0.48.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", ] [[package]] @@ -1043,17 +1222,33 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fancy-regex" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +dependencies = [ + "bit-set 0.5.3", + "regex", +] + [[package]] name = "fancy-regex" version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "998b056554fbe42e03ae0e152895cd1a7e1002aec800fdc6635d20270260c46f" dependencies = [ - "bit-set", + "bit-set 0.8.0", "regex-automata", "regex-syntax", ] +[[package]] +name = "fast-srgb8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" + [[package]] name = "fastdivide" version = "0.4.2" @@ -1081,12 +1276,35 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "filedescriptor" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" +dependencies = [ + "libc", + "thiserror 1.0.69", + "winapi", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "finl_unicode" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "fixedbitset" version = "0.5.7" @@ -1105,9 +1323,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" dependencies = [ "futures-core", "futures-sink", @@ -1127,19 +1345,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "foreign-types" -version = "0.3.2" +name = "foldhash" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" @@ -1152,12 +1361,12 @@ dependencies = [ [[package]] name = "fs4" -version = "0.8.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8" +checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" dependencies = [ - "rustix 0.38.44", - "windows-sys 0.52.0", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -1271,15 +1480,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generational-arena" version = "0.2.9" @@ -1299,13 +1499,23 @@ dependencies = [ "version_check", ] +[[package]] +name = "generic_singleton" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab6e923c8e978e57cf63e2e200ca967d1d20f0ea2662b28f6d4e11c44aa6ab16" +dependencies = [ + "anymap3", + "parking_lot", +] + [[package]] name = "gethostname" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.4", + "rustix", "windows-link", ] @@ -1316,10 +1526,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -1345,6 +1553,7 @@ dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", "wasip2", "wasip3", ] @@ -1410,10 +1619,19 @@ name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.2.0", ] [[package]] @@ -1421,14 +1639,19 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "hashlink" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -1451,29 +1674,20 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest", -] - -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", + "digest 0.11.3", ] [[package]] @@ -1527,6 +1741,15 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "hybrid-array" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" version = "1.10.1" @@ -1576,21 +1799,12 @@ dependencies = [ "hyper", "libc", "pin-project-lite", - "socket2 0.6.4", + "socket2", "tokio", "tower-service", "tracing", ] -[[package]] -name = "hyperloglogplus" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621debdf94dcac33e50475fdd76d34d5ea9c0362a834b9db08c3024696c1fbe3" -dependencies = [ - "serde", -] - [[package]] name = "iana-time-zone" version = "0.1.65" @@ -1615,6 +1829,28 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_casemap" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "070f98b5b82798fcb93654bf96ed9f40064fc44c86f51a09ea711092cd5cc5be" +dependencies = [ + "icu_casemap_data", + "icu_collections", + "icu_locale_core", + "icu_properties", + "icu_provider", + "potential_utf", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_casemap_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "846b0857ca091204be3c874bc93daaf89d4777e8d2d20b0d3ffe8f671d98014b" + [[package]] name = "icu_collections" version = "2.2.0" @@ -1623,6 +1859,7 @@ checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "serde", "utf8_iter", "yoke", "zerofrom", @@ -1637,6 +1874,7 @@ checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", + "serde", "tinystr", "writeable", "zerovec", @@ -1690,6 +1928,8 @@ checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", + "serde", + "stable_deref_trait", "writeable", "yoke", "zerofrom", @@ -1747,10 +1987,11 @@ dependencies = [ [[package]] name = "im-lists" -version = "0.9.1" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b971d2652e5700514cc92ca020dba64c790352af0ff2b9acb7514868a32d6aa" +checksum = "82158d5d59eff663dbb9d89295eacac296f58bc0473331cea2f45d9d270c5540" dependencies = [ + "generic_singleton", "smallvec", ] @@ -1816,11 +2057,11 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -1837,12 +2078,12 @@ dependencies = [ ] [[package]] -name = "itertools" -version = "0.13.0" +name = "inventory" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" dependencies = [ - "either", + "rustversion", ] [[package]] @@ -1883,19 +2124,38 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "9.3.1" +version = "10.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" dependencies = [ "base64", + "getrandom 0.2.17", "js-sys", "pem", - "ring", "serde", "serde_json", + "signature", "simple_asn1", + "zeroize", ] +[[package]] +name = "kasuari" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" +dependencies = [ + "hashbrown 0.16.1", + "portable-atomic", + "thiserror 2.0.18", +] + +[[package]] +name = "lab" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" + [[package]] name = "lasso" version = "0.7.3" @@ -1913,9 +2173,6 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin", -] [[package]] name = "leb128fmt" @@ -1957,34 +2214,34 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags", "libc", - "plain", - "redox_syscall 0.8.1", ] [[package]] name = "libsqlite3-sys" -version = "0.30.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +checksum = "b1f111c8c41e7c61a49cd34e44c7619462967221a6443b0ec299e0ac30cfb9b1" dependencies = [ "pkg-config", "vcpkg", ] +[[package]] +name = "line-clipping" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8" +dependencies = [ + "bitflags 2.13.0", +] + [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -1997,6 +2254,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -2014,18 +2277,37 @@ checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" [[package]] name = "lru" -version = "0.12.5" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", +] + +[[package]] +name = "lru" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" +dependencies = [ + "hashbrown 0.17.1", ] [[package]] name = "lz4_flex" -version = "0.11.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" +checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" + +[[package]] +name = "mac_address" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" +dependencies = [ + "nix", + "winapi", +] [[package]] name = "matchers" @@ -2049,7 +2331,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "md-5" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +dependencies = [ + "cfg-if", + "digest 0.11.3", ] [[package]] @@ -2076,6 +2368,21 @@ dependencies = [ "libc", ] +[[package]] +name = "memmem" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.17" @@ -2133,20 +2440,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" [[package]] -name = "native-tls" -version = "0.2.18" +name = "nix" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ + "bitflags 2.13.0", + "cfg-if", + "cfg_aliases", "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "memoffset", ] [[package]] @@ -2200,28 +2503,23 @@ dependencies = [ "serde", ] -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.6", - "smallvec", - "zeroize", -] - [[package]] name = "num-conv" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -2231,17 +2529,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.2" @@ -2260,7 +2547,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -2287,7 +2573,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags", + "bitflags 2.13.0", "objc2", "objc2-core-graphics", "objc2-foundation", @@ -2299,7 +2585,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags", + "bitflags 2.13.0", "dispatch2", "objc2", ] @@ -2310,7 +2596,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags", + "bitflags 2.13.0", "dispatch2", "objc2", "objc2-core-foundation", @@ -2329,7 +2615,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", ] @@ -2340,7 +2626,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags", + "bitflags 2.13.0", "objc2", "objc2-core-foundation", ] @@ -2357,55 +2643,32 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "269bca4c2591a28585d6bf10d9ed0332b7d76900a1b02bec41bdc3a2cdcda107" -[[package]] -name = "openssl" -version = "0.10.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "openssl-probe" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" - -[[package]] -name = "openssl-sys" -version = "0.9.116" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-float" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" +dependencies = [ + "num-traits", + "rand 0.8.6", + "serde", +] + [[package]] name = "ownedbytes" version = "0.9.0" @@ -2415,6 +2678,30 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "palette" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" +dependencies = [ + "approx", + "fast-srgb8", + "libm", + "palette_derive", +] + +[[package]] +name = "palette_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "parking" version = "2.2.1" @@ -2439,7 +2726,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -2460,15 +2747,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.2" @@ -2476,13 +2754,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] -name = "petgraph" -version = "0.7.1" +name = "pest" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" dependencies = [ - "fixedbitset", - "indexmap 2.14.0", + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "pest_meta" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" +dependencies = [ + "pest", + "sha2 0.10.9", ] [[package]] @@ -2491,11 +2802,63 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ - "fixedbitset", + "fixedbitset 0.5.7", "hashbrown 0.15.5", "indexmap 2.14.0", ] +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.6", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.13" @@ -2522,39 +2885,12 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - [[package]] name = "pkg-config" version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "plist" version = "1.9.0" @@ -2574,7 +2910,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -2591,16 +2927,24 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] +[[package]] +name = "portable-atomic" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + [[package]] name = "potential_utf" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ + "serde_core", + "writeable", "zerovec", ] @@ -2627,7 +2971,7 @@ checksum = "0d22152487193190344590e4f30e219cf3fe140d9e7a3fdb683d82aa2c5f4156" dependencies = [ "arrayvec 0.5.2", "typed-arena", - "unicode-width 0.2.0", + "unicode-width 0.2.2", ] [[package]] @@ -2646,7 +2990,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.12+spec-1.1.0", + "toml_edit", ] [[package]] @@ -2680,16 +3024,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive 0.13.5", -] - [[package]] name = "prost" version = "0.14.4" @@ -2697,27 +3031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", - "prost-derive 0.14.4", -] - -[[package]] -name = "prost-build" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" -dependencies = [ - "heck", - "itertools 0.14.0", - "log", - "multimap", - "once_cell", - "petgraph 0.7.1", - "prettyplease", - "prost 0.13.5", - "prost-types 0.13.5", - "regex", - "syn 2.0.117", - "tempfile", + "prost-derive", ] [[package]] @@ -2727,31 +3041,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ "heck", - "itertools 0.14.0", + "itertools", "log", "multimap", - "petgraph 0.8.3", + "petgraph", "prettyplease", - "prost 0.14.4", - "prost-types 0.14.4", + "prost", + "prost-types", + "pulldown-cmark", + "pulldown-cmark-to-cmark", "regex", "syn 2.0.117", "tempfile", ] -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "prost-derive" version = "0.14.4" @@ -2759,28 +3062,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", - "itertools 0.14.0", + "itertools", "proc-macro2", "quote", "syn 2.0.117", ] -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost 0.13.5", -] - [[package]] name = "prost-types" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ - "prost 0.14.4", + "prost", ] [[package]] @@ -2803,6 +3097,26 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pulldown-cmark" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" +dependencies = [ + "bitflags 2.13.0", + "memchr", + "unicase", +] + +[[package]] +name = "pulldown-cmark-to-cmark" +version = "22.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90" +dependencies = [ + "pulldown-cmark", +] + [[package]] name = "pxfm" version = "0.1.29" @@ -2824,16 +3138,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "quickscope" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d47bcfc3e13850589cf9338a02b6dfb5aebb3748a0f93a392e8df91d6193b6b" -dependencies = [ - "indexmap 1.9.3", - "smallvec", -] - [[package]] name = "quote" version = "1.0.45" @@ -2870,6 +3174,7 @@ dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", + "serde", ] [[package]] @@ -2882,6 +3187,17 @@ dependencies = [ "rand_core 0.9.5", ] +[[package]] +name = "rand" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +dependencies = [ + "chacha20", + "getrandom 0.4.2", + "rand_core 0.10.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -2909,6 +3225,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom 0.2.17", + "serde", ] [[package]] @@ -2921,14 +3238,10 @@ dependencies = [ ] [[package]] -name = "rand_distr" -version = "0.4.3" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.6", -] +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rand_xoshiro" @@ -2941,23 +3254,92 @@ dependencies = [ [[package]] name = "ratatui" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" +checksum = "1695748e3a735b34968c887ceea5a380b43545903868ae8f5b666593100f6b68" dependencies = [ - "bitflags", - "cassowary", - "compact_str", - "crossterm", - "indoc", "instability", - "itertools 0.13.0", - "lru", - "paste", - "strum 0.26.3", + "ratatui-core", + "ratatui-crossterm", + "ratatui-macros", + "ratatui-termwiz", + "ratatui-widgets", + "serde", +] + +[[package]] +name = "ratatui-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3603f354bba8c595fa47860e60142d7372b7210c27044c6a7d0e1a4336b44" +dependencies = [ + "bitflags 2.13.0", + "compact_str 0.9.1", + "critical-section", + "hashbrown 0.17.1", + "indoc", + "itertools", + "kasuari", + "lru 0.18.0", + "palette", + "serde", + "strum", + "thiserror 2.0.18", "unicode-segmentation", "unicode-truncate", - "unicode-width 0.2.0", + "unicode-width 0.2.2", +] + +[[package]] +name = "ratatui-crossterm" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2867bedcbd6a690ca4f8672a687b730ec07660c79844517b084311b529980c" +dependencies = [ + "cfg-if", + "crossterm", + "instability", + "ratatui-core", +] + +[[package]] +name = "ratatui-macros" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80fac59720679490d89d200df411faa249be728681adcabed3d047ae72c48f1d" +dependencies = [ + "ratatui-core", + "ratatui-widgets", +] + +[[package]] +name = "ratatui-termwiz" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "386b8ff8f74ed749509391c56d549761a2fcdb408e1f42e467286bcb7dac8967" +dependencies = [ + "ratatui-core", + "termwiz", +] + +[[package]] +name = "ratatui-widgets" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef4f17dd7ac3abf5adc2b920a03c61eee4bfe6a88fa5191936895525371d79c" +dependencies = [ + "bitflags 2.13.0", + "hashbrown 0.17.1", + "indoc", + "instability", + "itertools", + "line-clipping", + "ratatui-core", + "serde", + "strum", + "time", + "unicode-segmentation", + "unicode-width 0.2.2", ] [[package]] @@ -2986,16 +3368,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" -dependencies = [ - "bitflags", + "bitflags 2.13.0", ] [[package]] @@ -3006,7 +3379,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", - "thiserror", + "thiserror 2.0.18", ] [[package]] @@ -3062,20 +3435,6 @@ dependencies = [ "tstr", ] -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "rkyv" version = "0.7.46" @@ -3115,43 +3474,22 @@ dependencies = [ "str_indices", ] -[[package]] -name = "rsa" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core 0.6.4", - "signature", - "spki", - "subtle", - "zeroize", -] - [[package]] name = "rstest" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" dependencies = [ "futures-timer", "futures-util", "rstest_macros", - "rustc_version", ] [[package]] name = "rstest_macros" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" dependencies = [ "cfg-if", "glob", @@ -3217,29 +3555,16 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags", + "bitflags 2.13.0", "errno", "libc", - "linux-raw-sys 0.12.1", + "linux-raw-sys", "windows-sys 0.61.2", ] @@ -3264,15 +3589,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -3291,7 +3607,7 @@ version = "0.8.1" dependencies = [ "anyhow", "common", - "prost 0.13.5", + "prost", "serde", "serde_json", "sqlx", @@ -3302,29 +3618,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "security-framework" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.28" @@ -3376,23 +3669,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", + "serde_core", ] [[package]] @@ -3409,10 +3690,10 @@ dependencies = [ "jsonwebtoken", "lazy_static", "once_cell", - "prost 0.13.5", - "prost-build 0.14.4", - "prost-types 0.13.5", - "rand 0.9.4", + "prost", + "prost-build", + "prost-types", + "rand 0.10.1", "regex", "rstest", "rust-stemmers", @@ -3426,7 +3707,7 @@ dependencies = [ "steel-decimal", "steel-derive", "tantivy", - "thiserror", + "thiserror 2.0.18", "time", "tokio", "tokio-test", @@ -3435,20 +3716,20 @@ dependencies = [ "tracing", "tracing-subscriber", "tui-canvas-validation-core", - "unicode-width 0.2.0", + "unicode-width 0.2.2", "uuid", "validator", ] [[package]] name = "sha1" -version = "0.10.6" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -3458,8 +3739,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -3471,6 +3763,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared_vector" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aacfea9afcf271e69d700140dc2a3e2ff44b1092dd0de71fdd4e5c26672a2" +dependencies = [ + "allocator-api2", +] + [[package]] name = "shlex" version = "2.0.1" @@ -3514,7 +3815,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", "rand_core 0.6.4", ] @@ -3538,10 +3838,16 @@ checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" dependencies = [ "num-bigint", "num-traits", - "thiserror", + "thiserror 2.0.18", "time", ] +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + [[package]] name = "sized-chunks" version = "0.6.5" @@ -3554,9 +3860,9 @@ dependencies = [ [[package]] name = "sketches-ddsketch" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6f73aeb92d671e0cc4dca167e59b2deb6387c375391bc99ee743f326994a2b" +checksum = "05e40b6cf54d988dc1a2223531b969c9a9e30906ad90ef64890c27b4bfbb46ea" dependencies = [ "serde", ] @@ -3576,16 +3882,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.4" @@ -3605,21 +3901,11 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - [[package]] name = "sqlx" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +checksum = "378620ccc25c62c89d8be1c819e76a88d59bdcc3304733330788948e619bfd71" dependencies = [ "sqlx-core", "sqlx-macros", @@ -3630,12 +3916,13 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ "base64", "bytes", + "cfg-if", "chrono", "crc", "crossbeam-queue", @@ -3645,20 +3932,18 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "hashlink", "indexmap 2.14.0", "log", "memchr", - "native-tls", - "once_cell", "percent-encoding", "rust_decimal", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "smallvec", - "thiserror", + "thiserror 2.0.18", "time", "tokio", "tokio-stream", @@ -3669,9 +3954,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +checksum = "bd2b84f2bc39a5705ef27ec785a11c934a41bbd4a24941e257927cddc26b60bf" dependencies = [ "proc-macro2", "quote", @@ -3682,84 +3967,69 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +checksum = "fb8d96de5fdc85a5c4ec813432b523ec637e80ba98f046555f75f7908ddac7c3" dependencies = [ + "cfg-if", "dotenvy", "either", "heck", "hex", - "once_cell", "proc-macro2", "quote", "serde", "serde_json", - "sha2", + "sha2 0.10.9", "sqlx-core", "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", "syn 2.0.117", + "thiserror 2.0.18", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +checksum = "90b8020fe17c5f2c245bfa2505d7ef59c5604839527c740266ad2214acebea27" dependencies = [ - "atoi", - "base64", - "bitflags", + "bitflags 2.13.0", "byteorder", "bytes", "chrono", "crc", - "digest", + "digest 0.11.3", "dotenvy", "either", - "futures-channel", "futures-core", - "futures-io", "futures-util", "generic-array", - "hex", - "hkdf", - "hmac", - "itoa", "log", - "md-5", - "memchr", - "once_cell", "percent-encoding", - "rand 0.8.6", - "rsa", "rust_decimal", "serde", "sha1", - "sha2", - "smallvec", + "sha2 0.11.0", "sqlx-core", - "stringprep", - "thiserror", + "thiserror 2.0.18", "time", "tracing", "uuid", - "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" dependencies = [ "atoi", "base64", - "bitflags", + "bitflags 2.13.0", "byteorder", "chrono", "crc", @@ -3771,21 +4041,19 @@ dependencies = [ "hex", "hkdf", "hmac", - "home", "itoa", "log", - "md-5", + "md-5 0.11.0", "memchr", - "once_cell", - "rand 0.8.6", + "rand 0.10.1", "rust_decimal", "serde", "serde_json", - "sha2", + "sha2 0.11.0", "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.18", "time", "tracing", "uuid", @@ -3794,13 +4062,14 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +checksum = "488e99c397a62007e4229aec669a179816339afc6d2620ca6fa420dbee2e982c" dependencies = [ "atoi", "chrono", "flume", + "form_urlencoded", "futures-channel", "futures-core", "futures-executor", @@ -3810,9 +4079,8 @@ dependencies = [ "log", "percent-encoding", "serde", - "serde_urlencoded", "sqlx-core", - "thiserror", + "thiserror 2.0.18", "time", "tracing", "url", @@ -3833,9 +4101,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "steel-core" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fcd4a04c6b2fc5f695ad37b379ad0e4245a9a12dcd742fe4fe1ad15ddd6546" +checksum = "b4acadc255e0d56fe71c09c605ebde51e6009b02d86ae610386f26437c4f91f8" dependencies = [ "abi_stable", "anyhow", @@ -3845,23 +4113,25 @@ dependencies = [ "bincode", "chrono", "codespan-reporting", - "compact_str", + "compact_str 0.8.2", "crossbeam-channel", + "crossbeam-queue", "crossbeam-utils", "env_home", "futures-executor", "futures-task", "futures-util", - "fxhash", "getrandom 0.3.4", "glob", "httparse", + "icu_casemap", "im", "im-lists", "im-rc", + "js-sys", "lasso", "log", - "md-5", + "md-5 0.10.6", "num-bigint", "num-integer", "num-rational", @@ -3869,15 +4139,18 @@ dependencies = [ "once_cell", "parking_lot", "polling", - "quickscope", "rand 0.9.4", + "rustc-hash", "serde", "serde_json", + "shared_vector", "smallvec", "steel-derive", "steel-gen", "steel-parser", + "steel-quickscope", "strsim", + "thin-vec", "weak-table", "which", "xdg", @@ -3885,23 +4158,23 @@ dependencies = [ [[package]] name = "steel-decimal" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd8a6d1a41d2146705b29292cac75c78a3e32d7b6cabb72d808209546615f37" +checksum = "f89e403c72338066141ad32c5f5b85904a43862c602249e22c0d678bccf792c8" dependencies = [ "regex", "rust_decimal", "rust_decimal_macros", "steel-core", "steel-derive", - "thiserror", + "thiserror 2.0.18", ] [[package]] name = "steel-derive" -version = "0.6.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab7d1c6e3ee7b3ba6a4187b545d7dc1fa6e4929f0721a8798cfc3b8c7ed2b23" +checksum = "7a564df3ca16e0be05e71bdcc3fe52f8b71e47be9c73e7a0bf43840fde591997" dependencies = [ "proc-macro2", "quote", @@ -3910,9 +4183,9 @@ dependencies = [ [[package]] name = "steel-gen" -version = "0.3.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deabc06d4f4735677503f593ae185d3f47c0fa8089b7e9a7177e0e0544483d86" +checksum = "e1a614449ed6cba4138ce2e54943fb403533248da8070dad6ce943f1b14417b8" dependencies = [ "codegen", "serde", @@ -3920,20 +4193,34 @@ dependencies = [ [[package]] name = "steel-parser" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf95d03e34e5d34a318a1f3ad7c933628c476776d3dc4fe9accb5b7b6b5a295" +checksum = "769cea4a36ee603bfde799ab9c1ec1f93a67df30bcf4cd22d069eb8d4155e2b2" dependencies = [ - "compact_str", - "fxhash", + "compact_str 0.8.2", + "dashmap", "lasso", + "log", "num-bigint", "num-rational", "num-traits", "once_cell", + "ordered-float 5.3.0", "pretty", + "rustc-hash", "serde", "smallvec", + "thin-vec", +] + +[[package]] +name = "steel-quickscope" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3b5ab5dbc71b317360a2f5287abc1c91a92ced9a983066e2622a607583bc89e" +dependencies = [ + "indexmap 2.14.0", + "smallvec", ] [[package]] @@ -3961,37 +4248,18 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.26.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ - "strum_macros 0.26.4", -] - -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.117", + "strum_macros", ] [[package]] name = "strum_macros" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", @@ -4051,7 +4319,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "656b45c05d95a5704399aeef6bd0ddec7b2b3531b7c9e900abbf7c4d2190c925" dependencies = [ "bincode", - "fancy-regex", + "fancy-regex 0.16.2", "flate2", "fnv", "once_cell", @@ -4060,16 +4328,16 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "thiserror", + "thiserror 2.0.18", "walkdir", "yaml-rust", ] [[package]] name = "tantivy" -version = "0.24.2" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a966cb0e76e311f09cf18507c9af192f15d34886ee43d7ba7c7e3803660c43" +checksum = "edde6a10743fff00a4e1a8c9ef020bf5f3cbad301b7d2d39f2b07f123c4eac07" dependencies = [ "aho-corasick", "arc-swap", @@ -4080,16 +4348,16 @@ dependencies = [ "census", "crc32fast", "crossbeam-channel", + "datasketches", "downcast-rs", "fastdivide", "fnv", "fs4", "htmlescape", - "hyperloglogplus", - "itertools 0.14.0", + "itertools", "levenshtein_automata", "log", - "lru", + "lru 0.16.4", "lz4_flex", "measure_time", "memmap2", @@ -4111,30 +4379,31 @@ dependencies = [ "tantivy-stacker", "tantivy-tokenizer-api", "tempfile", - "thiserror", + "thiserror 2.0.18", "time", + "typetag", "uuid", "winapi", ] [[package]] name = "tantivy-bitpacker" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adc286a39e089ae9938935cd488d7d34f14502544a36607effd2239ff0e2494" +checksum = "4fed3d674429bcd2de5d0a6d1aa5495fed8afd9c5ecce993019caf7615f53fa4" dependencies = [ "bitpacking", ] [[package]] name = "tantivy-columnar" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6300428e0c104c4f7db6f95b466a6f5c1b9aece094ec57cdd365337908dc7344" +checksum = "c57166f5bcfd478f370ab8445afb4678dce44801fa5ce5c451aaf8595583c5dc" dependencies = [ "downcast-rs", "fastdivide", - "itertools 0.14.0", + "itertools", "serde", "tantivy-bitpacker", "tantivy-common", @@ -4144,9 +4413,9 @@ dependencies = [ [[package]] name = "tantivy-common" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b6ea6090ce03dc72c27d0619e77185d26cc3b20775966c346c6d4f7e99d7f" +checksum = "bbf10915aa75da3c3b0d58b58853d2e889efbaf32d4982a4c3715dde6bba23e5" dependencies = [ "async-trait", "byteorder", @@ -4168,23 +4437,25 @@ dependencies = [ [[package]] name = "tantivy-query-grammar" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e810cdeeebca57fc3f7bfec5f85fdbea9031b2ac9b990eb5ff49b371d52bbe6a" +checksum = "dfadb8526b6da90704feb293b0701a6aae62ea14983143344be2dc5ce30f1d82" dependencies = [ + "fnv", "nom", + "ordered-float 5.3.0", "serde", "serde_json", ] [[package]] name = "tantivy-sstable" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709f22c08a4c90e1b36711c1c6cad5ae21b20b093e535b69b18783dd2cb99416" +checksum = "8a2cfc3ac5164cbadc28965ffb145a8f47582a60ae5897859ad8d4316596c606" dependencies = [ "futures-util", - "itertools 0.14.0", + "itertools", "tantivy-bitpacker", "tantivy-common", "tantivy-fst", @@ -4193,20 +4464,19 @@ dependencies = [ [[package]] name = "tantivy-stacker" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bcdebb267671311d1e8891fd9d1301803fdb8ad21ba22e0a30d0cab49ba59c1" +checksum = "6cbb051742da9d53ca9e8fff43a9b10e319338b24e2c0e15d0372df19ffeb951" dependencies = [ "murmurhash32", - "rand_distr", "tantivy-common", ] [[package]] name = "tantivy-tokenizer-api" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa942fcee81e213e09715bbce8734ae2180070b97b33839a795ba1de201547d" +checksum = "eac258c2c6390673f2685813afeeafcb8c4e0ee7de8dd3fc46838dcc37263f98" dependencies = [ "serde", ] @@ -4226,7 +4496,7 @@ dependencies = [ "fastrand", "getrandom 0.4.2", "once_cell", - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] @@ -4239,13 +4509,105 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminfo" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" +dependencies = [ + "fnv", + "nom", + "phf", + "phf_codegen", +] + +[[package]] +name = "termios" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" +dependencies = [ + "libc", +] + +[[package]] +name = "termwiz" +version = "0.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" +dependencies = [ + "anyhow", + "base64", + "bitflags 2.13.0", + "fancy-regex 0.11.0", + "filedescriptor", + "finl_unicode", + "fixedbitset 0.4.2", + "hex", + "lazy_static", + "libc", + "log", + "memmem", + "nix", + "num-derive", + "num-traits", + "ordered-float 4.6.0", + "pest", + "pest_derive", + "phf", + "sha2 0.10.9", + "signal-hook", + "siphasher", + "terminfo", + "termios", + "thiserror 1.0.69", + "ucd-trie", + "unicode-segmentation", + "vtparse", + "wezterm-bidi", + "wezterm-blob-leases", + "wezterm-color-types", + "wezterm-dynamic", + "wezterm-input-types", + "winapi", +] + +[[package]] +name = "thin-vec" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482" +dependencies = [ + "serde", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -4322,6 +4684,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] @@ -4352,7 +4715,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.4", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] @@ -4405,23 +4768,17 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.23" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ - "serde", + "indexmap 2.14.0", + "serde_core", "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] @@ -4433,20 +4790,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.14.0", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow 0.7.15", -] - [[package]] name = "toml_edit" version = "0.25.12+spec-1.1.0" @@ -4454,9 +4797,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap 2.14.0", - "toml_datetime 1.1.1+spec-1.1.0", + "toml_datetime", "toml_parser", - "winnow 1.0.3", + "winnow", ] [[package]] @@ -4465,20 +4808,20 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.3", + "winnow", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_writer" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tonic" -version = "0.13.1" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" +checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef" dependencies = [ "async-trait", "axum", @@ -4493,8 +4836,8 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.5", - "socket2 0.5.10", + "socket2", + "sync_wrapper", "tokio", "tokio-stream", "tower", @@ -4505,29 +4848,55 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.13.1" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac6f67be712d12f0b41328db3137e0d0757645d8904b4cb7d51cd9c2279e847" +checksum = "c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322" dependencies = [ "prettyplease", "proc-macro2", - "prost-build 0.13.5", - "prost-types 0.13.5", "quote", "syn 2.0.117", ] [[package]] -name = "tonic-reflection" -version = "0.13.1" +name = "tonic-prost" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9687bd5bfeafebdded2356950f278bba8226f0b32109537c4253406e09aafe1" +checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" dependencies = [ - "prost 0.13.5", - "prost-types 0.13.5", + "bytes", + "prost", + "tonic", +] + +[[package]] +name = "tonic-prost-build" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build", + "prost-types", + "quote", + "syn 2.0.117", + "tempfile", + "tonic-build", +] + +[[package]] +name = "tonic-reflection" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acccd136a4bf19810a1fde9c74edc6129b42a66b44d0c1c8aaa67aeb49a146a7" +dependencies = [ + "prost", + "prost-types", "tokio", "tokio-stream", "tonic", + "tonic-prost", ] [[package]] @@ -4659,14 +5028,14 @@ dependencies = [ "ropey", "serde", "syntect", - "thiserror", + "thiserror 2.0.18", "tokio", "tokio-test", "toml", "tracing", "tracing-subscriber", "tui-canvas-validation-core", - "unicode-width 0.2.0", + "unicode-width 0.2.2", ] [[package]] @@ -4675,8 +5044,8 @@ version = "0.8.1" dependencies = [ "regex", "serde", - "thiserror", - "unicode-width 0.2.0", + "thiserror 2.0.18", + "unicode-width 0.2.2", ] [[package]] @@ -4697,18 +5066,60 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" +[[package]] +name = "typetag" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5a897b12c6c1151ad0b138b8db50252dc301f93bc3b027db05eec82aeed298c" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf808357c6ed7e13ba0f3277ec8d8f21b2d501274895104263985330c726c1c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "typewit" version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "214ca0b2191785cbc06209b9ca1861e048e39b5ba33574b3cedd58363d5bb5f6" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-bidi" version = "0.3.18" @@ -4744,13 +5155,13 @@ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-truncate" -version = "1.1.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" +checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" dependencies = [ - "itertools 0.13.0", + "itertools", "unicode-segmentation", - "unicode-width 0.1.14", + "unicode-width 0.2.2", ] [[package]] @@ -4761,9 +5172,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" @@ -4771,12 +5182,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - [[package]] name = "url" version = "2.5.8" @@ -4801,12 +5206,19 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ + "atomic", "getrandom 0.4.2", "js-sys", "serde_core", @@ -4861,6 +5273,15 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vtparse" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" +dependencies = [ + "utf8parse", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -4904,12 +5325,6 @@ dependencies = [ "wit-bindgen 0.51.0", ] -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" version = "0.2.123" @@ -4984,7 +5399,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -5003,26 +5418,91 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] -name = "which" -version = "7.0.3" +name = "wezterm-bidi" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" +checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" dependencies = [ - "either", - "env_home", - "rustix 1.1.4", - "winsafe", + "log", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-blob-leases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" +dependencies = [ + "getrandom 0.3.4", + "mac_address", + "sha2 0.10.9", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "wezterm-color-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" +dependencies = [ + "csscolorparser", + "deltae", + "lazy_static", + "wezterm-dynamic", +] + +[[package]] +name = "wezterm-dynamic" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" +dependencies = [ + "log", + "ordered-float 4.6.0", + "strsim", + "thiserror 1.0.69", + "wezterm-dynamic-derive", +] + +[[package]] +name = "wezterm-dynamic-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "wezterm-input-types" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" +dependencies = [ + "bitflags 1.3.2", + "euclid", + "lazy_static", + "serde", + "wezterm-dynamic", +] + +[[package]] +name = "which" +version = "8.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c789537cf2f7f55be8e6192f92e464174ee55f91af622777f7f1ceb0dbccd03e" +dependencies = [ + "libc", ] [[package]] name = "whoami" -version = "1.6.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", -] +checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" [[package]] name = "winapi" @@ -5114,24 +5594,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.59.0" @@ -5159,21 +5621,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -5207,12 +5654,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -5225,12 +5666,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -5243,12 +5678,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -5273,12 +5702,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -5291,12 +5714,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -5309,12 +5726,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -5327,12 +5738,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -5345,15 +5750,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winnow" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "1.0.3" @@ -5363,12 +5759,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winsafe" -version = "0.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" - [[package]] name = "wit-bindgen" version = "0.51.0" @@ -5433,7 +5823,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags", + "bitflags 2.13.0", "indexmap 2.14.0", "log", "serde", @@ -5485,7 +5875,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "gethostname", - "rustix 1.1.4", + "rustix", "x11rb-protocol", ] @@ -5579,6 +5969,20 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] name = "zerotrie" @@ -5589,6 +5993,7 @@ dependencies = [ "displaydoc", "yoke", "zerofrom", + "zerovec", ] [[package]] @@ -5597,6 +6002,7 @@ version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", diff --git a/Cargo.toml b/Cargo.toml index 5f861b0..dab87c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,10 +21,10 @@ categories = ["command-line-interface"] [workspace.dependencies] # Async and gRPC tokio = { version = "1.52.3", features = ["full"] } -tonic = "0.13.1" -prost = "0.13.5" +tonic = "0.14.6" +prost = "0.14.4" async-trait = "0.1.89" -prost-types = "0.13.5" +prost-types = "0.14.4" # Data Handling & Serialization serde = { version = "1.0.228", features = ["derive"] } @@ -38,7 +38,7 @@ lazy_static = "1.5.0" tracing = "0.1.44" # Search crate -tantivy = "0.24.2" +tantivy = "0.26.1" # Steel_decimal crate rust_decimal = { version = "1.42.0", features = ["maths", "serde"] } @@ -47,9 +47,9 @@ thiserror = "2.0.18" regex = "1.12.4" # Canvas crate -ratatui = { version = "0.29.0", features = ["crossterm"] } -crossterm = "0.28.1" -toml = "0.8.23" -unicode-width = "0.2.0" +ratatui = { version = "0.30.1", features = ["crossterm"] } +crossterm = "0.29.0" +toml = "1.1.2" +unicode-width = "0.2.2" common = { path = "./common" } diff --git a/client b/client index e2dc8ab..e800ead 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit e2dc8ab2a217d8fa3cf264fe9cf7fe944e614e81 +Subproject commit e800ead957d612f93e2a6539db9d87dd9a468070 diff --git a/common/Cargo.toml b/common/Cargo.toml index d4fe3bb..88908c6 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -7,14 +7,16 @@ license.workspace = true [dependencies] prost-types = { workspace = true } -tonic = "0.13.1" -prost = "0.13.5" +tonic = "0.14.6" +prost = "0.14.4" serde = { version = "1.0.228", features = ["derive"] } # Search tantivy = { workspace = true } serde_json.workspace = true +tonic-prost = "0.14.6" [build-dependencies] -tonic-build = { version = "0.13.1", features = ["prost-build"] } +tonic-build = { version = "0.14.6" } prost-build = "0.14.4" +tonic-prost-build = "0.14.6" diff --git a/common/build.rs b/common/build.rs index dd77ea9..efedbfb 100644 --- a/common/build.rs +++ b/common/build.rs @@ -1,5 +1,5 @@ fn main() -> Result<(), Box> { - tonic_build::configure() + tonic_prost_build::configure() .build_server(true) .file_descriptor_set_path("src/proto/descriptor.bin") .out_dir("src/proto") diff --git a/common/src/proto/komp_ac.adresar.rs b/common/src/proto/komp_ac.adresar.rs index 44fd0ee..59b4969 100644 --- a/common/src/proto/komp_ac.adresar.rs +++ b/common/src/proto/komp_ac.adresar.rs @@ -1,15 +1,15 @@ // This file is @generated by prost-build. -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetAdresarRequest { #[prost(int64, tag = "1")] pub id: i64, } -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteAdresarRequest { #[prost(int64, tag = "1")] pub id: i64, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PostAdresarRequest { #[prost(string, tag = "1")] pub firma: ::prost::alloc::string::String, @@ -42,7 +42,7 @@ pub struct PostAdresarRequest { #[prost(string, tag = "15")] pub fax: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct AdresarResponse { #[prost(int64, tag = "1")] pub id: i64, @@ -77,7 +77,7 @@ pub struct AdresarResponse { #[prost(string, tag = "16")] pub fax: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PutAdresarRequest { #[prost(int64, tag = "1")] pub id: i64, @@ -112,7 +112,7 @@ pub struct PutAdresarRequest { #[prost(string, tag = "16")] pub fax: ::prost::alloc::string::String, } -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteAdresarResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -223,7 +223,7 @@ pub mod adresar_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.adresar.Adresar/PostAdresar", ); @@ -247,7 +247,7 @@ pub mod adresar_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.adresar.Adresar/GetAdresar", ); @@ -271,7 +271,7 @@ pub mod adresar_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.adresar.Adresar/PutAdresar", ); @@ -295,7 +295,7 @@ pub mod adresar_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.adresar.Adresar/DeleteAdresar", ); @@ -319,7 +319,7 @@ pub mod adresar_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.adresar.Adresar/GetAdresarCount", ); @@ -343,7 +343,7 @@ pub mod adresar_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.adresar.Adresar/GetAdresarByPosition", ); @@ -506,7 +506,7 @@ pub mod adresar_server { let inner = self.inner.clone(); let fut = async move { let method = PostAdresarSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -551,7 +551,7 @@ pub mod adresar_server { let inner = self.inner.clone(); let fut = async move { let method = GetAdresarSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -596,7 +596,7 @@ pub mod adresar_server { let inner = self.inner.clone(); let fut = async move { let method = PutAdresarSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -641,7 +641,7 @@ pub mod adresar_server { let inner = self.inner.clone(); let fut = async move { let method = DeleteAdresarSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -686,7 +686,7 @@ pub mod adresar_server { let inner = self.inner.clone(); let fut = async move { let method = GetAdresarCountSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -734,7 +734,7 @@ pub mod adresar_server { let inner = self.inner.clone(); let fut = async move { let method = GetAdresarByPositionSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.auth.rs b/common/src/proto/komp_ac.auth.rs index 8219527..dbe9376 100644 --- a/common/src/proto/komp_ac.auth.rs +++ b/common/src/proto/komp_ac.auth.rs @@ -1,5 +1,5 @@ // This file is @generated by prost-build. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct RegisterRequest { #[prost(string, tag = "1")] pub username: ::prost::alloc::string::String, @@ -12,7 +12,7 @@ pub struct RegisterRequest { #[prost(string, tag = "5")] pub role: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct AuthResponse { /// UUID in string format #[prost(string, tag = "1")] @@ -27,7 +27,7 @@ pub struct AuthResponse { #[prost(string, tag = "4")] pub role: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct LoginRequest { /// Can be username or email #[prost(string, tag = "1")] @@ -35,7 +35,7 @@ pub struct LoginRequest { #[prost(string, tag = "2")] pub password: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct LoginResponse { /// JWT token #[prost(string, tag = "1")] @@ -158,7 +158,7 @@ pub mod auth_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.auth.AuthService/Register", ); @@ -179,7 +179,7 @@ pub mod auth_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.auth.AuthService/Login", ); @@ -318,7 +318,7 @@ pub mod auth_service_server { let inner = self.inner.clone(); let fut = async move { let method = RegisterSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -361,7 +361,7 @@ pub mod auth_service_server { let inner = self.inner.clone(); let fut = async move { let method = LoginSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.common.rs b/common/src/proto/komp_ac.common.rs index 10aa25f..087cbb6 100644 --- a/common/src/proto/komp_ac.common.rs +++ b/common/src/proto/komp_ac.common.rs @@ -1,12 +1,12 @@ // This file is @generated by prost-build. -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct Empty {} -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct CountResponse { #[prost(int64, tag = "1")] pub count: i64, } -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct PositionRequest { #[prost(int64, tag = "1")] pub position: i64, diff --git a/common/src/proto/komp_ac.search.rs b/common/src/proto/komp_ac.search.rs index f023d36..b6ada73 100644 --- a/common/src/proto/komp_ac.search.rs +++ b/common/src/proto/komp_ac.search.rs @@ -1,5 +1,5 @@ // This file is @generated by prost-build. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnConstraint { #[prost(string, tag = "1")] pub column: ::prost::alloc::string::String, @@ -173,7 +173,7 @@ pub mod searcher_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.search.Searcher/Search", ); @@ -306,7 +306,7 @@ pub mod searcher_server { let inner = self.inner.clone(); let fut = async move { let method = SearchSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.search2.rs b/common/src/proto/komp_ac.search2.rs index 496273e..3aa907e 100644 --- a/common/src/proto/komp_ac.search2.rs +++ b/common/src/proto/komp_ac.search2.rs @@ -17,7 +17,7 @@ pub struct Search2Request { #[prost(bool, optional, tag = "7")] pub order_desc: ::core::option::Option, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnFilter { #[prost(string, tag = "1")] pub column_name: ::prost::alloc::string::String, @@ -39,7 +39,7 @@ pub struct Search2Response { } /// Nested message and enum types in `Search2Response`. pub mod search2_response { - #[derive(Clone, PartialEq, ::prost::Message)] + #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct Hit { #[prost(int64, tag = "1")] pub id: i64, @@ -204,7 +204,7 @@ pub mod search2_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.search2.Search2/SearchTable", ); @@ -337,7 +337,7 @@ pub mod search2_server { let inner = self.inner.clone(); let fut = async move { let method = SearchTableSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index aa908ad..addb9a4 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -1,10 +1,10 @@ // This file is @generated by prost-build. /// A single link to another table within the same profile (schema). #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct TableLink { /// Name of an existing table within the same profile to link to. - /// For each link, a "_id" column is created on the new table. + /// For each link, a "\_id" column is created on the new table. /// That column references ""(id) and adds an index automatically. #[prost(string, tag = "1")] pub linked_table_name: ::prost::alloc::string::String, @@ -20,12 +20,12 @@ pub struct TableLink { pub struct PostTableDefinitionRequest { /// Table name to create inside the target profile. /// Must be lowercase, alphanumeric with underscores, - /// start with a letter, and be <= 63 chars. - /// Forbidden names: "id", "deleted", "created_at", or ending in "_id". + /// start with a letter, and be \<= 63 chars. + /// Forbidden names: "id", "deleted", "created_at", or ending in "\_id". #[prost(string, tag = "1")] pub table_name: ::prost::alloc::string::String, /// List of links (foreign keys) to existing tables in the same profile. - /// Each will automatically get a "_id" column and an index. + /// Each will automatically get a "\_id" column and an index. #[prost(message, repeated, tag = "2")] pub links: ::prost::alloc::vec::Vec, /// List of user-defined columns (adds to system/id/fk columns). @@ -33,13 +33,13 @@ pub struct PostTableDefinitionRequest { pub columns: ::prost::alloc::vec::Vec, /// List of column names to be indexed (must match existing user-defined columns). /// Indexes can target only user-defined columns; system columns ("id", "deleted", - /// "created_at") and automatically generated foreign key ("*_id") columns already + /// "created_at") and automatically generated foreign key ("\*\_id") columns already /// have indexes. Requests trying to index those columns are rejected. #[prost(string, repeated, tag = "4")] pub indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, /// Name of profile (Postgres schema) where the table will be created. /// Same naming rules as table_name; cannot collide with reserved schemas - /// like "public", "information_schema", or ones starting with "pg_". + /// like "public", "information_schema", or ones starting with "pg\_". #[prost(string, tag = "5")] pub profile_name: ::prost::alloc::string::String, } @@ -62,22 +62,22 @@ pub struct AddTableColumnsRequest { } /// Describes one user-defined column for a table. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnDefinition { /// Column name that follows the same validation rules as table_name. /// Must be lowercase, start with a letter, no uppercase characters, - /// and cannot be "id", "deleted", "created_at", or end with "_id". + /// and cannot be "id", "deleted", "created_at", or end with "\_id". #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// Logical column type. Supported values (case-insensitive): - /// TEXT / STRING - /// BOOLEAN - /// TIMESTAMP / TIMESTAMPTZ / TIME - /// MONEY (= NUMERIC(14,4)) - /// INTEGER / INT - /// BIGINTEGER / BIGINT - /// DATE - /// DECIMAL(p,s) → NUMERIC(p,s) + /// TEXT / STRING + /// BOOLEAN + /// TIMESTAMP / TIMESTAMPTZ / TIME + /// MONEY (= NUMERIC(14,4)) + /// INTEGER / INT + /// BIGINTEGER / BIGINT + /// DATE + /// DECIMAL(p,s) → NUMERIC(p,s) /// DECIMAL args must be integers (no sign, no dot, no leading zeros); /// s ≤ p and p ≥ 1. #[prost(string, tag = "2")] @@ -85,7 +85,7 @@ pub struct ColumnDefinition { } /// Response after table creation (success + DDL preview). #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct TableDefinitionResponse { /// True if all DB changes and metadata inserts succeeded. #[prost(bool, tag = "1")] @@ -104,7 +104,7 @@ pub struct ProfileTreeResponse { /// Nested message and enum types in `ProfileTreeResponse`. pub mod profile_tree_response { /// Table entry in a profile. - #[derive(Clone, PartialEq, ::prost::Message)] + #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct Table { /// Internal ID from table_definitions.id (metadata record). #[prost(int64, tag = "1")] @@ -128,7 +128,7 @@ pub mod profile_tree_response { } } /// Request to fetch all tables, columns and scripts for a profile. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetProfileDetailsRequest { /// Profile (schema) name to fetch details for. #[prost(string, tag = "1")] @@ -144,7 +144,7 @@ pub struct GetProfileDetailsResponse { } /// Request to fetch recorded column alias rename history for one profile. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetColumnAliasRenameHistoryRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -154,7 +154,7 @@ pub struct GetColumnAliasRenameHistoryRequest { } /// One recorded column alias rename. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnAliasRenameHistoryEntry { #[prost(int64, tag = "1")] pub id: i64, @@ -193,7 +193,7 @@ pub struct TableDetail { pub scripts: ::prost::alloc::vec::Vec, } /// A script that targets a specific column in a table. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ScriptInfo { #[prost(int64, tag = "1")] pub script_id: i64, @@ -208,7 +208,7 @@ pub struct ScriptInfo { } /// Request to rename one user-visible column alias in a table. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct RenameColumnAliasRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -221,7 +221,7 @@ pub struct RenameColumnAliasRequest { } /// Response after renaming one column alias. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct RenameColumnAliasResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -229,7 +229,7 @@ pub struct RenameColumnAliasResponse { pub message: ::prost::alloc::string::String, } /// Request to delete one table definition entirely. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteTableRequest { /// Profile (schema) name owning the table (must exist). #[prost(string, tag = "1")] @@ -240,7 +240,7 @@ pub struct DeleteTableRequest { pub table_name: ::prost::alloc::string::String, } /// Response after table deletion. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteTableResponse { /// True if table and metadata were successfully deleted in one transaction. #[prost(bool, tag = "1")] @@ -362,7 +362,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/PostTableDefinition", ); @@ -393,7 +393,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/AddTableColumns", ); @@ -424,7 +424,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetProfileTree", ); @@ -455,7 +455,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetProfileDetails", ); @@ -485,7 +485,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetColumnAliasRenameHistory", ); @@ -515,7 +515,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/RenameColumnAlias", ); @@ -545,7 +545,7 @@ pub mod table_definition_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/DeleteTable", ); @@ -750,7 +750,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = PostTableDefinitionSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -796,7 +796,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = AddTableColumnsSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -842,7 +842,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = GetProfileTreeSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -888,7 +888,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = GetProfileDetailsSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -942,7 +942,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = GetColumnAliasRenameHistorySvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -988,7 +988,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = RenameColumnAliasSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1033,7 +1033,7 @@ pub mod table_definition_server { let inner = self.inner.clone(); let fut = async move { let method = DeleteTableSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.table_script.rs b/common/src/proto/komp_ac.table_script.rs index 1ab41e3..e35bc47 100644 --- a/common/src/proto/komp_ac.table_script.rs +++ b/common/src/proto/komp_ac.table_script.rs @@ -1,7 +1,7 @@ // This file is @generated by prost-build. /// Request to create or update a script bound to a specific table and column. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PostTableScriptRequest { /// Required. The metadata ID from table_definitions.id that identifies the /// table this script belongs to. The table must exist; its schema determines @@ -12,41 +12,45 @@ pub struct PostTableScriptRequest { /// Must be an existing user-defined column in that table (not a system column). /// System columns are reserved: "id", "deleted", "created_at". /// The column's data type must NOT be one of the prohibited target types: - /// BIGINT, DATE, TIMESTAMPTZ + /// BIGINT, DATE, TIMESTAMPTZ /// Note: BOOLEAN targets are allowed (values are converted to Steel #true/#false). #[prost(string, tag = "2")] pub target_column: ::prost::alloc::string::String, /// Required. The script in the Steel DSL (S-expression style). /// Syntax requirements: - /// - Non-empty, must start with '(' - /// - Balanced parentheses + /// + /// * Non-empty, must start with '(' + /// * Balanced parentheses /// /// Referencing data: - /// - Structured table/column access (enforces link constraints): - /// (steel_get_column "table_name" "column_name") - /// (steel_get_column_with_index "table_name" index "column_name") - /// • index must be a non-negative integer literal - /// • self-references are allowed without links - /// • other tables require an explicit link from the source table - /// (table_definition_links) or the request fails - /// - Raw SQL access (no link required, but still validated): - /// (steel_query_sql "SELECT ...") - /// • Basic checks disallow operations that imply prohibited types, - /// e.g., EXTRACT(…), DATE_PART(…), ::DATE, ::TIMESTAMPTZ, ::BIGINT, CAST(…) - /// - Self variable access in transformed scripts: - /// (get-var "column_name") is treated as referencing the current table + /// + /// * Structured table/column access (enforces link constraints): + /// (steel_get_column "table_name" "column_name") + /// (steel_get_column_with_index "table_name" index "column_name") + /// • index must be a non-negative integer literal + /// • self-references are allowed without links + /// • other tables require an explicit link from the source table + /// (table_definition_links) or the request fails + /// * Raw SQL access (no link required, but still validated): + /// (steel_query_sql "SELECT ...") + /// • Basic checks disallow operations that imply prohibited types, + /// e.g., EXTRACT(…), DATE_PART(…), ::DATE, ::TIMESTAMPTZ, ::BIGINT, CAST(…) + /// * Self variable access in transformed scripts: + /// (get-var "column_name") is treated as referencing the current table /// /// Math operations: - /// - The script is transformed by steel_decimal; supported math forms include: - /// +, -, *, /, ^, **, pow, sqrt, >, <, =, >=, <=, min, max, abs, round, - /// ln, log, log10, exp, sin, cos, tan - /// - Columns of the following types CANNOT be used inside math expressions: - /// BIGINT, TEXT, BOOLEAN, DATE, TIMESTAMPTZ + /// + /// * The script is transformed by steel_decimal; supported math forms include: + /// +, -, \*, /, ^, \*\*, pow, sqrt, >, \<, =, >=, \<=, min, max, abs, round, + /// ln, log, log10, exp, sin, cos, tan + /// * Columns of the following types CANNOT be used inside math expressions: + /// BIGINT, TEXT, BOOLEAN, DATE, TIMESTAMPTZ /// /// Dependency tracking and cycles: - /// - Dependencies are extracted from steel_get_column(_with_index), get-var, - /// and steel_query_sql and stored in script_dependencies with context - /// - Cycles across tables are rejected (self-dependency is allowed) + /// + /// * Dependencies are extracted from steel_get_column(\_with_index), get-var, + /// and steel_query_sql and stored in script_dependencies with context + /// * Cycles across tables are rejected (self-dependency is allowed) #[prost(string, tag = "3")] pub script: ::prost::alloc::string::String, /// Optional. Free-text description stored alongside the script (no functional effect). @@ -55,20 +59,21 @@ pub struct PostTableScriptRequest { } /// Response after creating or updating a script. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct TableScriptResponse { /// The ID of the script record in table_scripts (new or existing on upsert). #[prost(int64, tag = "1")] pub id: i64, /// Human-readable warnings concatenated into a single string. Possible messages: - /// - Warning if the script references itself (may affect first population) - /// - Count of raw SQL queries present - /// - Info about number of structured linked-table accesses - /// - Warning if many dependencies may affect performance + /// + /// * Warning if the script references itself (may affect first population) + /// * Count of raw SQL queries present + /// * Info about number of structured linked-table accesses + /// * Warning if many dependencies may affect performance #[prost(string, tag = "2")] pub warnings: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableScriptsRequest { /// Required. Profile (schema) name. #[prost(string, tag = "1")] @@ -97,7 +102,7 @@ pub struct StoredTableScript { #[prost(message, repeated, tag = "6")] pub dependencies: ::prost::alloc::vec::Vec, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ScriptDependency { #[prost(string, tag = "1")] pub target_table: ::prost::alloc::string::String, @@ -124,15 +129,16 @@ pub mod table_script_client { /// Manages column-computation scripts for user-defined tables. /// Each script belongs to a single table (table_definition_id) and populates /// exactly one target column in that table. The server: - /// - Validates script syntax (non-empty, balanced parentheses, starts with '(') - /// - Validates the target column (exists, not a system column, allowed type) - /// - Validates column/type usage inside math expressions - /// - Validates referenced tables/columns against the schema - /// - Enforces link constraints for structured access (see notes below) - /// - Analyzes dependencies and prevents cycles across the schema - /// - Transforms the script to decimal-safe math (steel_decimal) - /// - Upserts into table_scripts and records dependencies in script_dependencies - /// The whole operation is transactional. + /// + /// * Validates script syntax (non-empty, balanced parentheses, starts with '(') + /// * Validates the target column (exists, not a system column, allowed type) + /// * Validates column/type usage inside math expressions + /// * Validates referenced tables/columns against the schema + /// * Enforces link constraints for structured access (see notes below) + /// * Analyzes dependencies and prevents cycles across the schema + /// * Transforms the script to decimal-safe math (steel_decimal) + /// * Upserts into table_scripts and records dependencies in script_dependencies + /// The whole operation is transactional. #[derive(Debug, Clone)] pub struct TableScriptClient { inner: tonic::client::Grpc, @@ -216,20 +222,21 @@ pub mod table_script_client { /// Create or update a script for a specific table and target column. /// /// Behavior: - /// - Fetches the table by table_definition_id (must exist) - /// - Validates "script" (syntax), "target_column" (exists and type rules), - /// and all referenced tables/columns (must exist in same schema) - /// - Validates math operations: prohibits using certain data types in math - /// - Enforces link constraints for structured table access: - /// • Allowed always: self-references (same table) - /// • Structured access via steel_get_column / steel_get_column_with_index - /// requires an explicit link in table_definition_links - /// • Raw SQL access via steel_query_sql is permitted (still validated) - /// - Detects and rejects circular dependencies across all scripts in the schema - /// (self-references are allowed and not treated as cycles) - /// - Transforms the script to decimal-safe operations (steel_decimal) - /// - UPSERTS into table_scripts on (table_definitions_id, target_column) - /// and saves a normalized dependency list into script_dependencies + /// + /// * Fetches the table by table_definition_id (must exist) + /// * Validates "script" (syntax), "target_column" (exists and type rules), + /// and all referenced tables/columns (must exist in same schema) + /// * Validates math operations: prohibits using certain data types in math + /// * Enforces link constraints for structured table access: + /// • Allowed always: self-references (same table) + /// • Structured access via steel_get_column / steel_get_column_with_index + /// requires an explicit link in table_definition_links + /// • Raw SQL access via steel_query_sql is permitted (still validated) + /// * Detects and rejects circular dependencies across all scripts in the schema + /// (self-references are allowed and not treated as cycles) + /// * Transforms the script to decimal-safe operations (steel_decimal) + /// * UPSERTS into table_scripts on (table_definitions_id, target_column) + /// and saves a normalized dependency list into script_dependencies pub async fn post_table_script( &mut self, request: impl tonic::IntoRequest, @@ -245,7 +252,7 @@ pub mod table_script_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_script.TableScript/PostTableScript", ); @@ -262,10 +269,11 @@ pub mod table_script_client { /// Fetch all stored scripts for a specific table. /// /// Behavior: - /// - Resolves the table from (profile_name, table_name) - /// - Returns the stored, transformed script from table_scripts - /// - Includes normalized dependency metadata from script_dependencies - /// - Returns an empty scripts list when the table has no scripts + /// + /// * Resolves the table from (profile_name, table_name) + /// * Returns the stored, transformed script from table_scripts + /// * Includes normalized dependency metadata from script_dependencies + /// * Returns an empty scripts list when the table has no scripts pub async fn get_table_scripts( &mut self, request: impl tonic::IntoRequest, @@ -281,7 +289,7 @@ pub mod table_script_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_script.TableScript/GetTableScripts", ); @@ -313,20 +321,21 @@ pub mod table_script_server { /// Create or update a script for a specific table and target column. /// /// Behavior: - /// - Fetches the table by table_definition_id (must exist) - /// - Validates "script" (syntax), "target_column" (exists and type rules), - /// and all referenced tables/columns (must exist in same schema) - /// - Validates math operations: prohibits using certain data types in math - /// - Enforces link constraints for structured table access: - /// • Allowed always: self-references (same table) - /// • Structured access via steel_get_column / steel_get_column_with_index - /// requires an explicit link in table_definition_links - /// • Raw SQL access via steel_query_sql is permitted (still validated) - /// - Detects and rejects circular dependencies across all scripts in the schema - /// (self-references are allowed and not treated as cycles) - /// - Transforms the script to decimal-safe operations (steel_decimal) - /// - UPSERTS into table_scripts on (table_definitions_id, target_column) - /// and saves a normalized dependency list into script_dependencies + /// + /// * Fetches the table by table_definition_id (must exist) + /// * Validates "script" (syntax), "target_column" (exists and type rules), + /// and all referenced tables/columns (must exist in same schema) + /// * Validates math operations: prohibits using certain data types in math + /// * Enforces link constraints for structured table access: + /// • Allowed always: self-references (same table) + /// • Structured access via steel_get_column / steel_get_column_with_index + /// requires an explicit link in table_definition_links + /// • Raw SQL access via steel_query_sql is permitted (still validated) + /// * Detects and rejects circular dependencies across all scripts in the schema + /// (self-references are allowed and not treated as cycles) + /// * Transforms the script to decimal-safe operations (steel_decimal) + /// * UPSERTS into table_scripts on (table_definitions_id, target_column) + /// and saves a normalized dependency list into script_dependencies async fn post_table_script( &self, request: tonic::Request, @@ -337,10 +346,11 @@ pub mod table_script_server { /// Fetch all stored scripts for a specific table. /// /// Behavior: - /// - Resolves the table from (profile_name, table_name) - /// - Returns the stored, transformed script from table_scripts - /// - Includes normalized dependency metadata from script_dependencies - /// - Returns an empty scripts list when the table has no scripts + /// + /// * Resolves the table from (profile_name, table_name) + /// * Returns the stored, transformed script from table_scripts + /// * Includes normalized dependency metadata from script_dependencies + /// * Returns an empty scripts list when the table has no scripts async fn get_table_scripts( &self, request: tonic::Request, @@ -352,15 +362,16 @@ pub mod table_script_server { /// Manages column-computation scripts for user-defined tables. /// Each script belongs to a single table (table_definition_id) and populates /// exactly one target column in that table. The server: - /// - Validates script syntax (non-empty, balanced parentheses, starts with '(') - /// - Validates the target column (exists, not a system column, allowed type) - /// - Validates column/type usage inside math expressions - /// - Validates referenced tables/columns against the schema - /// - Enforces link constraints for structured access (see notes below) - /// - Analyzes dependencies and prevents cycles across the schema - /// - Transforms the script to decimal-safe math (steel_decimal) - /// - Upserts into table_scripts and records dependencies in script_dependencies - /// The whole operation is transactional. + /// + /// * Validates script syntax (non-empty, balanced parentheses, starts with '(') + /// * Validates the target column (exists, not a system column, allowed type) + /// * Validates column/type usage inside math expressions + /// * Validates referenced tables/columns against the schema + /// * Enforces link constraints for structured access (see notes below) + /// * Analyzes dependencies and prevents cycles across the schema + /// * Transforms the script to decimal-safe math (steel_decimal) + /// * Upserts into table_scripts and records dependencies in script_dependencies + /// The whole operation is transactional. #[derive(Debug)] pub struct TableScriptServer { inner: Arc, @@ -467,7 +478,7 @@ pub mod table_script_server { let inner = self.inner.clone(); let fut = async move { let method = PostTableScriptSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -512,7 +523,7 @@ pub mod table_script_server { let inner = self.inner.clone(); let fut = async move { let method = GetTableScriptsSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.table_structure.rs b/common/src/proto/komp_ac.table_structure.rs index b460079..06be372 100644 --- a/common/src/proto/komp_ac.table_structure.rs +++ b/common/src/proto/komp_ac.table_structure.rs @@ -1,6 +1,6 @@ // This file is @generated by prost-build. /// Request identifying the profile (schema) and tables to inspect. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableStructureRequest { /// Required. Profile (PostgreSQL schema) name. Must exist in `schemas`. #[prost(string, tag = "1")] @@ -26,24 +26,25 @@ pub struct GetTableStructureResponse { pub struct TableStructureResponse { /// Columns of the physical table, including system columns (id, deleted, /// created_at), user-defined columns, and any foreign-key columns such as - /// "_id". May be empty if the physical table is missing. + /// "\\_id". May be empty if the physical table is missing. #[prost(message, repeated, tag = "1")] pub columns: ::prost::alloc::vec::Vec, } /// One physical column entry as reported by information_schema. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct TableColumn { /// Column name exactly as defined in PostgreSQL. #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// Normalized data type string derived from information_schema: - /// - VARCHAR(n) when udt_name='varchar' with character_maximum_length - /// - CHAR(n) when udt_name='bpchar' with character_maximum_length - /// - NUMERIC(p,s) when udt_name='numeric' with precision and scale - /// - NUMERIC(p) when udt_name='numeric' with precision only - /// - \[\] for array types (udt_name starting with '_', e.g., INT\[\] ) - /// - Otherwise UPPER(udt_name), e.g., TEXT, BIGINT, TIMESTAMPTZ - /// Examples: "TEXT", "BIGINT", "VARCHAR(255)", "TIMESTAMPTZ", "NUMERIC(14,4)" + /// + /// * VARCHAR(n) when udt_name='varchar' with character_maximum_length + /// * CHAR(n) when udt_name='bpchar' with character_maximum_length + /// * NUMERIC(p,s) when udt_name='numeric' with precision and scale + /// * NUMERIC(p) when udt_name='numeric' with precision only + /// * \[\] for array types (udt_name starting with '\_', e.g., INT\[\] ) + /// * Otherwise UPPER(udt_name), e.g., TEXT, BIGINT, TIMESTAMPTZ + /// Examples: "TEXT", "BIGINT", "VARCHAR(255)", "TIMESTAMPTZ", "NUMERIC(14,4)" #[prost(string, tag = "2")] pub data_type: ::prost::alloc::string::String, /// True if information_schema reports the column as nullable. @@ -68,10 +69,11 @@ pub mod table_structure_service_client { /// Introspects the physical PostgreSQL tables for one or more logical tables /// (defined in table_definitions) and returns their column structures. /// The server validates that: - /// - The profile (schema) exists in `schemas` - /// - Every table is defined for that profile in `table_definitions` - /// It then queries information_schema for the physical tables and returns - /// normalized column metadata. + /// + /// * The profile (schema) exists in `schemas` + /// * Every table is defined for that profile in `table_definitions` + /// It then queries information_schema for the physical tables and returns + /// normalized column metadata. #[derive(Debug, Clone)] pub struct TableStructureServiceClient { inner: tonic::client::Grpc, @@ -156,12 +158,13 @@ pub mod table_structure_service_client { /// nullability, primary key flag) for one or more tables in a profile. /// /// Behavior: - /// - NOT_FOUND if profile doesn't exist in `schemas` - /// - NOT_FOUND if any table is not defined for that profile in `table_definitions` - /// - Queries information_schema.columns ordered by ordinal position - /// - Normalizes data_type text (details under TableColumn.data_type) - /// - Returns an error if any validated table has no visible columns in - /// information_schema (e.g., physical table missing) + /// + /// * NOT_FOUND if profile doesn't exist in `schemas` + /// * NOT_FOUND if any table is not defined for that profile in `table_definitions` + /// * Queries information_schema.columns ordered by ordinal position + /// * Normalizes data_type text (details under TableColumn.data_type) + /// * Returns an error if any validated table has no visible columns in + /// information_schema (e.g., physical table missing) pub async fn get_table_structure( &mut self, request: impl tonic::IntoRequest, @@ -177,7 +180,7 @@ pub mod table_structure_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_structure.TableStructureService/GetTableStructure", ); @@ -210,12 +213,13 @@ pub mod table_structure_service_server { /// nullability, primary key flag) for one or more tables in a profile. /// /// Behavior: - /// - NOT_FOUND if profile doesn't exist in `schemas` - /// - NOT_FOUND if any table is not defined for that profile in `table_definitions` - /// - Queries information_schema.columns ordered by ordinal position - /// - Normalizes data_type text (details under TableColumn.data_type) - /// - Returns an error if any validated table has no visible columns in - /// information_schema (e.g., physical table missing) + /// + /// * NOT_FOUND if profile doesn't exist in `schemas` + /// * NOT_FOUND if any table is not defined for that profile in `table_definitions` + /// * Queries information_schema.columns ordered by ordinal position + /// * Normalizes data_type text (details under TableColumn.data_type) + /// * Returns an error if any validated table has no visible columns in + /// information_schema (e.g., physical table missing) async fn get_table_structure( &self, request: tonic::Request, @@ -227,10 +231,11 @@ pub mod table_structure_service_server { /// Introspects the physical PostgreSQL tables for one or more logical tables /// (defined in table_definitions) and returns their column structures. /// The server validates that: - /// - The profile (schema) exists in `schemas` - /// - Every table is defined for that profile in `table_definitions` - /// It then queries information_schema for the physical tables and returns - /// normalized column metadata. + /// + /// * The profile (schema) exists in `schemas` + /// * Every table is defined for that profile in `table_definitions` + /// It then queries information_schema for the physical tables and returns + /// normalized column metadata. #[derive(Debug)] pub struct TableStructureServiceServer { inner: Arc, @@ -342,7 +347,7 @@ pub mod table_structure_service_server { let inner = self.inner.clone(); let fut = async move { let method = GetTableStructureSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.table_validation.rs b/common/src/proto/komp_ac.table_validation.rs index 9357a51..3ff5d10 100644 --- a/common/src/proto/komp_ac.table_validation.rs +++ b/common/src/proto/komp_ac.table_validation.rs @@ -1,6 +1,6 @@ // This file is @generated by prost-build. /// Request validation rules for a table -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableValidationRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -48,7 +48,7 @@ pub struct FieldValidation { /// Character limit validation (Validation 1). /// These rules map directly to canvas CharacterLimits. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct CharacterLimits { /// When zero, the field is considered "not set". If both min/max are zero, /// the server should avoid sending this FieldValidation (no validation). @@ -68,7 +68,7 @@ pub struct CharacterLimits { /// This is not a validation rule by itself. It exists so clients can render and /// navigate masked input while still storing raw values server-side. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DisplayMask { /// e.g., "(###) ###-####" or "####-##-##" #[prost(string, tag = "1")] @@ -76,7 +76,7 @@ pub struct DisplayMask { /// e.g., "#" #[prost(string, tag = "2")] pub input_char: ::prost::alloc::string::String, - /// e.g., "_" + /// e.g., "\_" #[prost(string, optional, tag = "3")] pub template_char: ::core::option::Option<::prost::alloc::string::String>, } @@ -84,7 +84,7 @@ pub struct DisplayMask { /// This exists instead of a string syntax like "0-3" so the server can validate /// the structure directly and clients do not need to parse a DSL. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PatternPosition { #[prost(enumeration = "PatternPositionKind", tag = "1")] pub kind: i32, @@ -100,7 +100,7 @@ pub struct PatternPosition { /// What type of character constraint a pattern rule applies. /// This mirrors the typed character filters used by canvas. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct CharacterConstraint { #[prost(enumeration = "CharacterConstraintKind", tag = "1")] pub kind: i32, @@ -116,7 +116,7 @@ pub struct CharacterConstraint { } /// One position-based validation rule, similar to canvas PositionFilter. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PatternRule { #[prost(message, optional, tag = "1")] pub position: ::core::option::Option, @@ -126,7 +126,7 @@ pub struct PatternRule { /// Exact-value whitelist configuration. /// This maps to canvas AllowedValues semantics. #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct AllowedValues { #[prost(string, repeated, tag = "1")] pub values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, @@ -159,7 +159,7 @@ pub struct UpdateFieldValidationRequest { pub validation: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct UpdateFieldValidationResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -178,7 +178,7 @@ pub struct ReplaceTableValidationRequest { pub fields: ::prost::alloc::vec::Vec, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ReplaceTableValidationResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -246,7 +246,7 @@ pub struct UpsertValidationRuleRequest { pub rule: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct UpsertValidationRuleResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -254,7 +254,7 @@ pub struct UpsertValidationRuleResponse { pub message: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ListValidationRulesRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -266,7 +266,7 @@ pub struct ListValidationRulesResponse { pub rules: ::prost::alloc::vec::Vec, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteValidationRuleRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -274,7 +274,7 @@ pub struct DeleteValidationRuleRequest { pub name: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteValidationRuleResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -290,7 +290,7 @@ pub struct UpsertValidationSetRequest { pub set: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct UpsertValidationSetResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -298,7 +298,7 @@ pub struct UpsertValidationSetResponse { pub message: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ListValidationSetsRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -310,7 +310,7 @@ pub struct ListValidationSetsResponse { pub sets: ::prost::alloc::vec::Vec, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteValidationSetRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -318,7 +318,7 @@ pub struct DeleteValidationSetRequest { pub name: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteValidationSetResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -326,7 +326,7 @@ pub struct DeleteValidationSetResponse { pub message: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ApplyValidationSetRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -348,7 +348,7 @@ pub struct ApplyValidationSetResponse { pub validation: ::core::option::Option, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct LockFieldValidationRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, @@ -358,7 +358,7 @@ pub struct LockFieldValidationRequest { pub data_key: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct LockFieldValidationResponse { #[prost(bool, tag = "1")] pub success: bool, @@ -594,7 +594,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/GetTableValidation", ); @@ -624,7 +624,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/UpdateFieldValidation", ); @@ -654,7 +654,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/ReplaceTableValidation", ); @@ -684,7 +684,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/UpsertValidationRule", ); @@ -713,7 +713,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/ListValidationRules", ); @@ -742,7 +742,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/DeleteValidationRule", ); @@ -772,7 +772,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/UpsertValidationSet", ); @@ -801,7 +801,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/ListValidationSets", ); @@ -830,7 +830,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/DeleteValidationSet", ); @@ -860,7 +860,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/ApplyValidationSet", ); @@ -890,7 +890,7 @@ pub mod table_validation_service_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_validation.TableValidationService/LockFieldValidation", ); @@ -1115,7 +1115,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = GetTableValidationSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1166,7 +1166,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = UpdateFieldValidationSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1217,7 +1217,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = ReplaceTableValidationSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1268,7 +1268,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = UpsertValidationRuleSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1317,7 +1317,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = ListValidationRulesSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1368,7 +1368,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = DeleteValidationRuleSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1417,7 +1417,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = UpsertValidationSetSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1466,7 +1466,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = ListValidationSetsSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1515,7 +1515,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = DeleteValidationSetSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1564,7 +1564,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = ApplyValidationSetSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1613,7 +1613,7 @@ pub mod table_validation_service_server { let inner = self.inner.clone(); let fut = async move { let method = LockFieldValidationSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.tables_data.rs b/common/src/proto/komp_ac.tables_data.rs index 55931fe..5d39312 100644 --- a/common/src/proto/komp_ac.tables_data.rs +++ b/common/src/proto/komp_ac.tables_data.rs @@ -13,29 +13,33 @@ pub struct PostTableDataRequest { /// Required. Key-value data for columns to insert. /// /// Allowed keys: - /// - User-defined columns from the table definition - /// - System/FK columns: - /// • "deleted" (BOOLEAN), optional; default FALSE if not provided - /// • "_id" (BIGINT) for each table link + /// + /// * User-defined columns from the table definition + /// * System/FK columns: + /// • "deleted" (BOOLEAN), optional; default FALSE if not provided + /// • "\\_id" (BIGINT) for each table link /// /// Type expectations by SQL type: - /// - TEXT: string value; empty string is treated as NULL - /// - BOOLEAN: bool value - /// - TIMESTAMPTZ: ISO 8601/RFC 3339 string (parsed to TIMESTAMPTZ) - /// - INTEGER: number with no fractional part and within i32 range - /// - BIGINT: number with no fractional part and within i64 range - /// - NUMERIC(p,s): string representation only; empty string becomes NULL - /// (numbers for NUMERIC are rejected to avoid precision loss) + /// + /// * TEXT: string value; empty string is treated as NULL + /// * BOOLEAN: bool value + /// * TIMESTAMPTZ: ISO 8601/RFC 3339 string (parsed to TIMESTAMPTZ) + /// * INTEGER: number with no fractional part and within i32 range + /// * BIGINT: number with no fractional part and within i64 range + /// * NUMERIC(p,s): string representation only; empty string becomes NULL + /// (numbers for NUMERIC are rejected to avoid precision loss) /// /// Script validation rules: - /// - If a script exists for a target column, that column MUST be present here, - /// and its provided value MUST equal the script’s computed value (type-aware - /// comparison, e.g., decimals are compared numerically). + /// + /// * If a script exists for a target column, that column MUST be present here, + /// and its provided value MUST equal the script’s computed value (type-aware + /// comparison, e.g., decimals are compared numerically). /// /// Notes: - /// - Unknown/invalid column names are rejected - /// - Some application-specific validations may apply (e.g., max length for - /// certain fields like "telefon") + /// + /// * Unknown/invalid column names are rejected + /// * Some application-specific validations may apply (e.g., max length for + /// certain fields like "telefon") #[prost(map = "string, message", tag = "3")] pub data: ::std::collections::HashMap< ::prost::alloc::string::String, @@ -43,7 +47,7 @@ pub struct PostTableDataRequest { >, } /// Insert response. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PostTableDataResponse { /// True if the insert succeeded. #[prost(bool, tag = "1")] @@ -106,11 +110,12 @@ pub struct PutTableDataRequest { /// Required. Columns to update (same typing rules as PostTableDataRequest.data). /// /// Special script rules: - /// - If a script targets column X and X is included here, the value for X must - /// equal the script’s result (type-aware). - /// - If X is not included here but the update would cause the script’s result - /// to change compared to the current stored value, the update is rejected with - /// FAILED_PRECONDITION, instructing the caller to include X explicitly. + /// + /// * If a script targets column X and X is included here, the value for X must + /// equal the script’s result (type-aware). + /// * If X is not included here but the update would cause the script’s result + /// to change compared to the current stored value, the update is rejected with + /// FAILED_PRECONDITION, instructing the caller to include X explicitly. /// /// Passing an empty map results in a no-op success response. #[prost(map = "string, message", tag = "4")] @@ -120,7 +125,7 @@ pub struct PutTableDataRequest { >, } /// Update response. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PutTableDataResponse { /// True if the update succeeded (or no-op on empty data). #[prost(bool, tag = "1")] @@ -133,7 +138,7 @@ pub struct PutTableDataResponse { pub updated_id: i64, } /// Soft-delete a single row. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteTableDataRequest { /// Required. Profile (schema) name. #[prost(string, tag = "1")] @@ -146,14 +151,14 @@ pub struct DeleteTableDataRequest { pub record_id: i64, } /// Soft-delete response. -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteTableDataResponse { /// True if a row was marked deleted (id existed and was not already deleted). #[prost(bool, tag = "1")] pub success: bool, } /// Fetch a single non-deleted row by id. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableDataRequest { /// Required. Profile (schema) name. #[prost(string, tag = "1")] @@ -169,9 +174,10 @@ pub struct GetTableDataRequest { #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetTableDataResponse { /// Map of column_name → stringified value for: - /// - id, deleted - /// - all user-defined columns from the table definition - /// - FK columns named "_id" for each table link + /// + /// * id, deleted + /// * all user-defined columns from the table definition + /// * FK columns named "\\_id" for each table link /// /// All values are returned as TEXT via col::TEXT and COALESCEed to empty string /// (NULL becomes ""). The row is returned only if deleted = FALSE. @@ -182,7 +188,7 @@ pub struct GetTableDataResponse { >, } /// Count non-deleted rows. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableDataCountRequest { /// Required. Profile (schema) name. #[prost(string, tag = "1")] @@ -192,7 +198,7 @@ pub struct GetTableDataCountRequest { pub table_name: ::prost::alloc::string::String, } /// Fetch by ordinal position among non-deleted rows (1-based). -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableDataByPositionRequest { /// Required. Profile (schema) name. #[prost(string, tag = "1")] @@ -303,13 +309,14 @@ pub mod tables_data_client { /// Insert a new row into a table with strict type binding and script validation. /// /// Behavior: - /// - Validates that profile (schema) exists and table is defined for it - /// - Validates provided columns exist (user-defined or allowed system/FK columns) - /// - For columns targeted by scripts in this table, the client MUST provide the - /// value, and it MUST equal the script’s calculated value (compared type-safely) - /// - Binds values with correct SQL types, rejects invalid formats/ranges - /// - Inserts the row and returns the new id; queues search indexing (best effort) - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates that profile (schema) exists and table is defined for it + /// * Validates provided columns exist (user-defined or allowed system/FK columns) + /// * For columns targeted by scripts in this table, the client MUST provide the + /// value, and it MUST equal the script’s calculated value (compared type-safely) + /// * Binds values with correct SQL types, rejects invalid formats/ranges + /// * Inserts the row and returns the new id; queues search indexing (best effort) + /// * If the physical table is missing but the definition exists, returns INTERNAL pub async fn post_table_data( &mut self, request: impl tonic::IntoRequest, @@ -325,7 +332,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/PostTableData", ); @@ -339,12 +346,13 @@ pub mod tables_data_client { /// Insert multiple rows by applying PostTableData behavior to each row. /// /// Behavior: - /// - Accepts 1..10,000 rows in one gRPC request - /// - Processes rows in request order - /// - Each row is inserted through the same validation, script execution, - /// typed binding, database insert, and indexing path as PostTableData - /// - Stops at the first failing row and returns that row's gRPC error code - /// with row index context; rows inserted before the failure remain inserted + /// + /// * Accepts 1..10,000 rows in one gRPC request + /// * Processes rows in request order + /// * Each row is inserted through the same validation, script execution, + /// typed binding, database insert, and indexing path as PostTableData + /// * Stops at the first failing row and returns that row's gRPC error code + /// with row index context; rows inserted before the failure remain inserted pub async fn post_table_data_bulk( &mut self, request: impl tonic::IntoRequest, @@ -360,7 +368,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/PostTableDataBulk", ); @@ -377,14 +385,15 @@ pub mod tables_data_client { /// Update existing row data with strict type binding and script validation. /// /// Behavior: - /// - Validates profile and table, and that the record exists - /// - If request data is empty, returns success without changing the row - /// - For columns targeted by scripts: - /// • If included in update, provided value must equal the script result - /// • If not included, update must not cause the script result to differ - /// from the current stored value; otherwise FAILED_PRECONDITION is returned - /// - Binds values with correct SQL types; rejects invalid formats/ranges - /// - Updates the row and returns the id; queues search indexing (best effort) + /// + /// * Validates profile and table, and that the record exists + /// * If request data is empty, returns success without changing the row + /// * For columns targeted by scripts: + /// • If included in update, provided value must equal the script result + /// • If not included, update must not cause the script result to differ + /// from the current stored value; otherwise FAILED_PRECONDITION is returned + /// * Binds values with correct SQL types; rejects invalid formats/ranges + /// * Updates the row and returns the id; queues search indexing (best effort) pub async fn put_table_data( &mut self, request: impl tonic::IntoRequest, @@ -400,7 +409,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/PutTableData", ); @@ -414,10 +423,11 @@ pub mod tables_data_client { /// Soft-delete a single record (sets deleted = true) if it exists and is not already deleted. /// /// Behavior: - /// - Validates profile and table definition - /// - Updates only rows with deleted = false - /// - success = true means a row was actually changed; false means nothing to delete - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates profile and table definition + /// * Updates only rows with deleted = false + /// * success = true means a row was actually changed; false means nothing to delete + /// * If the physical table is missing but the definition exists, returns INTERNAL pub async fn delete_table_data( &mut self, request: impl tonic::IntoRequest, @@ -433,7 +443,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/DeleteTableData", ); @@ -447,12 +457,13 @@ pub mod tables_data_client { /// Fetch a single non-deleted row by id as textified values. /// /// Behavior: - /// - Validates profile and table definition - /// - Returns all columns as strings (COALESCE(col::TEXT, '') AS col) - /// including: id, deleted, all user-defined columns, and FK columns - /// named "_id" for each table link - /// - Fails with NOT_FOUND if record does not exist or is soft-deleted - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates profile and table definition + /// * Returns all columns as strings (COALESCE(col::TEXT, '') AS col) + /// including: id, deleted, all user-defined columns, and FK columns + /// named "\\_id" for each table link + /// * Fails with NOT_FOUND if record does not exist or is soft-deleted + /// * If the physical table is missing but the definition exists, returns INTERNAL pub async fn get_table_data( &mut self, request: impl tonic::IntoRequest, @@ -468,7 +479,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/GetTableData", ); @@ -482,9 +493,10 @@ pub mod tables_data_client { /// Count non-deleted rows in a table. /// /// Behavior: - /// - Validates profile and table definition - /// - Returns komp_ac.common.CountResponse.count with rows where deleted = FALSE - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates profile and table definition + /// * Returns komp_ac.common.CountResponse.count with rows where deleted = FALSE + /// * If the physical table is missing but the definition exists, returns INTERNAL pub async fn get_table_data_count( &mut self, request: impl tonic::IntoRequest, @@ -500,7 +512,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/GetTableDataCount", ); @@ -517,9 +529,10 @@ pub mod tables_data_client { /// Fetch the N-th non-deleted row by id order (1-based), then return its full data. /// /// Behavior: - /// - position is 1-based (position = 1 → first row by id ASC with deleted = FALSE) - /// - Returns NOT_FOUND if position is out of bounds - /// - Otherwise identical to GetTableData for the selected id + /// + /// * position is 1-based (position = 1 → first row by id ASC with deleted = FALSE) + /// * Returns NOT_FOUND if position is out of bounds + /// * Otherwise identical to GetTableData for the selected id pub async fn get_table_data_by_position( &mut self, request: impl tonic::IntoRequest, @@ -535,7 +548,7 @@ pub mod tables_data_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.tables_data.TablesData/GetTableDataByPosition", ); @@ -567,13 +580,14 @@ pub mod tables_data_server { /// Insert a new row into a table with strict type binding and script validation. /// /// Behavior: - /// - Validates that profile (schema) exists and table is defined for it - /// - Validates provided columns exist (user-defined or allowed system/FK columns) - /// - For columns targeted by scripts in this table, the client MUST provide the - /// value, and it MUST equal the script’s calculated value (compared type-safely) - /// - Binds values with correct SQL types, rejects invalid formats/ranges - /// - Inserts the row and returns the new id; queues search indexing (best effort) - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates that profile (schema) exists and table is defined for it + /// * Validates provided columns exist (user-defined or allowed system/FK columns) + /// * For columns targeted by scripts in this table, the client MUST provide the + /// value, and it MUST equal the script’s calculated value (compared type-safely) + /// * Binds values with correct SQL types, rejects invalid formats/ranges + /// * Inserts the row and returns the new id; queues search indexing (best effort) + /// * If the physical table is missing but the definition exists, returns INTERNAL async fn post_table_data( &self, request: tonic::Request, @@ -584,12 +598,13 @@ pub mod tables_data_server { /// Insert multiple rows by applying PostTableData behavior to each row. /// /// Behavior: - /// - Accepts 1..10,000 rows in one gRPC request - /// - Processes rows in request order - /// - Each row is inserted through the same validation, script execution, - /// typed binding, database insert, and indexing path as PostTableData - /// - Stops at the first failing row and returns that row's gRPC error code - /// with row index context; rows inserted before the failure remain inserted + /// + /// * Accepts 1..10,000 rows in one gRPC request + /// * Processes rows in request order + /// * Each row is inserted through the same validation, script execution, + /// typed binding, database insert, and indexing path as PostTableData + /// * Stops at the first failing row and returns that row's gRPC error code + /// with row index context; rows inserted before the failure remain inserted async fn post_table_data_bulk( &self, request: tonic::Request, @@ -600,14 +615,15 @@ pub mod tables_data_server { /// Update existing row data with strict type binding and script validation. /// /// Behavior: - /// - Validates profile and table, and that the record exists - /// - If request data is empty, returns success without changing the row - /// - For columns targeted by scripts: - /// • If included in update, provided value must equal the script result - /// • If not included, update must not cause the script result to differ - /// from the current stored value; otherwise FAILED_PRECONDITION is returned - /// - Binds values with correct SQL types; rejects invalid formats/ranges - /// - Updates the row and returns the id; queues search indexing (best effort) + /// + /// * Validates profile and table, and that the record exists + /// * If request data is empty, returns success without changing the row + /// * For columns targeted by scripts: + /// • If included in update, provided value must equal the script result + /// • If not included, update must not cause the script result to differ + /// from the current stored value; otherwise FAILED_PRECONDITION is returned + /// * Binds values with correct SQL types; rejects invalid formats/ranges + /// * Updates the row and returns the id; queues search indexing (best effort) async fn put_table_data( &self, request: tonic::Request, @@ -618,10 +634,11 @@ pub mod tables_data_server { /// Soft-delete a single record (sets deleted = true) if it exists and is not already deleted. /// /// Behavior: - /// - Validates profile and table definition - /// - Updates only rows with deleted = false - /// - success = true means a row was actually changed; false means nothing to delete - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates profile and table definition + /// * Updates only rows with deleted = false + /// * success = true means a row was actually changed; false means nothing to delete + /// * If the physical table is missing but the definition exists, returns INTERNAL async fn delete_table_data( &self, request: tonic::Request, @@ -632,12 +649,13 @@ pub mod tables_data_server { /// Fetch a single non-deleted row by id as textified values. /// /// Behavior: - /// - Validates profile and table definition - /// - Returns all columns as strings (COALESCE(col::TEXT, '') AS col) - /// including: id, deleted, all user-defined columns, and FK columns - /// named "_id" for each table link - /// - Fails with NOT_FOUND if record does not exist or is soft-deleted - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates profile and table definition + /// * Returns all columns as strings (COALESCE(col::TEXT, '') AS col) + /// including: id, deleted, all user-defined columns, and FK columns + /// named "\\_id" for each table link + /// * Fails with NOT_FOUND if record does not exist or is soft-deleted + /// * If the physical table is missing but the definition exists, returns INTERNAL async fn get_table_data( &self, request: tonic::Request, @@ -648,9 +666,10 @@ pub mod tables_data_server { /// Count non-deleted rows in a table. /// /// Behavior: - /// - Validates profile and table definition - /// - Returns komp_ac.common.CountResponse.count with rows where deleted = FALSE - /// - If the physical table is missing but the definition exists, returns INTERNAL + /// + /// * Validates profile and table definition + /// * Returns komp_ac.common.CountResponse.count with rows where deleted = FALSE + /// * If the physical table is missing but the definition exists, returns INTERNAL async fn get_table_data_count( &self, request: tonic::Request, @@ -661,9 +680,10 @@ pub mod tables_data_server { /// Fetch the N-th non-deleted row by id order (1-based), then return its full data. /// /// Behavior: - /// - position is 1-based (position = 1 → first row by id ASC with deleted = FALSE) - /// - Returns NOT_FOUND if position is out of bounds - /// - Otherwise identical to GetTableData for the selected id + /// + /// * position is 1-based (position = 1 → first row by id ASC with deleted = FALSE) + /// * Returns NOT_FOUND if position is out of bounds + /// * Otherwise identical to GetTableData for the selected id async fn get_table_data_by_position( &self, request: tonic::Request, @@ -783,7 +803,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = PostTableDataSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -829,7 +849,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = PostTableDataBulkSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -874,7 +894,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = PutTableDataSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -919,7 +939,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = DeleteTableDataSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -964,7 +984,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = GetTableDataSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1010,7 +1030,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = GetTableDataCountSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -1059,7 +1079,7 @@ pub mod tables_data_server { let inner = self.inner.clone(); let fut = async move { let method = GetTableDataByPositionSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/common/src/proto/komp_ac.uctovnictvo.rs b/common/src/proto/komp_ac.uctovnictvo.rs index 9148405..ce18205 100644 --- a/common/src/proto/komp_ac.uctovnictvo.rs +++ b/common/src/proto/komp_ac.uctovnictvo.rs @@ -1,5 +1,5 @@ // This file is @generated by prost-build. -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PostUctovnictvoRequest { #[prost(int64, tag = "1")] pub adresar_id: i64, @@ -25,7 +25,7 @@ pub struct PostUctovnictvoRequest { #[prost(string, tag = "11")] pub firma: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct UctovnictvoResponse { #[prost(int64, tag = "1")] pub id: i64, @@ -52,7 +52,7 @@ pub struct UctovnictvoResponse { #[prost(string, tag = "12")] pub firma: ::prost::alloc::string::String, } -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PutUctovnictvoRequest { #[prost(int64, tag = "1")] pub id: i64, @@ -79,7 +79,7 @@ pub struct PutUctovnictvoRequest { #[prost(string, tag = "12")] pub firma: ::prost::alloc::string::String, } -#[derive(Clone, Copy, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetUctovnictvoRequest { #[prost(int64, tag = "1")] pub id: i64, @@ -190,7 +190,7 @@ pub mod uctovnictvo_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.uctovnictvo.Uctovnictvo/PostUctovnictvo", ); @@ -216,7 +216,7 @@ pub mod uctovnictvo_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.uctovnictvo.Uctovnictvo/GetUctovnictvo", ); @@ -242,7 +242,7 @@ pub mod uctovnictvo_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.uctovnictvo.Uctovnictvo/GetUctovnictvoCount", ); @@ -271,7 +271,7 @@ pub mod uctovnictvo_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.uctovnictvo.Uctovnictvo/GetUctovnictvoByPosition", ); @@ -300,7 +300,7 @@ pub mod uctovnictvo_client { format!("Service was not ready: {}", e.into()), ) })?; - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.uctovnictvo.Uctovnictvo/PutUctovnictvo", ); @@ -468,7 +468,7 @@ pub mod uctovnictvo_server { let inner = self.inner.clone(); let fut = async move { let method = PostUctovnictvoSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -513,7 +513,7 @@ pub mod uctovnictvo_server { let inner = self.inner.clone(); let fut = async move { let method = GetUctovnictvoSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -559,7 +559,7 @@ pub mod uctovnictvo_server { let inner = self.inner.clone(); let fut = async move { let method = GetUctovnictvoCountSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -610,7 +610,7 @@ pub mod uctovnictvo_server { let inner = self.inner.clone(); let fut = async move { let method = GetUctovnictvoByPositionSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, @@ -655,7 +655,7 @@ pub mod uctovnictvo_server { let inner = self.inner.clone(); let fut = async move { let method = PutUctovnictvoSvc(inner); - let codec = tonic::codec::ProstCodec::default(); + let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, diff --git a/search/Cargo.toml b/search/Cargo.toml index f769f12..6de946f 100644 --- a/search/Cargo.toml +++ b/search/Cargo.toml @@ -15,5 +15,5 @@ tracing = { workspace = true } tantivy = { workspace = true } common = { path = "../common" } -tonic-reflection = "0.13.1" -sqlx = { version = "0.8.6", features = ["postgres"] } +tonic-reflection = "0.14.6" +sqlx = { version = "0.9.0", features = ["postgres"] } diff --git a/search/src/lib.rs b/search/src/lib.rs index 50f9ca4..7bc5428 100644 --- a/search/src/lib.rs +++ b/search/src/lib.rs @@ -6,10 +6,10 @@ use std::sync::{Arc, Mutex}; use common::proto::komp_ac::search::searcher_server::Searcher; pub use common::proto::komp_ac::search::searcher_server::SearcherServer; -use common::proto::komp_ac::search::{search_response::Hit, SearchRequest, SearchResponse}; -use common::search::{register_tokenizers, search_index_path, SchemaFields}; -use query_builder::{build_master_query, ConstraintMode, SearchConstraint}; -use sqlx::{PgPool, Row}; +use common::proto::komp_ac::search::{SearchRequest, SearchResponse, search_response::Hit}; +use common::search::{SchemaFields, register_tokenizers, search_index_path}; +use query_builder::{ConstraintMode, SearchConstraint, build_master_query}; +use sqlx::{AssertSqlSafe, PgPool, Row}; use tantivy::collector::TopDocs; use tantivy::schema::Value; use tantivy::{Index, IndexReader, ReloadPolicy, TantivyDocument}; @@ -112,7 +112,6 @@ impl SearcherService { Ok(Response::new(SearchResponse { hits })) } - } struct ProfileIndex { @@ -322,7 +321,7 @@ async fn fetch_latest_rows( qualify_profile_table(profile_name, table_name) ); - let rows = sqlx::query(&sql) + let rows = sqlx::query(AssertSqlSafe(sql)) .bind(limit as i64) .fetch_all(pool) .await @@ -362,7 +361,7 @@ async fn run_search( let searcher = profile.reader.searcher(); let top_docs = searcher - .search(&*master_query, &TopDocs::with_limit(limit)) + .search(&*master_query, &TopDocs::with_limit(limit).order_by_score()) .map_err(|e| Status::internal(format!("Search failed: {}", e)))?; if top_docs.is_empty() { @@ -409,7 +408,7 @@ async fn run_search( qualify_profile_table(profile_name, &table_name) ); - let rows = sqlx::query(&sql) + let rows = sqlx::query(AssertSqlSafe(sql)) .bind(&pg_ids) .fetch_all(pool) .await diff --git a/server b/server index 1866f76..61ae042 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 1866f7694ac6a53bb46dc47f79b2cb5087506a10 +Subproject commit 61ae042932a5be1ad3124d01c29e253e25c87c05