diff --git a/Cargo.lock b/Cargo.lock index 66073b9329..eb17cfa573 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,7 +77,7 @@ dependencies = [ "flate2", "foldhash", "futures-core", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "httparse", "httpdate", @@ -87,7 +87,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand 0.9.1", + "rand 0.9.2", "sha1", "smallvec", "tokio", @@ -103,7 +103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -141,7 +141,7 @@ dependencies = [ "parse-size", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -182,7 +182,7 @@ dependencies = [ "futures-core", "futures-util", "mio", - "socket2", + "socket2 0.5.10", "tokio", "tracing", ] @@ -244,7 +244,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2", + "socket2 0.5.10", "time", "tracing", "url", @@ -259,7 +259,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -302,9 +302,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "ahash" @@ -341,9 +341,12 @@ dependencies = [ [[package]] name = "aligned-vec" -version = "0.5.0" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" +dependencies = [ + "equator", +] [[package]] name = "alloc-no-stdlib" @@ -383,9 +386,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -398,37 +401,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] @@ -454,7 +457,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -505,12 +508,15 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.1", + "rand 0.9.2", "raw-window-handle", "serde", "serde_repr", "tokio", "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", "zbus", ] @@ -520,7 +526,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -539,9 +545,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -551,12 +557,12 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.25" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40f6024f3f856663b45fd0c9b6f2024034a702f453549449e0d84a305900dad4" +checksum = "ddb939d66e4ae03cee6091612804ba446b12878410cfa17f785f4dd67d4014e8" dependencies = [ "brotli", - "bzip2 0.6.0", + "bzip2", "deflate64", "flate2", "futures-core", @@ -577,69 +583,67 @@ dependencies = [ "async-task", "concurrent-queue", "fastrand 2.3.0", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "pin-project-lite", "slab", ] [[package]] name = "async-fs" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" dependencies = [ "async-lock", "blocking", - "futures-lite 2.6.0", + "futures-lite 2.6.1", ] [[package]] name = "async-io" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" dependencies = [ "async-lock", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "parking", "polling", - "rustix 0.38.44", + "rustix 1.0.8", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] [[package]] name = "async-process" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-io", "async-lock", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.4.0", - "futures-lite 2.6.0", - "rustix 0.38.44", - "tracing", + "event-listener 5.4.1", + "futures-lite 2.6.1", + "rustix 1.0.8", ] [[package]] @@ -650,14 +654,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "async-signal" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" dependencies = [ "async-io", "async-lock", @@ -665,10 +669,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.44", + "rustix 1.0.8", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -690,7 +694,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -731,14 +735,14 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "async-tungstenite" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0f7efedeac57d9b26170f72965ecfd31473ca52ca7a64e925b0b6f5f079886" +checksum = "e308e9866b891743e3fdf9dfd6b57f85c5062ca01ce4fed6f393e76eb5accea4" dependencies = [ "atomic-waker", "futures-core", @@ -751,7 +755,7 @@ dependencies = [ "tokio", "tokio-rustls 0.26.2", "tungstenite", - "webpki-roots 0.26.11", + "webpki-roots 1.0.2", ] [[package]] @@ -761,7 +765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37672978ae0febce7516ae0a85b53e6185159a9a28787391eb63fc44ec36037d" dependencies = [ "async-fs", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "thiserror 2.0.12", ] @@ -774,7 +778,7 @@ dependencies = [ "async-compression", "chrono", "crc32fast", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "pin-project", "thiserror 1.0.69", "tokio", @@ -827,7 +831,7 @@ checksum = "07a9b245ba0739fc90935094c29adbaee3f977218b5fb95e822e261cda7f56a3" dependencies = [ "http 1.3.1", "log", - "rustls 0.23.27", + "rustls 0.23.31", "serde", "serde_json", "url", @@ -836,15 +840,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "av1-grain" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" dependencies = [ "anyhow", "arrayvec", @@ -856,9 +860,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" +checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" dependencies = [ "arrayvec", ] @@ -983,9 +987,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.7.3" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bit-set" @@ -1079,14 +1083,14 @@ dependencies = [ [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-task", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "piper", ] @@ -1110,7 +1114,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1151,9 +1155,9 @@ checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytecheck" @@ -1179,9 +1183,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -1213,15 +1217,6 @@ dependencies = [ "bytes", ] -[[package]] -name = "bzip2" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" -dependencies = [ - "bzip2-sys", -] - [[package]] name = "bzip2" version = "0.6.0" @@ -1231,16 +1226,6 @@ dependencies = [ "libbz2-rs-sys", ] -[[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" -dependencies = [ - "cc", - "pkg-config", -] - [[package]] name = "cairo-rs" version = "0.18.5" @@ -1268,9 +1253,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.9" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" dependencies = [ "serde", ] @@ -1300,19 +1285,19 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.22.1" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" dependencies = [ "serde", - "toml", + "toml 0.9.5", ] [[package]] name = "cc" -version = "1.2.22" +version = "1.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" +checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" dependencies = [ "jobserver", "libc", @@ -1357,9 +1342,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cfg_aliases" @@ -1411,9 +1396,9 @@ checksum = "93a719913643003b84bd13022b4b7e703c09342cd03b679c4641c7d2e50dc34d" [[package]] name = "clap" -version = "4.5.40" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" +checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" dependencies = [ "clap_builder", "clap_derive", @@ -1421,9 +1406,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.40" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" +checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" dependencies = [ "anstream", "anstyle", @@ -1433,21 +1418,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.40" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "clickhouse" @@ -1485,7 +1470,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1505,9 +1490,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "combine" @@ -1534,15 +1519,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.11" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" dependencies = [ "encode_unicode", "libc", "once_cell", - "unicode-width 0.2.0", - "windows-sys 0.59.0", + "unicode-width 0.2.1", + "windows-sys 0.60.2", ] [[package]] @@ -1624,9 +1609,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "convert_case" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" dependencies = [ "unicode-segmentation", ] @@ -1683,9 +1668,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -1704,7 +1689,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ "bitflags 2.9.1", - "core-foundation 0.10.0", + "core-foundation 0.10.1", "core-graphics-types", "foreign-types", "libc", @@ -1717,7 +1702,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ "bitflags 2.9.1", - "core-foundation 0.10.0", + "core-foundation 0.10.1", "libc", ] @@ -1747,9 +1732,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -1805,9 +1790,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-bigint" @@ -1855,7 +1840,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1886,7 +1871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1910,7 +1895,7 @@ dependencies = [ "dashmap", "dotenvy", "futures", - "indexmap 2.9.0", + "indexmap 2.10.0", "itertools 0.14.0", "reqwest", "rust-s3", @@ -1946,7 +1931,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -1957,7 +1942,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2000,9 +1985,9 @@ dependencies = [ [[package]] name = "deadpool-redis" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "667d186d69c8b4dd7f8cf1ac71bec88b312e1752f2d1a63028aa9ea124c3f191" +checksum = "c0965b977f1244bc3783bb27cd79cfcff335a8341da18f79232d00504b18eb1a" dependencies = [ "deadpool", "redis", @@ -2062,7 +2047,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2083,7 +2068,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2093,7 +2078,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2106,7 +2091,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2126,7 +2111,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "unicode-xid", ] @@ -2169,7 +2154,7 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users 0.5.0", + "redox_users 0.5.2", "windows-sys 0.60.2", ] @@ -2203,18 +2188,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "dispatch2" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" -dependencies = [ - "bitflags 2.9.1", - "block2 0.6.1", - "libc", - "objc2 0.6.1", -] - [[package]] name = "dispatch2" version = "0.3.0" @@ -2235,7 +2208,16 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.8", ] [[package]] @@ -2252,13 +2234,13 @@ dependencies = [ [[package]] name = "dlopen2_derive" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2291,6 +2273,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + [[package]] name = "dpi" version = "0.1.2" @@ -2323,9 +2311,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" @@ -2388,16 +2376,16 @@ checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" [[package]] name = "embed-resource" -version = "3.0.2" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbc6e0d8e0c03a655b53ca813f0463d2c956bc4db8138dbc89f120b066551e3" +checksum = "4c6d81016d6c977deefb2ef8d8290da019e27cc26167e102185da528e6c0ab38" dependencies = [ "cc", "memchr", "rustc_version", - "toml", + "toml 0.9.5", "vswhom", - "winreg 0.52.0", + "winreg 0.55.0", ] [[package]] @@ -2436,14 +2424,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "enumflags2" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" dependencies = [ "enumflags2_derive", "serde", @@ -2451,20 +2439,20 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "enumset" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6b7c3d347de0a9f7bfd2f853be43fe32fa6fac30c70f6d6d67a1e936b87ee" +checksum = "d6ee17054f550fd7400e1906e2f9356c7672643ed34008a9e8abe147ccd2d821" dependencies = [ "enumset_derive", "serde", @@ -2472,14 +2460,14 @@ dependencies = [ [[package]] name = "enumset_derive" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6da3ea9e1d1a3b1593e15781f930120e72aa7501610b2f82e5b6739c72e8eac5" +checksum = "76d07902c93376f1e96c34abc4d507c0911df3816cef50b01f5a2ff3ad8c370d" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2507,6 +2495,26 @@ dependencies = [ "log", ] +[[package]] +name = "equator" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" +dependencies = [ + "equator-macro", +] + +[[package]] +name = "equator-macro" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -2525,12 +2533,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2552,9 +2560,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -2567,7 +2575,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] @@ -2717,7 +2725,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -2747,7 +2755,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4" dependencies = [ - "rustix 1.0.7", + "rustix 1.0.8", "tokio", "windows-sys 0.59.0", ] @@ -2853,9 +2861,9 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand 2.3.0", "futures-core", @@ -2872,7 +2880,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -3044,7 +3052,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "rustix 1.0.7", + "rustix 1.0.8", "windows-targets 0.52.6", ] @@ -3068,7 +3076,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -3088,9 +3096,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" dependencies = [ "color_quant", "weezl", @@ -3168,7 +3176,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -3258,14 +3266,14 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "h2" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -3273,7 +3281,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.9.0", + "indexmap 2.10.0", "slab", "tokio", "tokio-util", @@ -3282,9 +3290,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -3292,7 +3300,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.9.0", + "indexmap 2.10.0", "slab", "tokio", "tokio-util", @@ -3336,9 +3344,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -3351,7 +3359,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.3", + "hashbrown 0.15.5", ] [[package]] @@ -3381,21 +3389,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -3419,7 +3415,7 @@ dependencies = [ "idna", "ipnet", "once_cell", - "rand 0.9.1", + "rand 0.9.2", "ring", "thiserror 2.0.12", "tinyvec", @@ -3441,7 +3437,7 @@ dependencies = [ "moka", "once_cell", "parking_lot", - "rand 0.9.1", + "rand 0.9.2", "resolv-conf", "smallvec", "thiserror 2.0.12", @@ -3610,14 +3606,14 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", + "h2 0.3.27", "http 0.2.12", "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -3633,7 +3629,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.10", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "httparse", @@ -3670,13 +3666,13 @@ dependencies = [ "http 1.3.1", "hyper 1.6.0", "hyper-util", - "rustls 0.23.27", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", "tokio-rustls 0.26.2", "tower-service", - "webpki-roots 1.0.0", + "webpki-roots 1.0.2", ] [[package]] @@ -3694,9 +3690,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ "base64 0.22.1", "bytes", @@ -3710,7 +3706,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.0", "system-configuration", "tokio", "tower-service", @@ -3801,9 +3797,9 @@ checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", @@ -3817,9 +3813,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" @@ -3890,9 +3886,9 @@ dependencies = [ [[package]] name = "image-webp" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" +checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" dependencies = [ "byteorder-lite", "quick-error", @@ -3923,25 +3919,25 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.15.5", "serde", ] [[package]] name = "indicatif" -version = "0.17.11" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" dependencies = [ "console", - "number_prefix", "portable-atomic", - "unicode-width 0.2.0", + "unicode-width 0.2.1", + "unit-prefix", "web-time", ] @@ -3962,9 +3958,9 @@ dependencies = [ [[package]] name = "inferno" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2094aecddc672e902cd773bad7071542f63641e01e9187c3bba4b43005e837e9" +checksum = "e96d2465363ed2d81857759fc864cf6bb7997f79327aec028d65bd7989393685" dependencies = [ "ahash 0.8.12", "clap", @@ -3972,7 +3968,7 @@ dependencies = [ "crossbeam-utils", "dashmap", "env_logger", - "indexmap 2.9.0", + "indexmap 2.10.0", "itoa", "log", "num-format", @@ -4019,7 +4015,18 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", +] + +[[package]] +name = "io-uring" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", ] [[package]] @@ -4028,7 +4035,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.10", "widestring", "windows-sys 0.48.0", "winreg 0.50.0", @@ -4071,7 +4078,7 @@ version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi", "libc", "windows-sys 0.59.0", ] @@ -4094,9 +4101,9 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "iso8601" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5c177cff824ab21a6f41079a4c401241c4e8be14f316c4c6b07d5fca351c98d" +checksum = "e1082f0c48f143442a1ac6122f67e360ceee130b967af4d50996e5154a45df46" dependencies = [ "nom 8.0.0", ] @@ -4159,9 +4166,9 @@ dependencies = [ [[package]] name = "jemalloc_pprof" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5622af6d21ff86ed7797ef98e11b8f302da25ec69a7db9f6cde8e2e1c8df9992" +checksum = "74ff642505c7ce8d31c0d43ec0e235c6fd4585d9b8172d8f9dd04d36590200b5" dependencies = [ "anyhow", "libc", @@ -4208,9 +4215,9 @@ dependencies = [ [[package]] name = "jpeg-decoder" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" @@ -4318,7 +4325,7 @@ checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" dependencies = [ "cssparser", "html5ever", - "indexmap 2.9.0", + "indexmap 2.10.0", "selectors", ] @@ -4431,9 +4438,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "lettre" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb2a0354e9ece2fcdcf9fa53417f6de587230c0c248068eb058fa26c4a753179" +checksum = "5cb54db6ff7a89efac87dba5baeac57bb9ccd726b49a9b6f21fb92b3966aaf56" dependencies = [ "base64 0.22.1", "chumsky", @@ -4448,9 +4455,9 @@ dependencies = [ "nom 8.0.0", "percent-encoding", "quoted_printable", - "rustls 0.23.27", + "rustls 0.23.31", "rustls-native-certs 0.8.1", - "socket2", + "socket2 0.6.0", "tokio", "url", ] @@ -4475,27 +4482,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading", + "libloading 0.7.4", "once_cell", ] [[package]] name = "libbz2-rs-sys" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775bf80d5878ab7c2b1080b5351a48b2f737d9f6f8b383574eebcc22be0dfccb" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libfuzzer-sys" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" +checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" dependencies = [ "arbitrary", "cc", @@ -4511,6 +4518,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +dependencies = [ + "cfg-if", + "windows-targets 0.53.3", +] + [[package]] name = "libm" version = "0.2.15" @@ -4519,9 +4536,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ "bitflags 2.9.1", "libc", @@ -4578,9 +4595,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "local-channel" @@ -4601,9 +4618,9 @@ checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -4645,9 +4662,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lz4_flex" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" [[package]] name = "mac" @@ -4657,9 +4674,9 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "mappings" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e434981a332777c2b3062652d16a55f8e74fa78e6b1882633f0d77399c84fc2a" +checksum = "db4d277bb50d4508057e7bddd7fcd19ef4a4cc38051b6a5a36868d75ae2cbeb9" dependencies = [ "anyhow", "libc", @@ -4690,7 +4707,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4735,7 +4752,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -4766,22 +4783,22 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "meilisearch-index-setting-macro" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420f67f5943a0236eea7f199720cc465e806c48978d9b0fdc1fb62eceaee7556" +checksum = "14a9c03a7c7c9c2b6396bf824b7e9181feb242aafaddf43dede6ccff0ab8b229" dependencies = [ - "convert_case 0.6.0", + "convert_case 0.8.0", "proc-macro2", "quote", "structmeta", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "meilisearch-sdk" -version = "0.28.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2325355c73c96667178c09675389cfa7afc2382d5aa0e0d34d0cf29793d89090" +checksum = "b4bde2e2d304697ec15ec6475d2f299e73bb24347ab1d356de8709a83e3bf6f3" dependencies = [ "async-trait", "bytes", @@ -4796,7 +4813,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.12", "time", "uuid 1.17.0", "wasm-bindgen-futures", @@ -4806,9 +4823,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memoffset" @@ -4852,15 +4869,15 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "minisign-verify" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6367d84fb54d4242af283086402907277715b8fe46976963af5ebf173f8efba3" +checksum = "e856fdd13623a2f5f2f54676a4ee49502a96a80ef4a62bcedd23d52427c44d43" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -4868,14 +4885,14 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] @@ -4899,9 +4916,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b89bf91c19bf036347f1ab85a81c560f08c0667c8601bece664d860a600988" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", @@ -4915,7 +4932,7 @@ dependencies = [ "png", "serde", "thiserror 2.0.12", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4939,7 +4956,7 @@ dependencies = [ "ascii", "block2 0.6.1", "dirs", - "dispatch2 0.3.0", + "dispatch2", "formatx", "objc2 0.6.1", "objc2-app-kit", @@ -5036,12 +5053,11 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "notify" -version = "8.0.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ "bitflags 2.9.1", - "filetime", "fsevent-sys", "inotify", "kqueue", @@ -5050,14 +5066,14 @@ dependencies = [ "mio", "notify-types", "walkdir", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "notify-debouncer-mini" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a689eb4262184d9a1727f9087cd03883ea716682ab03ed24efec57d7716dccb8" +checksum = "17849edfaabd9a5fef1c606d99cfc615a8e99f7ac4366406d86c7942a3184cf2" dependencies = [ "log", "notify", @@ -5154,7 +5170,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5210,41 +5226,36 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "objc-sys" version = "0.3.5" @@ -5320,7 +5331,7 @@ checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ "bitflags 2.9.1", "block2 0.6.1", - "dispatch2 0.3.0", + "dispatch2", "libc", "objc2 0.6.1", ] @@ -5333,7 +5344,7 @@ checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ "bitflags 2.9.1", "block2 0.6.1", - "dispatch2 0.3.0", + "dispatch2", "libc", "objc2 0.6.1", "objc2-core-foundation", @@ -5516,6 +5527,12 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "open" version = "5.3.2" @@ -5562,11 +5579,12 @@ dependencies = [ [[package]] name = "os_info" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fc863e2ca13dc2d5c34fb22ea4a588248ac14db929616ba65c45f21744b1e9" +checksum = "d0e1ac5fde8d43c34139135df8ea9ee9465394b2d8d20f032d38998f64afffc3" dependencies = [ "log", + "plist", "serde", "windows-sys 0.52.0", ] @@ -5636,9 +5654,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -5646,9 +5664,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -5826,7 +5844,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5839,7 +5857,7 @@ dependencies = [ "phf_shared 0.12.1", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5895,7 +5913,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -5950,13 +5968,13 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.7.1" +version = "1.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac26e981c03a6e53e0aee43c113e3202f5581d5360dae7bd2c70e800dd0451d" +checksum = "3af6b589e163c5a788fab00ce0c0366f6efbb9959c2f9874b224936af7fce7e1" dependencies = [ "base64 0.22.1", - "indexmap 2.9.0", - "quick-xml 0.32.0", + "indexmap 2.10.0", + "quick-xml 0.38.1", "serde", "time", ] @@ -5976,24 +5994,23 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.4" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.4.0", + "hermit-abi", "pin-project-lite", - "rustix 0.38.44", - "tracing", - "windows-sys 0.59.0", + "rustix 1.0.8", + "windows-sys 0.60.2", ] [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" @@ -6012,9 +6029,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "pprof_util" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa015c78eed2130951e22c58d2095849391e73817ab2e74f71b0b9f63dd8416" +checksum = "f9aba4251d95ac86f14c33e688d57a9344bfcff29e9b0c5a063fc66b5facc8a1" dependencies = [ "anyhow", "backtrace", @@ -6088,7 +6105,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.26", + "toml_edit 0.22.27", ] [[package]] @@ -6134,7 +6151,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -6176,21 +6193,21 @@ dependencies = [ [[package]] name = "profiling" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -6230,7 +6247,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -6362,6 +6379,15 @@ name = "quick-xml" version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9845d9dccf565065824e69f9f235fafba1587031eda353c1f1561cd6a6be78f4" dependencies = [ "memchr", "tokio", @@ -6379,8 +6405,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.27", - "socket2", + "rustls 0.23.31", + "socket2 0.5.10", "thiserror 2.0.12", "tokio", "tracing", @@ -6396,10 +6422,10 @@ dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.27", + "rustls 0.23.31", "rustls-pki-types", "slab", "thiserror 2.0.12", @@ -6410,14 +6436,14 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" +checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -6439,9 +6465,9 @@ checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "r2d2" @@ -6487,9 +6513,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -6607,9 +6633,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.11.12" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" +checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" dependencies = [ "avif-serialize", "imgref", @@ -6648,9 +6674,9 @@ dependencies = [ [[package]] name = "redis" -version = "0.31.0" +version = "0.32.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bc1ea653e0b2e097db3ebb5b7f678be339620b8041f66b30a308c1d45d36a7f" +checksum = "e1f66bf4cac9733a23bcdf1e0e01effbaaad208567beba68be8f67e5f4af3ee1" dependencies = [ "ahash 0.8.12", "bytes", @@ -6664,7 +6690,7 @@ dependencies = [ "r2d2", "ryu", "sha1_smol", - "socket2", + "socket2 0.6.0", "tokio", "tokio-util", "url", @@ -6672,9 +6698,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.12" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ "bitflags 2.9.1", ] @@ -6692,9 +6718,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", @@ -6718,7 +6744,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -6782,15 +6808,15 @@ dependencies = [ [[package]] name = "replace_with" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a8614ee435691de62bcffcf4a66d91b3594bf1428a5722e79103249a095690" +checksum = "51743d3e274e2b18df81c4dc6caf8a5b8e15dbe799e0dca05c7617380094e884" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" dependencies = [ "async-compression", "base64 0.22.1", @@ -6801,7 +6827,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.10", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -6815,7 +6841,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.27", + "rustls 0.23.31", "rustls-native-certs 0.8.1", "rustls-pki-types", "serde", @@ -6833,7 +6859,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 1.0.0", + "webpki-roots 1.0.2", ] [[package]] @@ -6860,13 +6886,13 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", "block2 0.6.1", - "dispatch2 0.2.0", + "dispatch2", "glib-sys", "gobject-sys", "gtk-sys", @@ -6885,9 +6911,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" dependencies = [ "bytemuck", ] @@ -6957,13 +6983,12 @@ dependencies = [ [[package]] name = "rust-ini" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e310ef0e1b6eeb79169a1171daf9abcb87a2e17c03bee2c4bb100b55c75409f" +checksum = "e7295b7ce3bf4806b419dc3420745998b447178b7005e2011947b38fc5aa6791" dependencies = [ "cfg-if", "ordered-multimap", - "trim-in-place", ] [[package]] @@ -7027,7 +7052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6268b74858287e1a062271b988a0c534bf85bbeb567fe09331bf40ed78113d5" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7044,9 +7069,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -7078,15 +7103,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ "bitflags 2.9.1", "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -7103,15 +7128,15 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.3", + "rustls-webpki 0.103.4", "subtle", "zeroize", ] @@ -7137,7 +7162,7 @@ dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.2.0", + "security-framework 3.3.0", ] [[package]] @@ -7180,9 +7205,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ "ring", "rustls-pki-types", @@ -7191,9 +7216,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rusty-money" @@ -7282,6 +7307,18 @@ dependencies = [ "serde_json", ] +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "schemars_derive" version = "0.8.22" @@ -7291,7 +7328,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7330,7 +7367,7 @@ checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7362,12 +7399,12 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ "bitflags 2.9.1", - "core-foundation 0.10.0", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -7412,13 +7449,13 @@ dependencies = [ [[package]] name = "sentry" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507ac2be9bf2da56c831da57faf1dadd81f434bd282935cdb06193d0c94e8811" +checksum = "989425268ab5c011e06400187eed6c298272f8ef913e49fcadc3fda788b45030" dependencies = [ "httpdate", "reqwest", - "rustls 0.23.27", + "rustls 0.23.31", "sentry-backtrace", "sentry-contexts", "sentry-core", @@ -7431,9 +7468,9 @@ dependencies = [ [[package]] name = "sentry-actix" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8402c142005ee560ae361c73ebece13a299ec3e9cce5b8654479ea9aac8dc8df" +checksum = "a5c675bdf6118764a8e265c3395c311b4d905d12866c92df52870c0223d2ffc1" dependencies = [ "actix-http", "actix-web", @@ -7444,9 +7481,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb4416302fa5325181a120e0fe7d4afd83cd95e52a9b86afa34a8161383fe0dc" +checksum = "68e299dd3f7bcf676875eee852c9941e1d08278a743c32ca528e2debf846a653" dependencies = [ "backtrace", "regex", @@ -7455,9 +7492,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936752f42b6f651dcb257da0bfa235ecc79e82011c49ed3383c212cc582263ff" +checksum = "fac0c5d6892cd4c414492fc957477b620026fb3411fca9fa12774831da561c88" dependencies = [ "hostname", "libc", @@ -7469,21 +7506,22 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e9bd2cadaeda3af41e9fa5d14645127d6f6a4aec73da3ae38e477ecafd3682" +checksum = "deaa38b94e70820ff3f1f9db3c8b0aef053b667be130f618e615e0ff2492cbcc" dependencies = [ - "rand 0.9.1", + "rand 0.9.2", "sentry-types", "serde", "serde_json", + "url", ] [[package]] name = "sentry-debug-images" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e074fe9a0970c91999b23ed3195e6e30990d589fba3a68f20a1686af0f5cda" +checksum = "00950648aa0d371c7f57057434ad5671bd4c106390df7e7284739330786a01b6" dependencies = [ "findshlibs", "sentry-core", @@ -7491,9 +7529,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4651d34f3ba649d9e6dc1268443cae6728b8f741c2f0264004f8ecf5b247330d" +checksum = "2b7a23b13c004873de3ce7db86eb0f59fe4adfc655a31f7bbc17fd10bacc9bfe" dependencies = [ "sentry-backtrace", "sentry-core", @@ -7501,9 +7539,9 @@ dependencies = [ [[package]] name = "sentry-tracing" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25c47d36bc80c74d26d568ffe970c37b337c061b7234ad6f2d159439c16f000" +checksum = "fac841c7050aa73fc2bec8f7d8e9cb1159af0b3095757b99820823f3e54e5080" dependencies = [ "bitflags 2.9.1", "sentry-backtrace", @@ -7514,13 +7552,13 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08e7154abe2cd557f26fd70038452810748aefdf39bc973f674421224b147c1" +checksum = "e477f4d4db08ddb4ab553717a8d3a511bc9e81dde0c808c680feacbb8105c412" dependencies = [ "debugid", "hex", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_json", "thiserror 2.0.12", @@ -7588,7 +7626,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7599,7 +7637,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7615,9 +7653,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", @@ -7674,14 +7712,23 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" dependencies = [ "serde", ] @@ -7695,7 +7742,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7712,16 +7759,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" +checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.10.0", "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -7731,14 +7779,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" +checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -7818,9 +7866,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -7870,18 +7918,15 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" dependencies = [ "serde", ] @@ -7919,14 +7964,24 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "softbuffer" version = "0.4.6" @@ -7977,9 +8032,9 @@ dependencies = [ [[package]] name = "spdx" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b69356da67e2fc1f542c71ea7e654a361a79c938e4424392ecf4fa065d2193" +checksum = "c3e17e880bafaeb362a7b751ec46bdc5b61445a188f80e0606e68167cd540fa3" dependencies = [ "smallvec", ] @@ -8028,20 +8083,20 @@ dependencies = [ "crc", "crossbeam-queue", "either", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.3", + "hashbrown 0.15.5", "hashlink", - "indexmap 2.9.0", + "indexmap 2.10.0", "log", "memchr", "once_cell", "percent-encoding", "rust_decimal", - "rustls 0.23.27", + "rustls 0.23.31", "serde", "serde_json", "sha2", @@ -8065,7 +8120,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8088,7 +8143,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.101", + "syn 2.0.104", "tokio", "url", ] @@ -8237,9 +8292,9 @@ checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" [[package]] name = "strfmt" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8348af2d9fc3258c8733b8d9d8db2e56f54b2363a4b5b81585c7875ed65e65" +checksum = "29fdc163db75f7b5ffa3daf0c5a7136fb0d4b2f35523cd1769da05e034159feb" [[package]] name = "string_cache" @@ -8292,7 +8347,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8303,7 +8358,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8336,9 +8391,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -8362,7 +8417,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8376,9 +8431,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.35.2" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3ffa3e4ff2b324a57f7aeb3c349656c7b127c3c189520251a648102a92496e" +checksum = "252800745060e7b9ffb7b2badbd8b31cfa4aa2e61af879d0a3bf2a317c20217d" dependencies = [ "libc", "memchr", @@ -8418,7 +8473,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml", + "toml 0.8.23", "version-compare", ] @@ -8435,7 +8490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a" dependencies = [ "bitflags 2.9.1", - "core-foundation 0.10.0", + "core-foundation 0.10.1", "core-graphics", "crossbeam-channel", "dispatch", @@ -8475,7 +8530,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -8503,9 +8558,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773663ec28d911ac02f3a478c55f7f2fa581368d9e16ce9dff8d650b3666f91e" +checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7" dependencies = [ "anyhow", "bytes", @@ -8554,9 +8609,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f025c389d3adb83114bec704da973142e82fc6ec799c7c750c5e21cefaec83" +checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064" dependencies = [ "anyhow", "cargo_toml", @@ -8572,15 +8627,15 @@ dependencies = [ "tauri-codegen", "tauri-utils", "tauri-winres", - "toml", + "toml 0.8.23", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df493a1075a241065bc865ed5ef8d0fbc1e76c7afdc0bf0eccfaa7d4f0e406" +checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a" dependencies = [ "base64 0.22.1", "brotli", @@ -8594,7 +8649,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.101", + "syn 2.0.104", "tauri-utils", "thiserror 2.0.12", "time", @@ -8605,23 +8660,23 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f237fbea5866fa5f2a60a21bea807a2d6e0379db070d89c3a10ac0f2d4649bbc" +checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9a0bd00bf1930ad1a604d08b0eb6b2a9c1822686d65d7f4731a7723b8901d3" +checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02" dependencies = [ "anyhow", "glob", @@ -8630,15 +8685,15 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml", + "toml 0.8.23", "walkdir", ] [[package]] name = "tauri-plugin-deep-link" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab261eb006db10ab478e3fbb5a4e2692df3f7eb3e28300ee2b64428979167ed0" +checksum = "1fec67f32d7a06d80bd3dc009fdb678c35a66116d9cb8cd2bb32e406c2b5bbd2" dependencies = [ "dunce", "rust-ini", @@ -8656,9 +8711,9 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.3.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aefb14219b492afb30b12647b5b1247cadd2c0603467310c36e0f7ae1698c28" +checksum = "37e5858cc7b455a73ab4ea2ebc08b5be33682c00ff1bf4cad5537d4fb62499d9" dependencies = [ "log", "raw-window-handle", @@ -8674,9 +8729,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c341290d31991dbca38b31d412c73dfbdb070bb11536784f19dd2211d13b778f" +checksum = "8c6ef84ee2f2094ce093e55106d90d763ba343fad57566992962e8f76d113f99" dependencies = [ "anyhow", "dunce", @@ -8690,15 +8745,15 @@ dependencies = [ "tauri-plugin", "tauri-utils", "thiserror 2.0.12", - "toml", + "toml 0.8.23", "url", ] [[package]] name = "tauri-plugin-http" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c1a38da944b357ffa23bafd563b1579f18e6fbd118fcd84769406d35dcc5c7" +checksum = "fcde333d97e565a7765aad82f32d8672458f7bd77b6ee653830d5dded9d7b5c2" dependencies = [ "bytes", "cookie_store", @@ -8760,9 +8815,9 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "2.3.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b441b6d5d1a194e9fee0b358fe0d602ded845d0f580e1f8c8ef78ebc3c8b225d" +checksum = "50a0e5a4ce43cb3a733c3aef85e8478bc769dac743c615e26639cbf5d953faf7" dependencies = [ "serde", "serde_json", @@ -8807,9 +8862,9 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3d22b21b9cec73601b512a868f7c74f93c044d44fd6ca1c84e9d6afb6b1559" +checksum = "2d5f6fe3291bfa609c7e0b0ee3bedac294d94c7018934086ce782c1d0f2a468e" dependencies = [ "bitflags 2.9.1", "log", @@ -8822,9 +8877,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e7bb73d1bceac06c20b3f755b2c8a2cb13b20b50083084a8cf3700daf397ba4" +checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676" dependencies = [ "cookie 0.18.1", "dpi", @@ -8844,9 +8899,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe52ed0ef40fd7ad51a620ecb3018e32eba3040bb95025216a962a37f6f050c5" +checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439" dependencies = [ "gtk", "http 1.3.1", @@ -8871,9 +8926,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41743bbbeb96c3a100d234e5a0b60a46d5aa068f266160862c7afdbf828ca02e" +checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e" dependencies = [ "anyhow", "brotli", @@ -8900,7 +8955,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror 2.0.12", - "toml", + "toml 0.8.23", "url", "urlpattern", "uuid 1.17.0", @@ -8909,13 +8964,13 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4" +checksum = "7c6d9028d41d4de835e3c482c677a8cb88137ac435d6ff9a71f392d4421576c9" dependencies = [ "embed-resource", - "indexmap 2.9.0", - "toml", + "indexmap 2.10.0", + "toml 0.9.5", ] [[package]] @@ -8927,7 +8982,7 @@ dependencies = [ "fastrand 2.3.0", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix 1.0.8", "windows-sys 0.59.0", ] @@ -8992,7 +9047,7 @@ dependencies = [ "phf 0.12.1", "png", "quartz_nbt", - "quick-xml 0.37.5", + "quick-xml 0.38.1", "rand 0.8.5", "regex", "reqwest", @@ -9091,7 +9146,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9102,17 +9157,16 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -9224,21 +9278,23 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "slab", + "socket2 0.6.0", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -9249,7 +9305,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9268,7 +9324,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ - "rustls 0.23.27", + "rustls 0.23.31", "tokio", ] @@ -9285,9 +9341,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -9299,21 +9355,45 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.22" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" dependencies = [ + "indexmap 2.10.0", "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.26", + "serde_spanned 1.0.0", + "toml_datetime 0.7.0", + "toml_parser", + "toml_writer", + "winnow 0.7.12", ] [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" dependencies = [ "serde", ] @@ -9324,8 +9404,8 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.9.0", - "toml_datetime", + "indexmap 2.10.0", + "toml_datetime 0.6.11", "winnow 0.5.40", ] @@ -9335,30 +9415,45 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.9.0", - "toml_datetime", + "indexmap 2.10.0", + "toml_datetime 0.6.11", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.10.0", "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_write", - "winnow 0.7.10", + "winnow 0.7.12", +] + +[[package]] +name = "toml_parser" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +dependencies = [ + "winnow 0.7.12", ] [[package]] name = "toml_write" -version = "0.1.1" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "toml_writer" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" +checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" [[package]] name = "tonic" @@ -9371,7 +9466,7 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.10", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", @@ -9381,7 +9476,7 @@ dependencies = [ "percent-encoding", "pin-project", "prost", - "socket2", + "socket2 0.5.10", "tokio", "tokio-stream", "tower 0.4.13", @@ -9399,7 +9494,7 @@ dependencies = [ "base32", "constant_time_eq", "hmac", - "rand 0.9.1", + "rand 0.9.2", "sha1", "sha2", ] @@ -9483,9 +9578,9 @@ dependencies = [ [[package]] name = "tracing-actix-web" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2340b7722695166c7fc9b3e3cd1166e7c74fedb9075b8f0c74d3822d2e41caf5" +checksum = "5360edd490ec8dee9fedfc6a9fd83ac2f01b3e1996e3261b9ad18a61971fe064" dependencies = [ "actix-web", "mutually_exclusive_features", @@ -9496,20 +9591,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -9557,9 +9652,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da75ec677957aa21f6e0b361df0daab972f13a5bee3606de0638fd4ee1c666a" +checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" dependencies = [ "crossbeam-channel", "dirs", @@ -9577,12 +9672,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "trim-in-place" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343e926fc669bc8cde4fa3129ab681c63671bae288b1f1081ceee6d9d37904fc" - [[package]] name = "try-lock" version = "0.2.5" @@ -9591,17 +9680,17 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", "http 1.3.1", "httparse", "log", - "rand 0.9.1", - "rustls 0.23.27", + "rand 0.9.2", + "rustls 0.23.31", "rustls-pki-types", "sha1", "thiserror 2.0.12", @@ -9728,9 +9817,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "unicode-xid" @@ -9738,6 +9827,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" + [[package]] name = "untrusted" version = "0.9.0" @@ -9753,7 +9848,7 @@ dependencies = [ "base64 0.22.1", "log", "percent-encoding", - "rustls 0.23.27", + "rustls 0.23.31", "rustls-pemfile 2.2.0", "rustls-pki-types", "ureq-proto", @@ -9838,16 +9933,16 @@ checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ "getrandom 0.3.3", "js-sys", - "rand 0.9.1", + "rand 0.9.2", "serde", "wasm-bindgen", ] [[package]] name = "v_frame" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" dependencies = [ "aligned-vec", "num-traits", @@ -9887,7 +9982,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -9983,9 +10078,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -10024,7 +10119,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "wasm-bindgen-shared", ] @@ -10059,7 +10154,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10086,6 +10181,66 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wayland-backend" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +dependencies = [ + "cc", + "downcast-rs", + "rustix 1.0.8", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +dependencies = [ + "bitflags 2.9.1", + "rustix 1.0.8", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +dependencies = [ + "bitflags 2.9.1", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +dependencies = [ + "proc-macro2", + "quick-xml 0.37.5", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +dependencies = [ + "dlib", + "log", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.77" @@ -10165,14 +10320,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.0", + "webpki-roots 1.0.2", ] [[package]] name = "webpki-roots" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] @@ -10199,7 +10354,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -10215,9 +10370,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wfd" @@ -10237,7 +10392,7 @@ checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" dependencies = [ "either", "env_home", - "rustix 1.0.7", + "rustix 1.0.8", "winsafe", ] @@ -10306,9 +10461,9 @@ dependencies = [ [[package]] name = "windows" -version = "0.61.1" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", "windows-core", @@ -10328,9 +10483,9 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", @@ -10341,12 +10496,13 @@ dependencies = [ [[package]] name = "windows-future" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core", "windows-link", + "windows-threading", ] [[package]] @@ -10357,7 +10513,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -10368,14 +10524,14 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-numerics" @@ -10389,9 +10545,9 @@ dependencies = [ [[package]] name = "windows-registry" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1da3e436dc7653dfdf3da67332e22bff09bb0e28b0239e1624499c7830842e" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ "windows-link", "windows-result", @@ -10400,18 +10556,18 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -10458,7 +10614,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] @@ -10509,10 +10665,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -10523,6 +10680,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-version" version = "0.1.4" @@ -10723,9 +10889,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95" dependencies = [ "memchr", ] @@ -10740,16 +10906,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winreg" version = "0.55.0" @@ -10794,7 +10950,7 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wry" version = "0.52.1" -source = "git+https://github.com/modrinth/wry?rev=21db186#21db1866d53e7be8b513c7272887c6993e7f09b3" +source = "git+https://github.com/modrinth/wry?rev=f2ce0b0#f2ce0b0105d9d94f482c4f8ecffb4f3c3c325b40" dependencies = [ "base64 0.22.1", "block2 0.6.1", @@ -10866,19 +11022,19 @@ dependencies = [ [[package]] name = "xattr" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", - "rustix 1.0.7", + "rustix 1.0.8", ] [[package]] name = "xml-rs" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "yaserde" @@ -10903,7 +11059,7 @@ dependencies = [ "quote", "serde", "serde_tokenstream", - "syn 2.0.101", + "syn 2.0.104", "xml-rs", ] @@ -10938,15 +11094,15 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "synstructure", ] [[package]] name = "zbus" -version = "5.7.0" +version = "5.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88232b74ba057a0c85472ec1bae8a17569960be17da2d5e5ad30d5efe7ea6719" +checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" dependencies = [ "async-broadcast", "async-executor", @@ -10958,9 +11114,9 @@ dependencies = [ "async-trait", "blocking", "enumflags2", - "event-listener 5.4.0", + "event-listener 5.4.1", "futures-core", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "hex", "nix", "ordered-stream", @@ -10970,7 +11126,7 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow 0.7.10", + "winnow 0.7.12", "zbus_macros", "zbus_names", "zvariant", @@ -10978,14 +11134,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.7.0" +version = "5.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6969c06899233334676e60da1675740539cf034ee472a6c5b5c54e50a0a554c9" +checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "zbus_names", "zvariant", "zvariant_utils", @@ -10999,28 +11155,28 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.10", + "winnow 0.7.12", "zvariant", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] @@ -11040,7 +11196,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "synstructure", ] @@ -11063,9 +11219,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -11080,21 +11236,21 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", ] [[package]] name = "zip" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ab361742de920c5535880f89bbd611ee62002bf11341d16a5f057bb8ba6899" +checksum = "9aed4ac33e8eb078c89e6cbb1d5c4c7703ec6d299fc3e7c3695af8f8b423468b" dependencies = [ "arbitrary", - "bzip2 0.5.2", + "bzip2", "crc32fast", "deflate64", "flate2", - "indexmap 2.9.0", + "indexmap 2.10.0", "memchr", "zopfli", "zstd", @@ -11163,38 +11319,38 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.4.14" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" +checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" dependencies = [ "zune-core", ] [[package]] name = "zvariant" -version = "5.5.3" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d30786f75e393ee63a21de4f9074d4c038d52c5b1bb4471f955db249f9dffb1" +checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.10", + "winnow 0.7.12", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.5.3" +version = "5.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580" +checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.104", "zvariant_utils", ] @@ -11208,8 +11364,8 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.101", - "winnow 0.7.10", + "syn 2.0.104", + "winnow 0.7.12", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b3c0bfa71b..b1057b7051 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,31 +25,31 @@ actix-ws = "0.3.0" argon2 = { version = "0.5.3", features = ["std"] } ariadne = { path = "packages/ariadne" } async_zip = "0.0.17" -async-compression = { version = "0.4.25", default-features = false } +async-compression = { version = "0.4.27", default-features = false } async-recursion = "1.1.1" async-stripe = { version = "0.41.0", default-features = false, features = [ "runtime-tokio-hyper-rustls", ] } async-trait = "0.1.88" -async-tungstenite = { version = "0.29.1", default-features = false, features = [ +async-tungstenite = { version = "0.30.0", default-features = false, features = [ "futures-03-sink", ] } async-walkdir = "2.1.0" base64 = "0.22.1" bitflags = "2.9.1" -bytemuck = "1.23.0" +bytemuck = "1.23.1" bytes = "1.10.1" censor = "0.3.0" chardetng = "0.1.17" chrono = "0.4.41" -clap = "4.5.40" +clap = "4.5.43" clickhouse = "0.13.3" color-thief = "0.2.2" console-subscriber = "0.4.1" daedalus = { path = "packages/daedalus" } dashmap = "6.1.0" data-url = "0.3.1" -deadpool-redis = "0.21.1" +deadpool-redis = "0.22.0" dirs = "6.0.0" discord-rich-presence = "0.2.5" dotenv-build = "0.1.1" @@ -57,7 +57,7 @@ dotenvy = "0.15.7" dunce = "1.0.5" either = "1.15.0" encoding_rs = "0.8.35" -enumset = "1.1.6" +enumset = "1.1.7" flate2 = "1.1.2" fs4 = { version = "0.13.1", default-features = false } futures = { version = "0.3.31", default-features = false } @@ -74,15 +74,15 @@ hyper-rustls = { version = "0.27.7", default-features = false, features = [ "ring", "tls12", ] } -hyper-util = "0.1.14" +hyper-util = "0.1.16" iana-time-zone = "0.1.63" image = { version = "0.25.6", default-features = false, features = ["rayon"] } -indexmap = "2.9.0" -indicatif = "0.17.11" +indexmap = "2.10.0" +indicatif = "0.18.0" itertools = "0.14.0" -jemalloc_pprof = "0.7.0" +jemalloc_pprof = "0.8.1" json-patch = { version = "4.0.0", default-features = false } -lettre = { version = "0.11.17", default-features = false, features = [ +lettre = { version = "0.11.18", default-features = false, features = [ "builder", "hostname", "pool", @@ -92,24 +92,24 @@ lettre = { version = "0.11.17", default-features = false, features = [ "smtp-transport", ] } maxminddb = "0.26.0" -meilisearch-sdk = { version = "0.28.0", default-features = false } +meilisearch-sdk = { version = "0.29.1", default-features = false } murmur2 = "0.1.0" native-dialog = "0.9.0" -notify = { version = "8.0.0", default-features = false } -notify-debouncer-mini = { version = "0.6.0", default-features = false } +notify = { version = "8.2.0", default-features = false } +notify-debouncer-mini = { version = "0.7.0", default-features = false } p256 = "0.13.2" paste = "1.0.15" phf = { version = "0.12.1", features = ["macros"] } png = "0.17.16" prometheus = "0.14.0" quartz_nbt = "0.2.9" -quick-xml = "0.37.5" +quick-xml = "0.38.1" rand = "=0.8.5" # Locked on 0.8 until argon2 and p256 update to 0.9 rand_chacha = "=0.3.1" # Locked on 0.3 until we can update rand to 0.9 -redis = "=0.31.0" # Locked on 0.31 until deadpool-redis updates to 0.32 +redis = "0.32.4" regex = "1.11.1" -reqwest = { version = "0.12.20", default-features = false } -rgb = "0.8.50" +reqwest = { version = "0.12.22", default-features = false } +rgb = "0.8.52" rust_decimal = { version = "1.37.2", features = [ "serde-with-float", "serde-with-str", @@ -121,7 +121,7 @@ rust-s3 = { version = "0.35.1", default-features = false, features = [ "tokio-rustls-tls", ] } rusty-money = "0.4.1" -sentry = { version = "0.41.0", default-features = false, features = [ +sentry = { version = "0.42.0", default-features = false, features = [ "backtrace", "contexts", "debug-images", @@ -129,45 +129,45 @@ sentry = { version = "0.41.0", default-features = false, features = [ "reqwest", "rustls", ] } -sentry-actix = "0.41.0" +sentry-actix = "0.42.0" serde = "1.0.219" serde_bytes = "0.11.17" serde_cbor = "0.11.2" serde_ini = "0.2.0" -serde_json = "1.0.140" -serde_with = "3.13.0" +serde_json = "1.0.142" +serde_with = "3.14.0" serde-xml-rs = "0.8.1" # Also an XML (de)serializer, consider dropping yaserde in favor of this sha1 = "0.10.6" sha1_smol = { version = "1.0.1", features = ["std"] } sha2 = "0.10.9" -spdx = "0.10.8" +spdx = "0.10.9" sqlx = { version = "0.8.6", default-features = false } -sysinfo = { version = "0.35.2", default-features = false } +sysinfo = { version = "0.36.1", default-features = false } tar = "0.4.44" -tauri = "2.6.1" -tauri-build = "2.3.0" -tauri-plugin-deep-link = "2.4.0" -tauri-plugin-dialog = "2.3.0" -tauri-plugin-http = "2.5.0" +tauri = "2.7.0" +tauri-build = "2.3.1" +tauri-plugin-deep-link = "2.4.1" +tauri-plugin-dialog = "2.3.2" +tauri-plugin-http = "2.5.1" tauri-plugin-opener = "2.4.0" tauri-plugin-os = "2.3.0" -tauri-plugin-single-instance = "2.3.0" +tauri-plugin-single-instance = "2.3.2" tauri-plugin-updater = { version = "2.9.0", default-features = false, features = [ "rustls-tls", "zip", ] } -tauri-plugin-window-state = "2.3.0" +tauri-plugin-window-state = "2.4.0" tempfile = "3.20.0" theseus = { path = "packages/app-lib" } thiserror = "2.0.12" tikv-jemalloc-ctl = "0.6.0" tikv-jemallocator = "0.6.0" -tokio = "1.45.1" +tokio = "1.47.1" tokio-stream = "0.1.17" -tokio-util = "0.7.15" +tokio-util = "0.7.16" totp-rs = "5.7.0" tracing = "0.1.41" -tracing-actix-web = "0.7.18" +tracing-actix-web = "0.7.19" tracing-error = "0.2.1" tracing-subscriber = "0.3.19" url = "2.5.4" @@ -179,7 +179,7 @@ whoami = "1.6.0" winreg = "0.55.0" woothee = "0.13.0" yaserde = "0.12.0" -zip = { version = "4.2.0", default-features = false, features = [ +zip = { version = "4.3.0", default-features = false, features = [ "bzip2", "deflate", "deflate64", @@ -226,7 +226,7 @@ wildcard_dependencies = "warn" warnings = "deny" [patch.crates-io] -wry = { git = "https://github.com/modrinth/wry", rev = "21db186" } +wry = { git = "https://github.com/modrinth/wry", rev = "f2ce0b0" } # Optimize for speed and reduce size on release builds [profile.release] diff --git a/apps/app/src/api/ads.rs b/apps/app/src/api/ads.rs index 5f719b52b2..fd498a56d9 100644 --- a/apps/app/src/api/ads.rs +++ b/apps/app/src/api/ads.rs @@ -197,15 +197,13 @@ pub async fn open_link( if url::Url::parse(&path).is_ok() && !state.malicious_origins.contains(&origin) + && let Some(last_click) = state.last_click + && last_click.elapsed() < Duration::from_millis(100) { - if let Some(last_click) = state.last_click { - if last_click.elapsed() < Duration::from_millis(100) { - let _ = app.opener().open_url(&path, None::); - state.last_click = None; + let _ = app.opener().open_url(&path, None::); + state.last_click = None; - return Ok(()); - } - } + return Ok(()); } tracing::info!("Malicious click: {path} origin {origin}"); diff --git a/apps/app/src/api/auth.rs b/apps/app/src/api/auth.rs index c18bd770ee..d7bbe3a942 100644 --- a/apps/app/src/api/auth.rs +++ b/apps/app/src/api/auth.rs @@ -59,16 +59,13 @@ pub async fn login( .url()? .as_str() .starts_with("https://login.live.com/oauth20_desktop.srf") - { - if let Some((_, code)) = + && let Some((_, code)) = window.url()?.query_pairs().find(|x| x.0 == "code") - { - window.close()?; - let val = - minecraft_auth::finish_login(&code.clone(), flow).await?; + { + window.close()?; + let val = minecraft_auth::finish_login(&code.clone(), flow).await?; - return Ok(Some(val)); - } + return Ok(Some(val)); } tokio::time::sleep(std::time::Duration::from_millis(50)).await; diff --git a/apps/app/src/api/utils.rs b/apps/app/src/api/utils.rs index 0ba25fc462..8a067b7ccf 100644 --- a/apps/app/src/api/utils.rs +++ b/apps/app/src/api/utils.rs @@ -63,11 +63,11 @@ pub async fn should_disable_mouseover() -> bool { // We try to match version to 12.2 or higher. If unrecognizable to pattern or lower, we default to the css with disabled mouseover for safety if let tauri_plugin_os::Version::Semantic(major, minor, _) = tauri_plugin_os::version() + && major >= 12 + && minor >= 3 { - if major >= 12 && minor >= 3 { - // Mac os version is 12.3 or higher, we allow mouseover - return false; - } + // Mac os version is 12.3 or higher, we allow mouseover + return false; } true } else { diff --git a/apps/app/src/main.rs b/apps/app/src/main.rs index b6b00ea815..09723d39f9 100644 --- a/apps/app/src/main.rs +++ b/apps/app/src/main.rs @@ -233,10 +233,10 @@ fn main() { }); #[cfg(not(target_os = "linux"))] - if let Some(window) = app.get_window("main") { - if let Err(e) = window.set_shadow(true) { - tracing::warn!("Failed to set window shadow: {e}"); - } + if let Some(window) = app.get_window("main") + && let Err(e) = window.set_shadow(true) + { + tracing::warn!("Failed to set window shadow: {e}"); } Ok(()) diff --git a/apps/daedalus_client/Dockerfile b/apps/daedalus_client/Dockerfile index 271c829aab..8cb643a81e 100644 --- a/apps/daedalus_client/Dockerfile +++ b/apps/daedalus_client/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM rust:1.88.0 AS build +FROM rust:1.89.0 AS build WORKDIR /usr/src/daedalus COPY . . diff --git a/apps/daedalus_client/src/forge.rs b/apps/daedalus_client/src/forge.rs index ab67ae9146..c1bf605647 100644 --- a/apps/daedalus_client/src/forge.rs +++ b/apps/daedalus_client/src/forge.rs @@ -506,27 +506,25 @@ async fn fetch( return Ok(lib); } - } else if let Some(url) = &lib.url { - if !url.is_empty() { - insert_mirrored_artifact( - &lib.name, - None, - vec![ - url.clone(), - "https://libraries.minecraft.net/" - .to_string(), - "https://maven.creeperhost.net/" - .to_string(), - maven_url.to_string(), - ], - false, - mirror_artifacts, - )?; + } else if let Some(url) = &lib.url + && !url.is_empty() + { + insert_mirrored_artifact( + &lib.name, + None, + vec![ + url.clone(), + "https://libraries.minecraft.net/".to_string(), + "https://maven.creeperhost.net/".to_string(), + maven_url.to_string(), + ], + false, + mirror_artifacts, + )?; - lib.url = Some(format_url("maven/")); + lib.url = Some(format_url("maven/")); - return Ok(lib); - } + return Ok(lib); } // Other libraries are generally available in the "maven" directory of the installer. If they are diff --git a/apps/daedalus_client/src/main.rs b/apps/daedalus_client/src/main.rs index dcd6105583..a09454715b 100644 --- a/apps/daedalus_client/src/main.rs +++ b/apps/daedalus_client/src/main.rs @@ -93,22 +93,22 @@ async fn main() -> Result<()> { .ok() .and_then(|x| x.parse::().ok()) .unwrap_or(false) + && let Ok(token) = dotenvy::var("CLOUDFLARE_TOKEN") + && let Ok(zone_id) = dotenvy::var("CLOUDFLARE_ZONE_ID") { - if let Ok(token) = dotenvy::var("CLOUDFLARE_TOKEN") { - if let Ok(zone_id) = dotenvy::var("CLOUDFLARE_ZONE_ID") { - let cache_clears = upload_files + let cache_clears = upload_files + .into_iter() + .map(|x| format_url(&x.0)) + .chain( + mirror_artifacts .into_iter() - .map(|x| format_url(&x.0)) - .chain( - mirror_artifacts - .into_iter() - .map(|x| format_url(&format!("maven/{}", x.0))), - ) - .collect::>(); - - // Cloudflare ratelimits cache clears to 500 files per request - for chunk in cache_clears.chunks(500) { - REQWEST_CLIENT.post(format!("https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache")) + .map(|x| format_url(&format!("maven/{}", x.0))), + ) + .collect::>(); + + // Cloudflare ratelimits cache clears to 500 files per request + for chunk in cache_clears.chunks(500) { + REQWEST_CLIENT.post(format!("https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache")) .bearer_auth(&token) .json(&serde_json::json!({ "files": chunk @@ -128,8 +128,6 @@ async fn main() -> Result<()> { item: "cloudflare clear cache".to_string(), } })?; - } - } } } diff --git a/apps/daedalus_client/src/util.rs b/apps/daedalus_client/src/util.rs index 3f8f11e538..6d331d839e 100644 --- a/apps/daedalus_client/src/util.rs +++ b/apps/daedalus_client/src/util.rs @@ -167,20 +167,18 @@ pub async fn download_file( let bytes = x.bytes().await; if let Ok(bytes) = bytes { - if let Some(sha1) = sha1 { - if &*sha1_async(bytes.clone()).await? != sha1 { - if attempt <= 3 { - continue; - } else { - return Err( - crate::ErrorKind::ChecksumFailure { - hash: sha1.to_string(), - url: url.to_string(), - tries: attempt, - } - .into(), - ); + if let Some(sha1) = sha1 + && &*sha1_async(bytes.clone()).await? != sha1 + { + if attempt <= 3 { + continue; + } else { + return Err(crate::ErrorKind::ChecksumFailure { + hash: sha1.to_string(), + url: url.to_string(), + tries: attempt, } + .into()); } } diff --git a/apps/labrinth/Dockerfile b/apps/labrinth/Dockerfile index f8ff754d95..48c20814d8 100644 --- a/apps/labrinth/Dockerfile +++ b/apps/labrinth/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM rust:1.88.0 AS build +FROM rust:1.89.0 AS build WORKDIR /usr/src/labrinth COPY . . diff --git a/apps/labrinth/src/auth/checks.rs b/apps/labrinth/src/auth/checks.rs index 662a8b0936..f810ca773c 100644 --- a/apps/labrinth/src/auth/checks.rs +++ b/apps/labrinth/src/auth/checks.rs @@ -322,12 +322,11 @@ pub async fn is_visible_collection( } else { !collection_data.status.is_hidden() }) && !collection_data.projects.is_empty(); - if let Some(user) = &user_option { - if !authorized - && (user.role.is_mod() || user.id == collection_data.user_id.into()) - { - authorized = true; - } + if let Some(user) = &user_option + && !authorized + && (user.role.is_mod() || user.id == collection_data.user_id.into()) + { + authorized = true; } Ok(authorized) } @@ -356,10 +355,10 @@ pub async fn filter_visible_collections( for collection in check_collections { // Collections are simple- if we are the owner or a mod, we can see it - if let Some(user) = user_option { - if user.role.is_mod() || user.id == collection.user_id.into() { - return_collections.push(collection.into()); - } + if let Some(user) = user_option + && (user.role.is_mod() || user.id == collection.user_id.into()) + { + return_collections.push(collection.into()); } } diff --git a/apps/labrinth/src/database/models/flow_item.rs b/apps/labrinth/src/database/models/flow_item.rs index 53bd379c53..192823d861 100644 --- a/apps/labrinth/src/database/models/flow_item.rs +++ b/apps/labrinth/src/database/models/flow_item.rs @@ -95,10 +95,10 @@ impl DBFlow { redis: &RedisPool, ) -> Result, DatabaseError> { let flow = Self::get(id, redis).await?; - if let Some(flow) = flow.as_ref() { - if predicate(flow) { - Self::remove(id, redis).await?; - } + if let Some(flow) = flow.as_ref() + && predicate(flow) + { + Self::remove(id, redis).await?; } Ok(flow) } diff --git a/apps/labrinth/src/database/models/loader_fields.rs b/apps/labrinth/src/database/models/loader_fields.rs index da293ae6c3..32f836c886 100644 --- a/apps/labrinth/src/database/models/loader_fields.rs +++ b/apps/labrinth/src/database/models/loader_fields.rs @@ -801,24 +801,24 @@ impl VersionField { }; if let Some(count) = countable { - if let Some(min) = loader_field.min_val { - if count < min { - return Err(format!( - "Provided value '{v}' for {field_name} is less than the minimum of {min}", - v = serde_json::to_string(&value).unwrap_or_default(), - field_name = loader_field.field, - )); - } + if let Some(min) = loader_field.min_val + && count < min + { + return Err(format!( + "Provided value '{v}' for {field_name} is less than the minimum of {min}", + v = serde_json::to_string(&value).unwrap_or_default(), + field_name = loader_field.field, + )); } - if let Some(max) = loader_field.max_val { - if count > max { - return Err(format!( - "Provided value '{v}' for {field_name} is greater than the maximum of {max}", - v = serde_json::to_string(&value).unwrap_or_default(), - field_name = loader_field.field, - )); - } + if let Some(max) = loader_field.max_val + && count > max + { + return Err(format!( + "Provided value '{v}' for {field_name} is greater than the maximum of {max}", + v = serde_json::to_string(&value).unwrap_or_default(), + field_name = loader_field.field, + )); } } diff --git a/apps/labrinth/src/database/models/team_item.rs b/apps/labrinth/src/database/models/team_item.rs index ec32a143b7..dc3139401d 100644 --- a/apps/labrinth/src/database/models/team_item.rs +++ b/apps/labrinth/src/database/models/team_item.rs @@ -483,20 +483,20 @@ impl DBTeamMember { .await?; } - if let Some(accepted) = new_accepted { - if accepted { - sqlx::query!( - " + if let Some(accepted) = new_accepted + && accepted + { + sqlx::query!( + " UPDATE team_members SET accepted = TRUE WHERE (team_id = $1 AND user_id = $2) ", - id as DBTeamId, - user_id as DBUserId, - ) - .execute(&mut **transaction) - .await?; - } + id as DBTeamId, + user_id as DBUserId, + ) + .execute(&mut **transaction) + .await?; } if let Some(payouts_split) = new_payouts_split { diff --git a/apps/labrinth/src/database/redis.rs b/apps/labrinth/src/database/redis.rs index 9d3197c486..cc01b0b205 100644 --- a/apps/labrinth/src/database/redis.rs +++ b/apps/labrinth/src/database/redis.rs @@ -353,10 +353,10 @@ impl RedisPool { }; for (idx, key) in fetch_ids.into_iter().enumerate() { - if let Some(locked) = results.get(idx) { - if locked.is_none() { - continue; - } + if let Some(locked) = results.get(idx) + && locked.is_none() + { + continue; } if let Some((key, raw_key)) = ids.remove(&key) { diff --git a/apps/labrinth/src/models/v2/projects.rs b/apps/labrinth/src/models/v2/projects.rs index 0af1e53fe1..f495c7f1e2 100644 --- a/apps/labrinth/src/models/v2/projects.rs +++ b/apps/labrinth/src/models/v2/projects.rs @@ -334,18 +334,14 @@ impl From for LegacyVersion { // the v2 loaders are whatever the corresponding loader fields are let mut loaders = data.loaders.into_iter().map(|l| l.0).collect::>(); - if loaders.contains(&"mrpack".to_string()) { - if let Some((_, mrpack_loaders)) = data + if loaders.contains(&"mrpack".to_string()) + && let Some((_, mrpack_loaders)) = data .fields .into_iter() .find(|(key, _)| key == "mrpack_loaders") - { - if let Ok(mrpack_loaders) = - serde_json::from_value(mrpack_loaders) - { - loaders = mrpack_loaders; - } - } + && let Ok(mrpack_loaders) = serde_json::from_value(mrpack_loaders) + { + loaders = mrpack_loaders; } let loaders = loaders.into_iter().map(Loader).collect::>(); diff --git a/apps/labrinth/src/models/v2/search.rs b/apps/labrinth/src/models/v2/search.rs index 1aabaca146..528bd9d83a 100644 --- a/apps/labrinth/src/models/v2/search.rs +++ b/apps/labrinth/src/models/v2/search.rs @@ -43,35 +43,33 @@ impl LegacyResultSearchProject { pub fn from(result_search_project: ResultSearchProject) -> Self { let mut categories = result_search_project.categories; categories.extend(result_search_project.loaders.clone()); - if categories.contains(&"mrpack".to_string()) { - if let Some(mrpack_loaders) = result_search_project + if categories.contains(&"mrpack".to_string()) + && let Some(mrpack_loaders) = result_search_project .project_loader_fields .get("mrpack_loaders") - { - categories.extend( - mrpack_loaders - .iter() - .filter_map(|c| c.as_str()) - .map(String::from), - ); - categories.retain(|c| c != "mrpack"); - } + { + categories.extend( + mrpack_loaders + .iter() + .filter_map(|c| c.as_str()) + .map(String::from), + ); + categories.retain(|c| c != "mrpack"); } let mut display_categories = result_search_project.display_categories; display_categories.extend(result_search_project.loaders); - if display_categories.contains(&"mrpack".to_string()) { - if let Some(mrpack_loaders) = result_search_project + if display_categories.contains(&"mrpack".to_string()) + && let Some(mrpack_loaders) = result_search_project .project_loader_fields .get("mrpack_loaders") - { - categories.extend( - mrpack_loaders - .iter() - .filter_map(|c| c.as_str()) - .map(String::from), - ); - display_categories.retain(|c| c != "mrpack"); - } + { + categories.extend( + mrpack_loaders + .iter() + .filter_map(|c| c.as_str()) + .map(String::from), + ); + display_categories.retain(|c| c != "mrpack"); } // Sort then remove duplicates diff --git a/apps/labrinth/src/models/v3/projects.rs b/apps/labrinth/src/models/v3/projects.rs index 56d241d3b8..8b212ef162 100644 --- a/apps/labrinth/src/models/v3/projects.rs +++ b/apps/labrinth/src/models/v3/projects.rs @@ -166,10 +166,10 @@ impl From for Project { Ok(spdx_expr) => { let mut vec: Vec<&str> = Vec::new(); for node in spdx_expr.iter() { - if let spdx::expression::ExprNode::Req(req) = node { - if let Some(id) = req.req.license.id() { - vec.push(id.full_name); - } + if let spdx::expression::ExprNode::Req(req) = node + && let Some(id) = req.req.license.id() + { + vec.push(id.full_name); } } // spdx crate returns AND/OR operations in postfix order diff --git a/apps/labrinth/src/models/v3/teams.rs b/apps/labrinth/src/models/v3/teams.rs index 65292c9179..5f124f3160 100644 --- a/apps/labrinth/src/models/v3/teams.rs +++ b/apps/labrinth/src/models/v3/teams.rs @@ -51,16 +51,16 @@ impl ProjectPermissions { return Some(ProjectPermissions::all()); } - if let Some(member) = project_team_member { - if member.accepted { - return Some(member.permissions); - } + if let Some(member) = project_team_member + && member.accepted + { + return Some(member.permissions); } - if let Some(member) = organization_team_member { - if member.accepted { - return Some(member.permissions); - } + if let Some(member) = organization_team_member + && member.accepted + { + return Some(member.permissions); } if role.is_mod() { @@ -107,10 +107,10 @@ impl OrganizationPermissions { return Some(OrganizationPermissions::all()); } - if let Some(member) = team_member { - if member.accepted { - return member.organization_permissions; - } + if let Some(member) = team_member + && member.accepted + { + return member.organization_permissions; } if role.is_mod() { return Some( diff --git a/apps/labrinth/src/queue/maxmind.rs b/apps/labrinth/src/queue/maxmind.rs index 1e65a5256e..bb80fb690a 100644 --- a/apps/labrinth/src/queue/maxmind.rs +++ b/apps/labrinth/src/queue/maxmind.rs @@ -45,17 +45,15 @@ impl MaxMindIndexer { if let Ok(entries) = archive.entries() { for mut file in entries.flatten() { - if let Ok(path) = file.header().path() { - if path.extension().and_then(|x| x.to_str()) == Some("mmdb") - { - let mut buf = Vec::new(); - file.read_to_end(&mut buf).unwrap(); + if let Ok(path) = file.header().path() + && path.extension().and_then(|x| x.to_str()) == Some("mmdb") + { + let mut buf = Vec::new(); + file.read_to_end(&mut buf).unwrap(); - let reader = - maxminddb::Reader::from_source(buf).unwrap(); + let reader = maxminddb::Reader::from_source(buf).unwrap(); - return Ok(Some(reader)); - } + return Ok(Some(reader)); } } } diff --git a/apps/labrinth/src/queue/moderation.rs b/apps/labrinth/src/queue/moderation.rs index c7f27be2e7..87ebce31aa 100644 --- a/apps/labrinth/src/queue/moderation.rs +++ b/apps/labrinth/src/queue/moderation.rs @@ -371,8 +371,8 @@ impl AutomatedModerationQueue { for file in files.iter().filter(|x| x.version_id == version.id.into()) { - if let Some(hash) = file.hashes.get("sha1") { - if let Some((index, (sha1, _, file_name, _))) = hashes + if let Some(hash) = file.hashes.get("sha1") + && let Some((index, (sha1, _, file_name, _))) = hashes .iter() .enumerate() .find(|(_, (value, _, _, _))| value == hash) @@ -382,7 +382,6 @@ impl AutomatedModerationQueue { hashes.remove(index); } - } } } @@ -420,12 +419,11 @@ impl AutomatedModerationQueue { .await?; for row in rows { - if let Some(sha1) = row.sha1 { - if let Some((index, (sha1, _, file_name, _))) = hashes.iter().enumerate().find(|(_, (value, _, _, _))| value == &sha1) { + if let Some(sha1) = row.sha1 + && let Some((index, (sha1, _, file_name, _))) = hashes.iter().enumerate().find(|(_, (value, _, _, _))| value == &sha1) { final_hashes.insert(sha1.clone(), IdentifiedFile { file_name: file_name.clone(), status: ApprovalType::from_string(&row.status).unwrap_or(ApprovalType::Unidentified) }); hashes.remove(index); } - } } if hashes.is_empty() { @@ -499,8 +497,8 @@ impl AutomatedModerationQueue { let mut insert_ids = Vec::new(); for row in rows { - if let Some((curse_index, (hash, _flame_id))) = flame_files.iter().enumerate().find(|(_, x)| Some(x.1 as i32) == row.flame_project_id) { - if let Some((index, (sha1, _, file_name, _))) = hashes.iter().enumerate().find(|(_, (value, _, _, _))| value == hash) { + if let Some((curse_index, (hash, _flame_id))) = flame_files.iter().enumerate().find(|(_, x)| Some(x.1 as i32) == row.flame_project_id) + && let Some((index, (sha1, _, file_name, _))) = hashes.iter().enumerate().find(|(_, (value, _, _, _))| value == hash) { final_hashes.insert(sha1.clone(), IdentifiedFile { file_name: file_name.clone(), status: ApprovalType::from_string(&row.status).unwrap_or(ApprovalType::Unidentified), @@ -512,7 +510,6 @@ impl AutomatedModerationQueue { hashes.remove(index); flame_files.remove(curse_index); } - } } if !insert_ids.is_empty() && !insert_hashes.is_empty() { @@ -581,8 +578,8 @@ impl AutomatedModerationQueue { for (sha1, _pack_file, file_name, _mumur2) in hashes { let flame_file = flame_files.iter().find(|x| x.0 == sha1); - if let Some((_, flame_project_id)) = flame_file { - if let Some(project) = flame_projects.iter().find(|x| &x.id == flame_project_id) { + if let Some((_, flame_project_id)) = flame_file + && let Some(project) = flame_projects.iter().find(|x| &x.id == flame_project_id) { missing_metadata.flame_files.insert(sha1, MissingMetadataFlame { title: project.name.clone(), file_name, @@ -592,7 +589,6 @@ impl AutomatedModerationQueue { continue; } - } missing_metadata.unknown_files.insert(sha1, file_name); } diff --git a/apps/labrinth/src/queue/payouts.rs b/apps/labrinth/src/queue/payouts.rs index 740e91dd55..ccdeb678a0 100644 --- a/apps/labrinth/src/queue/payouts.rs +++ b/apps/labrinth/src/queue/payouts.rs @@ -257,31 +257,30 @@ impl PayoutsQueue { ) })?; - if !status.is_success() { - if let Some(obj) = value.as_object() { - if let Some(array) = obj.get("errors") { - #[derive(Deserialize)] - struct TremendousError { - message: String, - } - - let err = serde_json::from_value::( - array.clone(), - ) - .map_err(|_| { - ApiError::Payments( - "could not retrieve Tremendous error json body" - .to_string(), - ) - })?; - - return Err(ApiError::Payments(err.message)); + if !status.is_success() + && let Some(obj) = value.as_object() + { + if let Some(array) = obj.get("errors") { + #[derive(Deserialize)] + struct TremendousError { + message: String, } - return Err(ApiError::Payments( - "could not retrieve Tremendous error body".to_string(), - )); + let err = + serde_json::from_value::(array.clone()) + .map_err(|_| { + ApiError::Payments( + "could not retrieve Tremendous error json body" + .to_string(), + ) + })?; + + return Err(ApiError::Payments(err.message)); } + + return Err(ApiError::Payments( + "could not retrieve Tremendous error body".to_string(), + )); } Ok(serde_json::from_value(value)?) @@ -449,10 +448,10 @@ impl PayoutsQueue { }; // we do not support interval gift cards with non US based currencies since we cannot do currency conversions properly - if let PayoutInterval::Fixed { .. } = method.interval { - if !product.currency_codes.contains(&"USD".to_string()) { - continue; - } + if let PayoutInterval::Fixed { .. } = method.interval + && !product.currency_codes.contains(&"USD".to_string()) + { + continue; } methods.push(method); diff --git a/apps/labrinth/src/routes/internal/billing.rs b/apps/labrinth/src/routes/internal/billing.rs index 49e50eac7c..c27a507fdf 100644 --- a/apps/labrinth/src/routes/internal/billing.rs +++ b/apps/labrinth/src/routes/internal/billing.rs @@ -286,17 +286,17 @@ pub async fn refund_charge( .upsert(&mut transaction) .await?; - if body.0.unprovision.unwrap_or(false) { - if let Some(subscription_id) = charge.subscription_id { - let open_charge = - DBCharge::get_open_subscription(subscription_id, &**pool) - .await?; - if let Some(mut open_charge) = open_charge { - open_charge.status = ChargeStatus::Cancelled; - open_charge.due = Utc::now(); + if body.0.unprovision.unwrap_or(false) + && let Some(subscription_id) = charge.subscription_id + { + let open_charge = + DBCharge::get_open_subscription(subscription_id, &**pool) + .await?; + if let Some(mut open_charge) = open_charge { + open_charge.status = ChargeStatus::Cancelled; + open_charge.due = Utc::now(); - open_charge.upsert(&mut transaction).await?; - } + open_charge.upsert(&mut transaction).await?; } } @@ -392,17 +392,16 @@ pub async fn edit_subscription( } } - if let Some(interval) = &edit_subscription.interval { - if let Price::Recurring { intervals } = ¤t_price.prices { - if let Some(price) = intervals.get(interval) { - open_charge.subscription_interval = Some(*interval); - open_charge.amount = *price as i64; - } else { - return Err(ApiError::InvalidInput( - "Interval is not valid for this subscription!" - .to_string(), - )); - } + if let Some(interval) = &edit_subscription.interval + && let Price::Recurring { intervals } = ¤t_price.prices + { + if let Some(price) = intervals.get(interval) { + open_charge.subscription_interval = Some(*interval); + open_charge.amount = *price as i64; + } else { + return Err(ApiError::InvalidInput( + "Interval is not valid for this subscription!".to_string(), + )); } } @@ -1225,38 +1224,36 @@ pub async fn initiate_payment( } }; - if let Price::Recurring { .. } = price_item.prices { - if product.unitary { - let user_subscriptions = + if let Price::Recurring { .. } = price_item.prices + && product.unitary + { + let user_subscriptions = user_subscription_item::DBUserSubscription::get_all_user( user.id.into(), &**pool, ) .await?; - let user_products = - product_item::DBProductPrice::get_many( - &user_subscriptions - .iter() - .filter(|x| { - x.status - == SubscriptionStatus::Provisioned - }) - .map(|x| x.price_id) - .collect::>(), - &**pool, - ) - .await?; + let user_products = product_item::DBProductPrice::get_many( + &user_subscriptions + .iter() + .filter(|x| { + x.status == SubscriptionStatus::Provisioned + }) + .map(|x| x.price_id) + .collect::>(), + &**pool, + ) + .await?; - if user_products - .into_iter() - .any(|x| x.product_id == product.id) - { - return Err(ApiError::InvalidInput( - "You are already subscribed to this product!" - .to_string(), - )); - } + if user_products + .into_iter() + .any(|x| x.product_id == product.id) + { + return Err(ApiError::InvalidInput( + "You are already subscribed to this product!" + .to_string(), + )); } } @@ -2004,38 +2001,36 @@ pub async fn stripe_webhook( EventType::PaymentMethodAttached => { if let EventObject::PaymentMethod(payment_method) = event.data.object - { - if let Some(customer_id) = + && let Some(customer_id) = payment_method.customer.map(|x| x.id()) + { + let customer = stripe::Customer::retrieve( + &stripe_client, + &customer_id, + &[], + ) + .await?; + + if customer + .invoice_settings + .is_none_or(|x| x.default_payment_method.is_none()) { - let customer = stripe::Customer::retrieve( + stripe::Customer::update( &stripe_client, &customer_id, - &[], + UpdateCustomer { + invoice_settings: Some( + CustomerInvoiceSettings { + default_payment_method: Some( + payment_method.id.to_string(), + ), + ..Default::default() + }, + ), + ..Default::default() + }, ) .await?; - - if customer - .invoice_settings - .is_none_or(|x| x.default_payment_method.is_none()) - { - stripe::Customer::update( - &stripe_client, - &customer_id, - UpdateCustomer { - invoice_settings: Some( - CustomerInvoiceSettings { - default_payment_method: Some( - payment_method.id.to_string(), - ), - ..Default::default() - }, - ), - ..Default::default() - }, - ) - .await?; - } } } } diff --git a/apps/labrinth/src/routes/internal/flows.rs b/apps/labrinth/src/routes/internal/flows.rs index cba2de5d97..0c7a37ba21 100644 --- a/apps/labrinth/src/routes/internal/flows.rs +++ b/apps/labrinth/src/routes/internal/flows.rs @@ -79,13 +79,12 @@ impl TempUser { file_host: &Arc, redis: &RedisPool, ) -> Result { - if let Some(email) = &self.email { - if crate::database::models::DBUser::get_by_email(email, client) + if let Some(email) = &self.email + && crate::database::models::DBUser::get_by_email(email, client) .await? .is_some() - { - return Err(AuthenticationError::DuplicateUser); - } + { + return Err(AuthenticationError::DuplicateUser); } let user_id = @@ -1269,19 +1268,19 @@ pub async fn delete_auth_provider( .update_user_id(user.id.into(), None, &mut transaction) .await?; - if delete_provider.provider != AuthProvider::PayPal { - if let Some(email) = user.email { - send_email( - email, - "Authentication method removed", - &format!( - "When logging into Modrinth, you can no longer log in using the {} authentication provider.", - delete_provider.provider.as_str() - ), - "If you did not make this change, please contact us immediately through our support channels on Discord or via email (support@modrinth.com).", - None, - )?; - } + if delete_provider.provider != AuthProvider::PayPal + && let Some(email) = user.email + { + send_email( + email, + "Authentication method removed", + &format!( + "When logging into Modrinth, you can no longer log in using the {} authentication provider.", + delete_provider.provider.as_str() + ), + "If you did not make this change, please contact us immediately through our support channels on Discord or via email (support@modrinth.com).", + None, + )?; } transaction.commit().await?; diff --git a/apps/labrinth/src/routes/internal/moderation.rs b/apps/labrinth/src/routes/internal/moderation.rs index ff28901f24..049ce727a1 100644 --- a/apps/labrinth/src/routes/internal/moderation.rs +++ b/apps/labrinth/src/routes/internal/moderation.rs @@ -189,17 +189,16 @@ pub async fn get_project_meta( .iter() .find(|x| Some(x.1.id as i32) == row.flame_project_id) .map(|x| x.0.clone()) + && let Some(val) = merged.flame_files.remove(&sha1) { - if let Some(val) = merged.flame_files.remove(&sha1) { - merged.identified.insert( - sha1, - IdentifiedFile { - file_name: val.file_name.clone(), - status: ApprovalType::from_string(&row.status) - .unwrap_or(ApprovalType::Unidentified), - }, - ); - } + merged.identified.insert( + sha1, + IdentifiedFile { + file_name: val.file_name.clone(), + status: ApprovalType::from_string(&row.status) + .unwrap_or(ApprovalType::Unidentified), + }, + ); } } diff --git a/apps/labrinth/src/routes/internal/pats.rs b/apps/labrinth/src/routes/internal/pats.rs index ad0ebe9425..fa10d97c5b 100644 --- a/apps/labrinth/src/routes/internal/pats.rs +++ b/apps/labrinth/src/routes/internal/pats.rs @@ -185,69 +185,69 @@ pub async fn edit_pat( ) .await?; - if let Some(pat) = pat { - if pat.user_id == user.id.into() { - let mut transaction = pool.begin().await?; + if let Some(pat) = pat + && pat.user_id == user.id.into() + { + let mut transaction = pool.begin().await?; - if let Some(scopes) = &info.scopes { - if scopes.is_restricted() { - return Err(ApiError::InvalidInput( - "Invalid scopes requested!".to_string(), - )); - } + if let Some(scopes) = &info.scopes { + if scopes.is_restricted() { + return Err(ApiError::InvalidInput( + "Invalid scopes requested!".to_string(), + )); + } - sqlx::query!( - " + sqlx::query!( + " UPDATE pats SET scopes = $1 WHERE id = $2 ", - scopes.bits() as i64, - pat.id.0 - ) - .execute(&mut *transaction) - .await?; - } - if let Some(name) = &info.name { - sqlx::query!( - " + scopes.bits() as i64, + pat.id.0 + ) + .execute(&mut *transaction) + .await?; + } + if let Some(name) = &info.name { + sqlx::query!( + " UPDATE pats SET name = $1 WHERE id = $2 ", - name, - pat.id.0 - ) - .execute(&mut *transaction) - .await?; + name, + pat.id.0 + ) + .execute(&mut *transaction) + .await?; + } + if let Some(expires) = &info.expires { + if expires < &Utc::now() { + return Err(ApiError::InvalidInput( + "Expire date must be in the future!".to_string(), + )); } - if let Some(expires) = &info.expires { - if expires < &Utc::now() { - return Err(ApiError::InvalidInput( - "Expire date must be in the future!".to_string(), - )); - } - sqlx::query!( - " + sqlx::query!( + " UPDATE pats SET expires = $1 WHERE id = $2 ", - expires, - pat.id.0 - ) - .execute(&mut *transaction) - .await?; - } - - transaction.commit().await?; - database::models::pat_item::DBPersonalAccessToken::clear_cache( - vec![(Some(pat.id), Some(pat.access_token), Some(pat.user_id))], - &redis, + expires, + pat.id.0 ) + .execute(&mut *transaction) .await?; } + + transaction.commit().await?; + database::models::pat_item::DBPersonalAccessToken::clear_cache( + vec![(Some(pat.id), Some(pat.access_token), Some(pat.user_id))], + &redis, + ) + .await?; } Ok(HttpResponse::NoContent().finish()) @@ -276,21 +276,21 @@ pub async fn delete_pat( ) .await?; - if let Some(pat) = pat { - if pat.user_id == user.id.into() { - let mut transaction = pool.begin().await?; - database::models::pat_item::DBPersonalAccessToken::remove( - pat.id, - &mut transaction, - ) - .await?; - transaction.commit().await?; - database::models::pat_item::DBPersonalAccessToken::clear_cache( - vec![(Some(pat.id), Some(pat.access_token), Some(pat.user_id))], - &redis, - ) - .await?; - } + if let Some(pat) = pat + && pat.user_id == user.id.into() + { + let mut transaction = pool.begin().await?; + database::models::pat_item::DBPersonalAccessToken::remove( + pat.id, + &mut transaction, + ) + .await?; + transaction.commit().await?; + database::models::pat_item::DBPersonalAccessToken::clear_cache( + vec![(Some(pat.id), Some(pat.access_token), Some(pat.user_id))], + &redis, + ) + .await?; } Ok(HttpResponse::NoContent().finish()) diff --git a/apps/labrinth/src/routes/internal/session.rs b/apps/labrinth/src/routes/internal/session.rs index 63ac84bd81..1b20e3aee9 100644 --- a/apps/labrinth/src/routes/internal/session.rs +++ b/apps/labrinth/src/routes/internal/session.rs @@ -185,21 +185,21 @@ pub async fn delete( let session = DBSession::get(info.into_inner().0, &**pool, &redis).await?; - if let Some(session) = session { - if session.user_id == current_user.id.into() { - let mut transaction = pool.begin().await?; - DBSession::remove(session.id, &mut transaction).await?; - transaction.commit().await?; - DBSession::clear_cache( - vec![( - Some(session.id), - Some(session.session), - Some(session.user_id), - )], - &redis, - ) - .await?; - } + if let Some(session) = session + && session.user_id == current_user.id.into() + { + let mut transaction = pool.begin().await?; + DBSession::remove(session.id, &mut transaction).await?; + transaction.commit().await?; + DBSession::clear_cache( + vec![( + Some(session.id), + Some(session.session), + Some(session.user_id), + )], + &redis, + ) + .await?; } Ok(HttpResponse::NoContent().body("")) diff --git a/apps/labrinth/src/routes/internal/statuses.rs b/apps/labrinth/src/routes/internal/statuses.rs index 7be8d40eae..416ea80534 100644 --- a/apps/labrinth/src/routes/internal/statuses.rs +++ b/apps/labrinth/src/routes/internal/statuses.rs @@ -401,14 +401,13 @@ async fn broadcast_to_known_local_friends( friend.user_id }; - if friend.accepted { - if let Some(socket_ids) = + if friend.accepted + && let Some(socket_ids) = sockets.sockets_by_user_id.get(&friend_id.into()) - { - for socket_id in socket_ids.iter() { - if let Some(socket) = sockets.sockets.get(&socket_id) { - let _ = send_message(socket.value(), &message).await; - } + { + for socket_id in socket_ids.iter() { + if let Some(socket) = sockets.sockets.get(&socket_id) { + let _ = send_message(socket.value(), &message).await; } } } diff --git a/apps/labrinth/src/routes/v3/analytics_get.rs b/apps/labrinth/src/routes/v3/analytics_get.rs index b32f5b0f8c..b2c615726c 100644 --- a/apps/labrinth/src/routes/v3/analytics_get.rs +++ b/apps/labrinth/src/routes/v3/analytics_get.rs @@ -387,17 +387,16 @@ pub async fn revenue_get( .map(|x| (x.to_string(), HashMap::new())) .collect::>(); for value in payouts_values { - if let Some(mod_id) = value.mod_id { - if let Some(amount) = value.amount_sum { - if let Some(interval_start) = value.interval_start { - let id_string = to_base62(mod_id as u64); - if !hm.contains_key(&id_string) { - hm.insert(id_string.clone(), HashMap::new()); - } - if let Some(hm) = hm.get_mut(&id_string) { - hm.insert(interval_start.timestamp(), amount); - } - } + if let Some(mod_id) = value.mod_id + && let Some(amount) = value.amount_sum + && let Some(interval_start) = value.interval_start + { + let id_string = to_base62(mod_id as u64); + if !hm.contains_key(&id_string) { + hm.insert(id_string.clone(), HashMap::new()); + } + if let Some(hm) = hm.get_mut(&id_string) { + hm.insert(interval_start.timestamp(), amount); } } } diff --git a/apps/labrinth/src/routes/v3/collections.rs b/apps/labrinth/src/routes/v3/collections.rs index ab8058e0f6..15488ba056 100644 --- a/apps/labrinth/src/routes/v3/collections.rs +++ b/apps/labrinth/src/routes/v3/collections.rs @@ -192,10 +192,10 @@ pub async fn collection_get( .map(|x| x.1) .ok(); - if let Some(data) = collection_data { - if is_visible_collection(&data, &user_option, false).await? { - return Ok(HttpResponse::Ok().json(Collection::from(data))); - } + if let Some(data) = collection_data + && is_visible_collection(&data, &user_option, false).await? + { + return Ok(HttpResponse::Ok().json(Collection::from(data))); } Err(ApiError::NotFound) } diff --git a/apps/labrinth/src/routes/v3/payouts.rs b/apps/labrinth/src/routes/v3/payouts.rs index 1dca7939d9..19a0d4814f 100644 --- a/apps/labrinth/src/routes/v3/payouts.rs +++ b/apps/labrinth/src/routes/v3/payouts.rs @@ -536,11 +536,9 @@ pub async fn create_payout( Some(true), ) .await + && let Some(data) = res.items.first() { - if let Some(data) = res.items.first() { - payout_item.platform_id = - Some(data.payout_item_id.clone()); - } + payout_item.platform_id = Some(data.payout_item_id.clone()); } } diff --git a/apps/labrinth/src/routes/v3/projects.rs b/apps/labrinth/src/routes/v3/projects.rs index c6be6e5a66..eb4dadb666 100644 --- a/apps/labrinth/src/routes/v3/projects.rs +++ b/apps/labrinth/src/routes/v3/projects.rs @@ -182,10 +182,10 @@ pub async fn project_get( .map(|x| x.1) .ok(); - if let Some(data) = project_data { - if is_visible_project(&data.inner, &user_option, &pool, false).await? { - return Ok(HttpResponse::Ok().json(Project::from(data))); - } + if let Some(data) = project_data + && is_visible_project(&data.inner, &user_option, &pool, false).await? + { + return Ok(HttpResponse::Ok().json(Project::from(data))); } Err(ApiError::NotFound) } @@ -403,34 +403,36 @@ pub async fn project_edit( .await?; } - if status.is_searchable() && !project_item.inner.webhook_sent { - if let Ok(webhook_url) = dotenvy::var("PUBLIC_DISCORD_WEBHOOK") { - crate::util::webhook::send_discord_webhook( - project_item.inner.id.into(), - &pool, - &redis, - webhook_url, - None, - ) - .await - .ok(); + if status.is_searchable() + && !project_item.inner.webhook_sent + && let Ok(webhook_url) = dotenvy::var("PUBLIC_DISCORD_WEBHOOK") + { + crate::util::webhook::send_discord_webhook( + project_item.inner.id.into(), + &pool, + &redis, + webhook_url, + None, + ) + .await + .ok(); - sqlx::query!( - " + sqlx::query!( + " UPDATE mods SET webhook_sent = TRUE WHERE id = $1 ", - id as db_ids::DBProjectId, - ) - .execute(&mut *transaction) - .await?; - } + id as db_ids::DBProjectId, + ) + .execute(&mut *transaction) + .await?; } - if user.role.is_mod() { - if let Ok(webhook_url) = dotenvy::var("MODERATION_SLACK_WEBHOOK") { - crate::util::webhook::send_slack_webhook( + if user.role.is_mod() + && let Ok(webhook_url) = dotenvy::var("MODERATION_SLACK_WEBHOOK") + { + crate::util::webhook::send_slack_webhook( project_item.inner.id.into(), &pool, &redis, @@ -449,7 +451,6 @@ pub async fn project_edit( ) .await .ok(); - } } if team_member.is_none_or(|x| !x.accepted) { @@ -692,45 +693,45 @@ pub async fn project_edit( .await?; } - if let Some(links) = &new_project.link_urls { - if !links.is_empty() { - if !perms.contains(ProjectPermissions::EDIT_DETAILS) { - return Err(ApiError::CustomAuthentication( + if let Some(links) = &new_project.link_urls + && !links.is_empty() + { + if !perms.contains(ProjectPermissions::EDIT_DETAILS) { + return Err(ApiError::CustomAuthentication( "You do not have the permissions to edit the links of this project!" .to_string(), )); - } + } - let ids_to_delete = links.keys().cloned().collect::>(); - // Deletes all links from hashmap- either will be deleted or be replaced - sqlx::query!( - " + let ids_to_delete = links.keys().cloned().collect::>(); + // Deletes all links from hashmap- either will be deleted or be replaced + sqlx::query!( + " DELETE FROM mods_links WHERE joining_mod_id = $1 AND joining_platform_id IN ( SELECT id FROM link_platforms WHERE name = ANY($2) ) ", - id as db_ids::DBProjectId, - &ids_to_delete - ) - .execute(&mut *transaction) - .await?; + id as db_ids::DBProjectId, + &ids_to_delete + ) + .execute(&mut *transaction) + .await?; - for (platform, url) in links { - if let Some(url) = url { - let platform_id = - db_models::categories::LinkPlatform::get_id( - platform, - &mut *transaction, - ) - .await? - .ok_or_else(|| { - ApiError::InvalidInput(format!( - "Platform {} does not exist.", - platform.clone() - )) - })?; - sqlx::query!( + for (platform, url) in links { + if let Some(url) = url { + let platform_id = db_models::categories::LinkPlatform::get_id( + platform, + &mut *transaction, + ) + .await? + .ok_or_else(|| { + ApiError::InvalidInput(format!( + "Platform {} does not exist.", + platform.clone() + )) + })?; + sqlx::query!( " INSERT INTO mods_links (joining_mod_id, joining_platform_id, url) VALUES ($1, $2, $3) @@ -741,7 +742,6 @@ pub async fn project_edit( ) .execute(&mut *transaction) .await?; - } } } } @@ -2430,7 +2430,7 @@ pub async fn project_get_organization( organization, team_members, ); - return Ok(HttpResponse::Ok().json(organization)); + Ok(HttpResponse::Ok().json(organization)) } else { Err(ApiError::NotFound) } diff --git a/apps/labrinth/src/routes/v3/teams.rs b/apps/labrinth/src/routes/v3/teams.rs index 29cd57a099..1a6b3e166f 100644 --- a/apps/labrinth/src/routes/v3/teams.rs +++ b/apps/labrinth/src/routes/v3/teams.rs @@ -767,12 +767,13 @@ pub async fn edit_team_member( )); } - if let Some(new_permissions) = edit_member.permissions { - if !permissions.contains(new_permissions) { - return Err(ApiError::InvalidInput( - "The new permissions have permissions that you don't have".to_string(), - )); - } + if let Some(new_permissions) = edit_member.permissions + && !permissions.contains(new_permissions) + { + return Err(ApiError::InvalidInput( + "The new permissions have permissions that you don't have" + .to_string(), + )); } if edit_member.organization_permissions.is_some() { @@ -800,13 +801,12 @@ pub async fn edit_team_member( } if let Some(new_permissions) = edit_member.organization_permissions + && !organization_permissions.contains(new_permissions) { - if !organization_permissions.contains(new_permissions) { - return Err(ApiError::InvalidInput( + return Err(ApiError::InvalidInput( "The new organization permissions have permissions that you don't have" .to_string(), )); - } } if edit_member.permissions.is_some() @@ -822,13 +822,13 @@ pub async fn edit_team_member( } } - if let Some(payouts_split) = edit_member.payouts_split { - if payouts_split < Decimal::ZERO || payouts_split > Decimal::from(5000) - { - return Err(ApiError::InvalidInput( - "Payouts split must be between 0 and 5000!".to_string(), - )); - } + if let Some(payouts_split) = edit_member.payouts_split + && (payouts_split < Decimal::ZERO + || payouts_split > Decimal::from(5000)) + { + return Err(ApiError::InvalidInput( + "Payouts split must be between 0 and 5000!".to_string(), + )); } DBTeamMember::edit_team_member( @@ -883,13 +883,13 @@ pub async fn transfer_ownership( DBTeam::get_association(id.into(), &**pool).await?; if let Some(TeamAssociationId::Project(pid)) = team_association_id { let result = DBProject::get_id(pid, &**pool, &redis).await?; - if let Some(project_item) = result { - if project_item.inner.organization_id.is_some() { - return Err(ApiError::InvalidInput( + if let Some(project_item) = result + && project_item.inner.organization_id.is_some() + { + return Err(ApiError::InvalidInput( "You cannot transfer ownership of a project team that is owend by an organization" .to_string(), )); - } } } diff --git a/apps/labrinth/src/routes/v3/threads.rs b/apps/labrinth/src/routes/v3/threads.rs index 364b94a44b..b8785db676 100644 --- a/apps/labrinth/src/routes/v3/threads.rs +++ b/apps/labrinth/src/routes/v3/threads.rs @@ -289,36 +289,33 @@ pub async fn thread_get( .await? .1; - if let Some(mut data) = thread_data { - if is_authorized_thread(&data, &user, &pool).await? { - let authors = &mut data.members; + if let Some(mut data) = thread_data + && is_authorized_thread(&data, &user, &pool).await? + { + let authors = &mut data.members; - authors.append( - &mut data - .messages - .iter() - .filter_map(|x| { - if x.hide_identity && !user.role.is_mod() { - None - } else { - x.author_id - } - }) - .collect::>(), - ); - - let users: Vec = database::models::DBUser::get_many_ids( - authors, &**pool, &redis, - ) - .await? - .into_iter() - .map(From::from) - .collect(); + authors.append( + &mut data + .messages + .iter() + .filter_map(|x| { + if x.hide_identity && !user.role.is_mod() { + None + } else { + x.author_id + } + }) + .collect::>(), + ); - return Ok( - HttpResponse::Ok().json(Thread::from(data, users, &user)) - ); - } + let users: Vec = + database::models::DBUser::get_many_ids(authors, &**pool, &redis) + .await? + .into_iter() + .map(From::from) + .collect(); + + return Ok(HttpResponse::Ok().json(Thread::from(data, users, &user))); } Err(ApiError::NotFound) } @@ -454,33 +451,32 @@ pub async fn thread_send_message( ) .await?; - if let Some(project) = project { - if project.inner.status != ProjectStatus::Processing - && user.role.is_mod() - { - let members = - database::models::DBTeamMember::get_from_team_full( - project.inner.team_id, - &**pool, - &redis, - ) - .await?; - - NotificationBuilder { - body: NotificationBody::ModeratorMessage { - thread_id: thread.id.into(), - message_id: id.into(), - project_id: Some(project.inner.id.into()), - report_id: None, - }, - } - .insert_many( - members.into_iter().map(|x| x.user_id).collect(), - &mut transaction, + if let Some(project) = project + && project.inner.status != ProjectStatus::Processing + && user.role.is_mod() + { + let members = + database::models::DBTeamMember::get_from_team_full( + project.inner.team_id, + &**pool, &redis, ) .await?; + + NotificationBuilder { + body: NotificationBody::ModeratorMessage { + thread_id: thread.id.into(), + message_id: id.into(), + project_id: Some(project.inner.id.into()), + report_id: None, + }, } + .insert_many( + members.into_iter().map(|x| x.user_id).collect(), + &mut transaction, + &redis, + ) + .await?; } } else if let Some(report_id) = thread.report_id { let report = database::models::report_item::DBReport::get( diff --git a/apps/labrinth/src/routes/v3/version_creation.rs b/apps/labrinth/src/routes/v3/version_creation.rs index d992fd6ca5..dd49340e26 100644 --- a/apps/labrinth/src/routes/v3/version_creation.rs +++ b/apps/labrinth/src/routes/v3/version_creation.rs @@ -522,10 +522,10 @@ async fn version_create_inner( .fetch_optional(pool) .await?; - if let Some(project_status) = project_status { - if project_status.status == ProjectStatus::Processing.as_str() { - moderation_queue.projects.insert(project_id.into()); - } + if let Some(project_status) = project_status + && project_status.status == ProjectStatus::Processing.as_str() + { + moderation_queue.projects.insert(project_id.into()); } Ok(HttpResponse::Ok().json(response)) @@ -871,16 +871,16 @@ pub async fn upload_file( ref format, ref files, } = validation_result + && dependencies.is_empty() { - if dependencies.is_empty() { - let hashes: Vec> = format - .files - .iter() - .filter_map(|x| x.hashes.get(&PackFileHash::Sha1)) - .map(|x| x.as_bytes().to_vec()) - .collect(); + let hashes: Vec> = format + .files + .iter() + .filter_map(|x| x.hashes.get(&PackFileHash::Sha1)) + .map(|x| x.as_bytes().to_vec()) + .collect(); - let res = sqlx::query!( + let res = sqlx::query!( " SELECT v.id version_id, v.mod_id project_id, h.hash hash FROM hashes h INNER JOIN files f on h.file_id = f.id @@ -892,45 +892,44 @@ pub async fn upload_file( .fetch_all(&mut **transaction) .await?; - for file in &format.files { - if let Some(dep) = res.iter().find(|x| { - Some(&*x.hash) - == file - .hashes - .get(&PackFileHash::Sha1) - .map(|x| x.as_bytes()) - }) { - dependencies.push(DependencyBuilder { - project_id: Some(models::DBProjectId(dep.project_id)), - version_id: Some(models::DBVersionId(dep.version_id)), - file_name: None, - dependency_type: DependencyType::Embedded.to_string(), - }); - } else if let Some(first_download) = file.downloads.first() { - dependencies.push(DependencyBuilder { - project_id: None, - version_id: None, - file_name: Some( - first_download - .rsplit('/') - .next() - .unwrap_or(first_download) - .to_string(), - ), - dependency_type: DependencyType::Embedded.to_string(), - }); - } + for file in &format.files { + if let Some(dep) = res.iter().find(|x| { + Some(&*x.hash) + == file + .hashes + .get(&PackFileHash::Sha1) + .map(|x| x.as_bytes()) + }) { + dependencies.push(DependencyBuilder { + project_id: Some(models::DBProjectId(dep.project_id)), + version_id: Some(models::DBVersionId(dep.version_id)), + file_name: None, + dependency_type: DependencyType::Embedded.to_string(), + }); + } else if let Some(first_download) = file.downloads.first() { + dependencies.push(DependencyBuilder { + project_id: None, + version_id: None, + file_name: Some( + first_download + .rsplit('/') + .next() + .unwrap_or(first_download) + .to_string(), + ), + dependency_type: DependencyType::Embedded.to_string(), + }); } + } - for file in files { - if !file.is_empty() { - dependencies.push(DependencyBuilder { - project_id: None, - version_id: None, - file_name: Some(file.to_string()), - dependency_type: DependencyType::Embedded.to_string(), - }); - } + for file in files { + if !file.is_empty() { + dependencies.push(DependencyBuilder { + project_id: None, + version_id: None, + file_name: Some(file.to_string()), + dependency_type: DependencyType::Embedded.to_string(), + }); } } } @@ -974,10 +973,10 @@ pub async fn upload_file( )); } - if let ValidationResult::Warning(msg) = validation_result { - if primary { - return Err(CreateError::InvalidInput(msg.to_string())); - } + if let ValidationResult::Warning(msg) = validation_result + && primary + { + return Err(CreateError::InvalidInput(msg.to_string())); } let url = format!("{cdn_url}/{file_path_encode}"); diff --git a/apps/labrinth/src/routes/v3/version_file.rs b/apps/labrinth/src/routes/v3/version_file.rs index f7d2defa0b..49567dd157 100644 --- a/apps/labrinth/src/routes/v3/version_file.rs +++ b/apps/labrinth/src/routes/v3/version_file.rs @@ -148,65 +148,55 @@ pub async fn get_update_from_hash( &redis, ) .await? - { - if let Some(project) = database::models::DBProject::get_id( + && let Some(project) = database::models::DBProject::get_id( file.project_id, &**pool, &redis, ) .await? - { - let mut versions = database::models::DBVersion::get_many( - &project.versions, - &**pool, - &redis, - ) - .await? - .into_iter() - .filter(|x| { - let mut bool = true; - if let Some(version_types) = &update_data.version_types { - bool &= version_types - .iter() - .any(|y| y.as_str() == x.inner.version_type); - } - if let Some(loaders) = &update_data.loaders { - bool &= x.loaders.iter().any(|y| loaders.contains(y)); - } - if let Some(loader_fields) = &update_data.loader_fields { - for (key, values) in loader_fields { - bool &= if let Some(x_vf) = x - .version_fields - .iter() - .find(|y| y.field_name == *key) - { - values - .iter() - .any(|v| x_vf.value.contains_json_value(v)) - } else { - true - }; - } - } - bool - }) - .sorted(); - - if let Some(first) = versions.next_back() { - if !is_visible_version( - &first.inner, - &user_option, - &pool, - &redis, - ) - .await? - { - return Err(ApiError::NotFound); + { + let mut versions = database::models::DBVersion::get_many( + &project.versions, + &**pool, + &redis, + ) + .await? + .into_iter() + .filter(|x| { + let mut bool = true; + if let Some(version_types) = &update_data.version_types { + bool &= version_types + .iter() + .any(|y| y.as_str() == x.inner.version_type); + } + if let Some(loaders) = &update_data.loaders { + bool &= x.loaders.iter().any(|y| loaders.contains(y)); + } + if let Some(loader_fields) = &update_data.loader_fields { + for (key, values) in loader_fields { + bool &= if let Some(x_vf) = + x.version_fields.iter().find(|y| y.field_name == *key) + { + values.iter().any(|v| x_vf.value.contains_json_value(v)) + } else { + true + }; } + } + bool + }) + .sorted(); - return Ok(HttpResponse::Ok() - .json(models::projects::Version::from(first))); + if let Some(first) = versions.next_back() { + if !is_visible_version(&first.inner, &user_option, &pool, &redis) + .await? + { + return Err(ApiError::NotFound); } + + return Ok( + HttpResponse::Ok().json(models::projects::Version::from(first)) + ); } } Err(ApiError::NotFound) @@ -398,13 +388,12 @@ pub async fn update_files( if let Some(version) = versions .iter() .find(|x| x.inner.project_id == file.project_id) + && let Some(hash) = file.hashes.get(&algorithm) { - if let Some(hash) = file.hashes.get(&algorithm) { - response.insert( - hash.clone(), - models::projects::Version::from(version.clone()), - ); - } + response.insert( + hash.clone(), + models::projects::Version::from(version.clone()), + ); } } @@ -484,69 +473,59 @@ pub async fn update_individual_files( for project in projects { for file in files.iter().filter(|x| x.project_id == project.inner.id) { - if let Some(hash) = file.hashes.get(&algorithm) { - if let Some(query_file) = + if let Some(hash) = file.hashes.get(&algorithm) + && let Some(query_file) = update_data.hashes.iter().find(|x| &x.hash == hash) - { - let version = all_versions - .iter() - .filter(|x| x.inner.project_id == file.project_id) - .filter(|x| { - let mut bool = true; - - if let Some(version_types) = - &query_file.version_types - { - bool &= version_types.iter().any(|y| { - y.as_str() == x.inner.version_type - }); - } - if let Some(loaders) = &query_file.loaders { - bool &= x - .loaders - .iter() - .any(|y| loaders.contains(y)); - } + { + let version = all_versions + .iter() + .filter(|x| x.inner.project_id == file.project_id) + .filter(|x| { + let mut bool = true; + + if let Some(version_types) = &query_file.version_types { + bool &= version_types + .iter() + .any(|y| y.as_str() == x.inner.version_type); + } + if let Some(loaders) = &query_file.loaders { + bool &= + x.loaders.iter().any(|y| loaders.contains(y)); + } - if let Some(loader_fields) = - &query_file.loader_fields - { - for (key, values) in loader_fields { - bool &= if let Some(x_vf) = x - .version_fields - .iter() - .find(|y| y.field_name == *key) - { - values.iter().any(|v| { - x_vf.value.contains_json_value(v) - }) - } else { - true - }; - } + if let Some(loader_fields) = &query_file.loader_fields { + for (key, values) in loader_fields { + bool &= if let Some(x_vf) = x + .version_fields + .iter() + .find(|y| y.field_name == *key) + { + values.iter().any(|v| { + x_vf.value.contains_json_value(v) + }) + } else { + true + }; } - bool - }) - .sorted() - .next_back(); - - if let Some(version) = version { - if is_visible_version( - &version.inner, - &user_option, - &pool, - &redis, - ) - .await? - { - response.insert( - hash.clone(), - models::projects::Version::from( - version.clone(), - ), - ); } - } + bool + }) + .sorted() + .next_back(); + + if let Some(version) = version + && is_visible_version( + &version.inner, + &user_option, + &pool, + &redis, + ) + .await? + { + response.insert( + hash.clone(), + models::projects::Version::from(version.clone()), + ); } } } diff --git a/apps/labrinth/src/routes/v3/versions.rs b/apps/labrinth/src/routes/v3/versions.rs index 5a921a52fa..cdca240744 100644 --- a/apps/labrinth/src/routes/v3/versions.rs +++ b/apps/labrinth/src/routes/v3/versions.rs @@ -106,13 +106,12 @@ pub async fn version_project_get_helper( || x.inner.version_number == id.1 }); - if let Some(version) = version { - if is_visible_version(&version.inner, &user_option, &pool, &redis) + if let Some(version) = version + && is_visible_version(&version.inner, &user_option, &pool, &redis) .await? - { - return Ok(HttpResponse::Ok() - .json(models::projects::Version::from(version))); - } + { + return Ok(HttpResponse::Ok() + .json(models::projects::Version::from(version))); } } @@ -190,12 +189,12 @@ pub async fn version_get_helper( .map(|x| x.1) .ok(); - if let Some(data) = version_data { - if is_visible_version(&data.inner, &user_option, &pool, &redis).await? { - return Ok( - HttpResponse::Ok().json(models::projects::Version::from(data)) - ); - } + if let Some(data) = version_data + && is_visible_version(&data.inner, &user_option, &pool, &redis).await? + { + return Ok( + HttpResponse::Ok().json(models::projects::Version::from(data)) + ); } Err(ApiError::NotFound) diff --git a/apps/labrinth/src/sync/status.rs b/apps/labrinth/src/sync/status.rs index 2e94625afb..58f4a9602e 100644 --- a/apps/labrinth/src/sync/status.rs +++ b/apps/labrinth/src/sync/status.rs @@ -15,14 +15,12 @@ pub async fn get_user_status( return Some(friend_status); } - if let Ok(mut conn) = redis.pool.get().await { - if let Ok(mut statuses) = + if let Ok(mut conn) = redis.pool.get().await + && let Ok(mut statuses) = conn.sscan::<_, String>(get_field_name(user)).await - { - if let Some(status_json) = statuses.next_item().await { - return serde_json::from_str::(&status_json).ok(); - } - } + && let Some(status_json) = statuses.next_item().await + { + return serde_json::from_str::(&status_json).ok(); } None diff --git a/apps/labrinth/src/util/img.rs b/apps/labrinth/src/util/img.rs index 680b484177..9287c88732 100644 --- a/apps/labrinth/src/util/img.rs +++ b/apps/labrinth/src/util/img.rs @@ -138,12 +138,11 @@ fn process_image( let (orig_width, orig_height) = img.dimensions(); let aspect_ratio = orig_width as f32 / orig_height as f32; - if let Some(target_width) = target_width { - if img.width() > target_width { - let new_height = - (target_width as f32 / aspect_ratio).round() as u32; - img = img.resize(target_width, new_height, FilterType::Lanczos3); - } + if let Some(target_width) = target_width + && img.width() > target_width + { + let new_height = (target_width as f32 / aspect_ratio).round() as u32; + img = img.resize(target_width, new_height, FilterType::Lanczos3); } if let Some(min_aspect_ratio) = min_aspect_ratio { diff --git a/apps/labrinth/src/util/ratelimit.rs b/apps/labrinth/src/util/ratelimit.rs index 4f7b103422..c64c801fe0 100644 --- a/apps/labrinth/src/util/ratelimit.rs +++ b/apps/labrinth/src/util/ratelimit.rs @@ -133,12 +133,11 @@ pub async fn rate_limit_middleware( .expect("Rate limiter not configured properly") .clone(); - if let Some(key) = req.headers().get("x-ratelimit-key") { - if key.to_str().ok() + if let Some(key) = req.headers().get("x-ratelimit-key") + && key.to_str().ok() == dotenvy::var("RATE_LIMIT_IGNORE_KEY").ok().as_deref() - { - return Ok(next.call(req).await?.map_into_left_body()); - } + { + return Ok(next.call(req).await?.map_into_left_body()); } let conn_info = req.connection_info().clone(); diff --git a/apps/labrinth/src/util/validate.rs b/apps/labrinth/src/util/validate.rs index dfa4b7a71f..06af103170 100644 --- a/apps/labrinth/src/util/validate.rs +++ b/apps/labrinth/src/util/validate.rs @@ -22,46 +22,47 @@ pub fn validation_errors_to_string( let key_option = map.keys().next(); - if let Some(field) = key_option { - if let Some(error) = map.get(field) { - return match error { - ValidationErrorsKind::Struct(errors) => { - validation_errors_to_string( + if let Some(field) = key_option + && let Some(error) = map.get(field) + { + return match error { + ValidationErrorsKind::Struct(errors) => { + validation_errors_to_string( + *errors.clone(), + Some(format!("of item {field}")), + ) + } + ValidationErrorsKind::List(list) => { + if let Some((index, errors)) = list.iter().next() { + output.push_str(&validation_errors_to_string( *errors.clone(), - Some(format!("of item {field}")), - ) + Some(format!("of list {field} with index {index}")), + )); } - ValidationErrorsKind::List(list) => { - if let Some((index, errors)) = list.iter().next() { - output.push_str(&validation_errors_to_string( - *errors.clone(), - Some(format!("of list {field} with index {index}")), - )); - } - output - } - ValidationErrorsKind::Field(errors) => { - if let Some(error) = errors.first() { - if let Some(adder) = adder { - write!( + output + } + ValidationErrorsKind::Field(errors) => { + if let Some(error) = errors.first() { + if let Some(adder) = adder { + write!( &mut output, "Field {field} {adder} failed validation with error: {}", error.code ).unwrap(); - } else { - write!( - &mut output, - "Field {field} failed validation with error: {}", - error.code - ).unwrap(); - } + } else { + write!( + &mut output, + "Field {field} failed validation with error: {}", + error.code + ) + .unwrap(); } - - output } - }; - } + + output + } + }; } String::new() diff --git a/apps/labrinth/src/util/webhook.rs b/apps/labrinth/src/util/webhook.rs index 88eaa1d6f5..1d7be03ab8 100644 --- a/apps/labrinth/src/util/webhook.rs +++ b/apps/labrinth/src/util/webhook.rs @@ -238,17 +238,17 @@ pub async fn send_slack_webhook( } }); - if let Some(icon_url) = metadata.project_icon_url { - if let Some(project_block) = project_block.as_object_mut() { - project_block.insert( - "accessory".to_string(), - serde_json::json!({ - "type": "image", - "image_url": icon_url, - "alt_text": metadata.project_title - }), - ); - } + if let Some(icon_url) = metadata.project_icon_url + && let Some(project_block) = project_block.as_object_mut() + { + project_block.insert( + "accessory".to_string(), + serde_json::json!({ + "type": "image", + "image_url": icon_url, + "alt_text": metadata.project_title + }), + ); } blocks.push(project_block); diff --git a/apps/labrinth/tests/common/permissions.rs b/apps/labrinth/tests/common/permissions.rs index e4ce62e1eb..00614a477e 100644 --- a/apps/labrinth/tests/common/permissions.rs +++ b/apps/labrinth/tests/common/permissions.rs @@ -222,10 +222,10 @@ impl<'a, A: Api> PermissionsTest<'a, A> { resp.status().as_u16() )); } - if resp.status() == StatusCode::OK { - if let Some(failure_json_check) = &self.failure_json_check { - failure_json_check(&test::read_body_json(resp).await); - } + if resp.status() == StatusCode::OK + && let Some(failure_json_check) = &self.failure_json_check + { + failure_json_check(&test::read_body_json(resp).await); } // Failure test- logged in on a non-team user @@ -246,10 +246,10 @@ impl<'a, A: Api> PermissionsTest<'a, A> { resp.status().as_u16() )); } - if resp.status() == StatusCode::OK { - if let Some(failure_json_check) = &self.failure_json_check { - failure_json_check(&test::read_body_json(resp).await); - } + if resp.status() == StatusCode::OK + && let Some(failure_json_check) = &self.failure_json_check + { + failure_json_check(&test::read_body_json(resp).await); } // Failure test- logged in with EVERY non-relevant permission @@ -270,10 +270,10 @@ impl<'a, A: Api> PermissionsTest<'a, A> { resp.status().as_u16() )); } - if resp.status() == StatusCode::OK { - if let Some(failure_json_check) = &self.failure_json_check { - failure_json_check(&test::read_body_json(resp).await); - } + if resp.status() == StatusCode::OK + && let Some(failure_json_check) = &self.failure_json_check + { + failure_json_check(&test::read_body_json(resp).await); } // Patch user's permissions to success permissions @@ -300,10 +300,10 @@ impl<'a, A: Api> PermissionsTest<'a, A> { resp.status().as_u16() )); } - if resp.status() == StatusCode::OK { - if let Some(success_json_check) = &self.success_json_check { - success_json_check(&test::read_body_json(resp).await); - } + if resp.status() == StatusCode::OK + && let Some(success_json_check) = &self.success_json_check + { + success_json_check(&test::read_body_json(resp).await); } // If the remove_user flag is set, remove the user from the project diff --git a/clippy.toml b/clippy.toml index 434acf91af..b77c92414e 100644 --- a/clippy.toml +++ b/clippy.toml @@ -1,2 +1,2 @@ allow-dbg-in-tests = true -msrv = "1.88.0" +msrv = "1.89.0" diff --git a/packages/app-lib/src/api/handler.rs b/packages/app-lib/src/api/handler.rs index 67e36b2f12..362f6de01a 100644 --- a/packages/app-lib/src/api/handler.rs +++ b/packages/app-lib/src/api/handler.rs @@ -50,10 +50,10 @@ pub async fn parse_command( // We assume anything else is a filepath to an .mrpack file let path = PathBuf::from(command_string); let path = io::canonicalize(path)?; - if let Some(ext) = path.extension() { - if ext == "mrpack" { - return Ok(CommandPayload::RunMRPack { path }); - } + if let Some(ext) = path.extension() + && ext == "mrpack" + { + return Ok(CommandPayload::RunMRPack { path }); } emit_warning(&format!( "Invalid command, unrecognized filetype: {}", diff --git a/packages/app-lib/src/api/jre.rs b/packages/app-lib/src/api/jre.rs index 412d447204..680b852956 100644 --- a/packages/app-lib/src/api/jre.rs +++ b/packages/app-lib/src/api/jre.rs @@ -106,13 +106,13 @@ pub async fn auto_install_java(java_version: u32) -> crate::Result { })?; // removes the old installation of java - if let Some(file) = archive.file_names().next() { - if let Some(dir) = file.split('/').next() { - let path = path.join(dir); + if let Some(file) = archive.file_names().next() + && let Some(dir) = file.split('/').next() + { + let path = path.join(dir); - if path.exists() { - io::remove_dir_all(path).await?; - } + if path.exists() { + io::remove_dir_all(path).await?; } } diff --git a/packages/app-lib/src/api/minecraft_auth.rs b/packages/app-lib/src/api/minecraft_auth.rs index 568a6aca12..ae5e1a6d7c 100644 --- a/packages/app-lib/src/api/minecraft_auth.rs +++ b/packages/app-lib/src/api/minecraft_auth.rs @@ -54,11 +54,11 @@ pub async fn remove_user(uuid: uuid::Uuid) -> crate::Result<()> { if let Some((uuid, user)) = users.remove(&uuid) { Credentials::remove(uuid, &state.pool).await?; - if user.active { - if let Some((_, mut user)) = users.into_iter().next() { - user.active = true; - user.upsert(&state.pool).await?; - } + if user.active + && let Some((_, mut user)) = users.into_iter().next() + { + user.active = true; + user.upsert(&state.pool).await?; } } diff --git a/packages/app-lib/src/api/pack/import/atlauncher.rs b/packages/app-lib/src/api/pack/import/atlauncher.rs index 1c8ba084db..f5e052c649 100644 --- a/packages/app-lib/src/api/pack/import/atlauncher.rs +++ b/packages/app-lib/src/api/pack/import/atlauncher.rs @@ -221,14 +221,14 @@ async fn import_atlauncher_unmanaged( .unwrap_or_else(|| backup_name.to_string()); prof.install_stage = ProfileInstallStage::PackInstalling; - if let Some(ref project_id) = description.project_id { - if let Some(ref version_id) = description.version_id { - prof.linked_data = Some(LinkedData { - project_id: project_id.clone(), - version_id: version_id.clone(), - locked: true, - }) - } + if let Some(ref project_id) = description.project_id + && let Some(ref version_id) = description.version_id + { + prof.linked_data = Some(LinkedData { + project_id: project_id.clone(), + version_id: version_id.clone(), + locked: true, + }) } prof.icon_path = description diff --git a/packages/app-lib/src/api/pack/install_from.rs b/packages/app-lib/src/api/pack/install_from.rs index d3ec041cff..29f616aac1 100644 --- a/packages/app-lib/src/api/pack/install_from.rs +++ b/packages/app-lib/src/api/pack/install_from.rs @@ -383,18 +383,18 @@ pub async fn set_profile_information( .unwrap_or_else(|| backup_name.to_string()); prof.install_stage = ProfileInstallStage::PackInstalling; - if let Some(ref project_id) = description.project_id { - if let Some(ref version_id) = description.version_id { - prof.linked_data = Some(LinkedData { - project_id: project_id.clone(), - version_id: version_id.clone(), - locked: if !ignore_lock { - true - } else { - prof.linked_data.as_ref().is_none_or(|x| x.locked) - }, - }) - } + if let Some(ref project_id) = description.project_id + && let Some(ref version_id) = description.version_id + { + prof.linked_data = Some(LinkedData { + project_id: project_id.clone(), + version_id: version_id.clone(), + locked: if !ignore_lock { + true + } else { + prof.linked_data.as_ref().is_none_or(|x| x.locked) + }, + }) } prof.icon_path = description diff --git a/packages/app-lib/src/api/pack/install_mrpack.rs b/packages/app-lib/src/api/pack/install_mrpack.rs index d65991a65f..9831b8e542 100644 --- a/packages/app-lib/src/api/pack/install_mrpack.rs +++ b/packages/app-lib/src/api/pack/install_mrpack.rs @@ -149,13 +149,12 @@ pub async fn install_zipped_mrpack_files( let profile_path = profile_path.clone(); async move { //TODO: Future update: prompt user for optional files in a modpack - if let Some(env) = project.env { - if env + if let Some(env) = project.env + && env .get(&EnvType::Client) .is_some_and(|x| x == &SideType::Unsupported) - { - return Ok(()); - } + { + return Ok(()); } let file = fetch_mirrors( @@ -375,12 +374,12 @@ pub async fn remove_all_related_files( ) .await? { - if let Some(metadata) = &project.metadata { - if to_remove.contains(&metadata.project_id) { - let path = profile_full_path.join(file_path); - if path.exists() { - io::remove_file(&path).await?; - } + if let Some(metadata) = &project.metadata + && to_remove.contains(&metadata.project_id) + { + let path = profile_full_path.join(file_path); + if path.exists() { + io::remove_file(&path).await?; } } } diff --git a/packages/app-lib/src/api/profile/mod.rs b/packages/app-lib/src/api/profile/mod.rs index e30ff2e3b8..f5338017cf 100644 --- a/packages/app-lib/src/api/profile/mod.rs +++ b/packages/app-lib/src/api/profile/mod.rs @@ -337,28 +337,26 @@ pub async fn update_project( ) .await? .remove(project_path) + && let Some(update_version) = &file.update_version_id { - if let Some(update_version) = &file.update_version_id { - let path = Profile::add_project_version( - profile_path, - update_version, - &state.pool, - &state.fetch_semaphore, - &state.io_semaphore, - ) - .await?; - - if path != project_path { - Profile::remove_project(profile_path, project_path).await?; - } + let path = Profile::add_project_version( + profile_path, + update_version, + &state.pool, + &state.fetch_semaphore, + &state.io_semaphore, + ) + .await?; - if !skip_send_event.unwrap_or(false) { - emit_profile(profile_path, ProfilePayloadType::Edited) - .await?; - } + if path != project_path { + Profile::remove_project(profile_path, project_path).await?; + } - return Ok(path); + if !skip_send_event.unwrap_or(false) { + emit_profile(profile_path, ProfilePayloadType::Edited).await?; } + + return Ok(path); } Err(crate::ErrorKind::InputError( @@ -479,10 +477,10 @@ pub async fn export_mrpack( let included_export_candidates = included_export_candidates .into_iter() .filter(|x| { - if let Some(f) = PathBuf::from(x).file_name() { - if f.to_string_lossy().starts_with(".DS_Store") { - return false; - } + if let Some(f) = PathBuf::from(x).file_name() + && f.to_string_lossy().starts_with(".DS_Store") + { + return false; } true }) diff --git a/packages/app-lib/src/event/mod.rs b/packages/app-lib/src/event/mod.rs index 92b7b53fa6..7548114a97 100644 --- a/packages/app-lib/src/event/mod.rs +++ b/packages/app-lib/src/event/mod.rs @@ -184,6 +184,7 @@ pub enum LoadingBarType { } #[derive(Serialize, Clone)] +#[cfg(feature = "tauri")] pub struct LoadingPayload { pub event: LoadingBarType, pub loader_uuid: Uuid, @@ -192,11 +193,7 @@ pub struct LoadingPayload { } #[derive(Serialize, Clone)] -pub struct OfflinePayload { - pub offline: bool, -} - -#[derive(Serialize, Clone)] +#[cfg(feature = "tauri")] pub struct WarningPayload { pub message: String, } @@ -220,12 +217,14 @@ pub enum CommandPayload { } #[derive(Serialize, Clone)] +#[cfg(feature = "tauri")] pub struct ProcessPayload { pub profile_path_id: String, pub uuid: Uuid, pub event: ProcessPayloadType, pub message: String, } + #[derive(Serialize, Clone, Debug)] #[serde(rename_all = "snake_case")] pub enum ProcessPayloadType { @@ -234,11 +233,13 @@ pub enum ProcessPayloadType { } #[derive(Serialize, Clone)] +#[cfg(feature = "tauri")] pub struct ProfilePayload { pub profile_path_id: String, #[serde(flatten)] pub event: ProfilePayloadType, } + #[derive(Serialize, Clone)] #[serde(tag = "event", rename_all = "snake_case")] pub enum ProfilePayloadType { @@ -257,6 +258,16 @@ pub enum ProfilePayloadType { Removed, } +#[derive(Serialize, Clone)] +#[serde(rename_all = "snake_case")] +#[serde(tag = "event")] +pub enum FriendPayload { + FriendRequest { from: UserId }, + UserOffline { id: UserId }, + StatusUpdate { user_status: UserStatus }, + StatusSync, +} + #[derive(Debug, thiserror::Error)] pub enum EventError { #[error("Event state was not properly initialized")] @@ -269,13 +280,3 @@ pub enum EventError { #[error("Tauri error: {0}")] TauriError(#[from] tauri::Error), } - -#[derive(Serialize, Clone)] -#[serde(rename_all = "snake_case")] -#[serde(tag = "event")] -pub enum FriendPayload { - FriendRequest { from: UserId }, - UserOffline { id: UserId }, - StatusUpdate { user_status: UserStatus }, - StatusSync, -} diff --git a/packages/app-lib/src/launcher/args.rs b/packages/app-lib/src/launcher/args.rs index 23ed3af671..350d67c0b4 100644 --- a/packages/app-lib/src/launcher/args.rs +++ b/packages/app-lib/src/launcher/args.rs @@ -32,15 +32,15 @@ pub fn get_class_paths( let mut cps = libraries .iter() .filter_map(|library| { - if let Some(rules) = &library.rules { - if !parse_rules( + if let Some(rules) = &library.rules + && !parse_rules( rules, java_arch, &QuickPlayType::None, minecraft_updated, - ) { - return None; - } + ) + { + return None; } if !library.include_in_classpath { @@ -504,10 +504,10 @@ pub async fn get_processor_main_class( let mut line = line.map_err(IOError::from)?; line.retain(|c| !c.is_whitespace()); - if line.starts_with("Main-Class:") { - if let Some(class) = line.split(':').nth(1) { - return Ok(Some(class.to_string())); - } + if line.starts_with("Main-Class:") + && let Some(class) = line.split(':').nth(1) + { + return Ok(Some(class.to_string())); } } diff --git a/packages/app-lib/src/launcher/download.rs b/packages/app-lib/src/launcher/download.rs index 4a0a5879f4..8fbece3e4a 100644 --- a/packages/app-lib/src/launcher/download.rs +++ b/packages/app-lib/src/launcher/download.rs @@ -290,12 +290,11 @@ pub async fn download_libraries( loading_try_for_each_concurrent( stream::iter(libraries.iter()) .map(Ok::<&Library, crate::Error>), None, loading_bar,loading_amount,num_files, None,|library| async move { - if let Some(rules) = &library.rules { - if !parse_rules(rules, java_arch, &QuickPlayType::None, minecraft_updated) { + if let Some(rules) = &library.rules + && !parse_rules(rules, java_arch, &QuickPlayType::None, minecraft_updated) { tracing::trace!("Skipped library {}", &library.name); return Ok(()); } - } if !library.downloadable { tracing::trace!("Skipped non-downloadable library {}", &library.name); @@ -311,15 +310,14 @@ pub async fn download_libraries( return Ok(()); } - if let Some(d::minecraft::LibraryDownloads { artifact: Some(ref artifact), ..}) = library.downloads { - if !artifact.url.is_empty(){ + if let Some(d::minecraft::LibraryDownloads { artifact: Some(ref artifact), ..}) = library.downloads + && !artifact.url.is_empty(){ let bytes = fetch(&artifact.url, Some(&artifact.sha1), &st.fetch_semaphore, &st.pool) .await?; write(&path, &bytes, &st.io_semaphore).await?; tracing::trace!("Fetched library {} to path {:?}", &library.name, &path); return Ok::<_, crate::Error>(()); } - } let url = [ library diff --git a/packages/app-lib/src/launcher/mod.rs b/packages/app-lib/src/launcher/mod.rs index f5c4e50b05..64eb1d90e0 100644 --- a/packages/app-lib/src/launcher/mod.rs +++ b/packages/app-lib/src/launcher/mod.rs @@ -341,10 +341,10 @@ pub async fn install_minecraft( // Forge processors (90-100) for (index, processor) in processors.iter().enumerate() { - if let Some(sides) = &processor.sides { - if !sides.contains(&String::from("client")) { - continue; - } + if let Some(sides) = &processor.sides + && !sides.contains(&String::from("client")) + { + continue; } let cp = { diff --git a/packages/app-lib/src/state/dirs.rs b/packages/app-lib/src/state/dirs.rs index 21f62eb781..1f577f7c45 100644 --- a/packages/app-lib/src/state/dirs.rs +++ b/packages/app-lib/src/state/dirs.rs @@ -385,10 +385,10 @@ impl DirectoryInfo { return Err(e); } } else { - if let Some(disk_usage) = get_disk_usage(&move_dir)? { - if total_size > disk_usage { - return Err(crate::ErrorKind::DirectoryMoveError(format!("Not enough space to move directory to {}: only {} bytes available", app_dir.display(), disk_usage)).into()); - } + if let Some(disk_usage) = get_disk_usage(&move_dir)? + && total_size > disk_usage + { + return Err(crate::ErrorKind::DirectoryMoveError(format!("Not enough space to move directory to {}: only {} bytes available", app_dir.display(), disk_usage)).into()); } let loader_bar_id = Arc::new(&loader_bar_id); diff --git a/packages/app-lib/src/state/friends.rs b/packages/app-lib/src/state/friends.rs index 0079daa40b..0d3a9e2a8d 100644 --- a/packages/app-lib/src/state/friends.rs +++ b/packages/app-lib/src/state/friends.rs @@ -9,7 +9,7 @@ use ariadne::networking::message::{ ClientToServerMessage, ServerToClientMessage, }; use ariadne::users::UserStatus; -use async_tungstenite::WebSocketStream; +use async_tungstenite::WebSocketSender; use async_tungstenite::tokio::{ConnectStream, connect_async}; use async_tungstenite::tungstenite::Message; use async_tungstenite::tungstenite::client::IntoClientRequest; @@ -17,7 +17,6 @@ use bytes::Bytes; use chrono::{DateTime, Utc}; use dashmap::DashMap; use either::Either; -use futures::stream::SplitSink; use futures::{SinkExt, StreamExt}; use reqwest::Method; use reqwest::header::HeaderValue; @@ -32,7 +31,7 @@ use tokio::sync::{Mutex, RwLock}; use uuid::Uuid; pub(super) type WriteSocket = - Arc, Message>>>>; + Arc>>>; pub(super) type TunnelSockets = Arc>>; pub struct FriendsSocket { @@ -180,27 +179,24 @@ impl FriendsSocket { ServerToClientMessage::FriendSocketStoppedListening { .. } => {}, // TODO ServerToClientMessage::SocketConnected { to_socket, new_socket } => { - if let Some(connected_to) = sockets.get(&to_socket) { - if let InternalTunnelSocket::Listening(local_addr) = *connected_to.value().clone() { - if let Ok(new_stream) = TcpStream::connect(local_addr).await { + if let Some(connected_to) = sockets.get(&to_socket) + && let InternalTunnelSocket::Listening(local_addr) = *connected_to.value().clone() + && let Ok(new_stream) = TcpStream::connect(local_addr).await { let (read, write) = new_stream.into_split(); sockets.insert(new_socket, Arc::new(InternalTunnelSocket::Connected(Mutex::new(write)))); Self::socket_read_loop(write_handle.clone(), read, new_socket); continue; } - } - } let _ = Self::send_message(&write_handle, ClientToServerMessage::SocketClose { socket: new_socket }).await; }, ServerToClientMessage::SocketClosed { socket } => { sockets.remove_if(&socket, |_, x| matches!(*x.clone(), InternalTunnelSocket::Connected(_))); }, ServerToClientMessage::SocketData { socket, data } => { - if let Some(mut socket) = sockets.get_mut(&socket) { - if let InternalTunnelSocket::Connected(ref stream) = *socket.value_mut().clone() { + if let Some(mut socket) = sockets.get_mut(&socket) + && let InternalTunnelSocket::Connected(ref stream) = *socket.value_mut().clone() { let _ = stream.lock().await.write_all(&data).await; } - } }, } } diff --git a/packages/app-lib/src/state/fs_watcher.rs b/packages/app-lib/src/state/fs_watcher.rs index 12bd89313e..c0b1128d92 100644 --- a/packages/app-lib/src/state/fs_watcher.rs +++ b/packages/app-lib/src/state/fs_watcher.rs @@ -100,8 +100,8 @@ pub async fn init_watcher() -> crate::Result { let profile_path_str = profile_path_str.clone(); let world = world.clone(); tokio::spawn(async move { - if let Ok(state) = State::get().await { - if let Err(e) = attached_world_data::AttachedWorldData::remove_for_world( + if let Ok(state) = State::get().await + && let Err(e) = attached_world_data::AttachedWorldData::remove_for_world( &profile_path_str, WorldType::Singleplayer, &world, @@ -109,7 +109,6 @@ pub async fn init_watcher() -> crate::Result { ).await { tracing::warn!("Failed to remove AttachedWorldData for '{world}': {e}") } - } }); } Some(ProfilePayloadType::WorldUpdated { world }) @@ -150,14 +149,14 @@ pub(crate) async fn watch_profiles_init( ) { if let Ok(profiles_dir) = std::fs::read_dir(dirs.profiles_dir()) { for profile_dir in profiles_dir { - if let Ok(file_name) = profile_dir.map(|x| x.file_name()) { - if let Some(file_name) = file_name.to_str() { - if file_name.starts_with(".DS_Store") { - continue; - }; + if let Ok(file_name) = profile_dir.map(|x| x.file_name()) + && let Some(file_name) = file_name.to_str() + { + if file_name.starts_with(".DS_Store") { + continue; + }; - watch_profile(file_name, watcher, dirs).await; - } + watch_profile(file_name, watcher, dirs).await; } } } diff --git a/packages/app-lib/src/state/legacy_converter.rs b/packages/app-lib/src/state/legacy_converter.rs index 7a04defde6..df043de35c 100644 --- a/packages/app-lib/src/state/legacy_converter.rs +++ b/packages/app-lib/src/state/legacy_converter.rs @@ -76,10 +76,9 @@ where .loaded_config_dir .clone() .and_then(|x| x.to_str().map(|x| x.to_string())) + && path != old_launcher_root_str { - if path != old_launcher_root_str { - settings.custom_dir = Some(path); - } + settings.custom_dir = Some(path); } settings.prev_custom_dir = Some(old_launcher_root_str.clone()); @@ -136,31 +135,27 @@ where .await?; } - if let Some(device_token) = minecraft_auth.token { - if let Ok(private_key) = + if let Some(device_token) = minecraft_auth.token + && let Ok(private_key) = SigningKey::from_pkcs8_pem(&device_token.private_key) - { - if let Ok(uuid) = Uuid::parse_str(&device_token.id) { - DeviceTokenPair { - token: DeviceToken { - issue_instant: device_token.token.issue_instant, - not_after: device_token.token.not_after, - token: device_token.token.token, - display_claims: device_token - .token - .display_claims, - }, - key: DeviceTokenKey { - id: uuid, - key: private_key, - x: device_token.x, - y: device_token.y, - }, - } - .upsert(exec) - .await?; - } + && let Ok(uuid) = Uuid::parse_str(&device_token.id) + { + DeviceTokenPair { + token: DeviceToken { + issue_instant: device_token.token.issue_instant, + not_after: device_token.token.not_after, + token: device_token.token.token, + display_claims: device_token.token.display_claims, + }, + key: DeviceTokenKey { + id: uuid, + key: private_key, + x: device_token.x, + y: device_token.y, + }, } + .upsert(exec) + .await?; } } @@ -207,100 +202,93 @@ where update_version, .. } = project.metadata - { - if let Some(file) = version + && let Some(file) = version .files .iter() .find(|x| x.hashes.get("sha512") == Some(&sha512)) - { - if let Some(sha1) = file.hashes.get("sha1") { - if let Ok(metadata) = full_path.metadata() { - let file_name = format!( - "{}/{}", - profile.path, - path.replace('\\', "/") - .replace(".disabled", "") - ); - - cached_entries.push(CacheValue::FileHash( - CachedFileHash { - path: file_name, - size: metadata.len(), - hash: sha1.clone(), - project_type: ProjectType::get_from_parent_folder(&full_path), - }, - )); - } - - cached_entries.push(CacheValue::File( - CachedFile { - hash: sha1.clone(), - project_id: version.project_id.clone(), - version_id: version.id.clone(), - }, - )); - - if let Some(update_version) = update_version { - let mod_loader: ModLoader = - profile.metadata.loader.into(); - cached_entries.push( - CacheValue::FileUpdate( - CachedFileUpdate { - hash: sha1.clone(), - game_version: profile - .metadata - .game_version - .clone(), - loaders: vec![ - mod_loader - .as_str() - .to_string(), - ], - update_version_id: - update_version.id.clone(), - }, + && let Some(sha1) = file.hashes.get("sha1") + { + if let Ok(metadata) = full_path.metadata() { + let file_name = format!( + "{}/{}", + profile.path, + path.replace('\\', "/") + .replace(".disabled", "") + ); + + cached_entries.push(CacheValue::FileHash( + CachedFileHash { + path: file_name, + size: metadata.len(), + hash: sha1.clone(), + project_type: + ProjectType::get_from_parent_folder( + &full_path, ), - ); + }, + )); + } + + cached_entries.push(CacheValue::File(CachedFile { + hash: sha1.clone(), + project_id: version.project_id.clone(), + version_id: version.id.clone(), + })); + + if let Some(update_version) = update_version { + let mod_loader: ModLoader = + profile.metadata.loader.into(); + cached_entries.push(CacheValue::FileUpdate( + CachedFileUpdate { + hash: sha1.clone(), + game_version: profile + .metadata + .game_version + .clone(), + loaders: vec![ + mod_loader.as_str().to_string(), + ], + update_version_id: update_version + .id + .clone(), + }, + )); + + cached_entries.push(CacheValue::Version( + (*update_version).into(), + )); + } - cached_entries.push(CacheValue::Version( - (*update_version).into(), - )); + let members = members + .into_iter() + .map(|x| { + let user = User { + id: x.user.id, + username: x.user.username, + avatar_url: x.user.avatar_url, + bio: x.user.bio, + created: x.user.created, + role: x.user.role, + badges: 0, + }; + + cached_entries + .push(CacheValue::User(user.clone())); + + TeamMember { + team_id: x.team_id, + user, + is_owner: x.role == "Owner", + role: x.role, + ordering: x.ordering, } + }) + .collect::>(); - let members = members - .into_iter() - .map(|x| { - let user = User { - id: x.user.id, - username: x.user.username, - avatar_url: x.user.avatar_url, - bio: x.user.bio, - created: x.user.created, - role: x.user.role, - badges: 0, - }; - - cached_entries.push(CacheValue::User( - user.clone(), - )); - - TeamMember { - team_id: x.team_id, - user, - is_owner: x.role == "Owner", - role: x.role, - ordering: x.ordering, - } - }) - .collect::>(); - - cached_entries.push(CacheValue::Team(members)); - - cached_entries.push(CacheValue::Version( - (*version).into(), - )); - } - } + cached_entries.push(CacheValue::Team(members)); + + cached_entries + .push(CacheValue::Version((*version).into())); } } @@ -332,16 +320,15 @@ where .map(|x| x.id), groups: profile.metadata.groups, linked_data: profile.metadata.linked_data.and_then(|x| { - if let Some(project_id) = x.project_id { - if let Some(version_id) = x.version_id { - if let Some(locked) = x.locked { - return Some(LinkedData { - project_id, - version_id, - locked, - }); - } - } + if let Some(project_id) = x.project_id + && let Some(version_id) = x.version_id + && let Some(locked) = x.locked + { + return Some(LinkedData { + project_id, + version_id, + locked, + }); } None diff --git a/packages/app-lib/src/state/minecraft_auth.rs b/packages/app-lib/src/state/minecraft_auth.rs index fb9129989a..a0b8db9ef2 100644 --- a/packages/app-lib/src/state/minecraft_auth.rs +++ b/packages/app-lib/src/state/minecraft_auth.rs @@ -393,10 +393,9 @@ impl Credentials { .. }, ) = *err.raw + && (source.is_connect() || source.is_timeout()) { - if source.is_connect() || source.is_timeout() { - return Ok(Some(creds)); - } + return Ok(Some(creds)); } Err(err) @@ -640,36 +639,31 @@ impl DeviceTokenPair { .fetch_optional(exec) .await?; - if let Some(x) = res { - if let Ok(uuid) = Uuid::parse_str(&x.uuid) { - if let Ok(private_key) = - SigningKey::from_pkcs8_pem(&x.private_key) - { - return Ok(Some(Self { - token: DeviceToken { - issue_instant: Utc - .timestamp_opt(x.issue_instant, 0) - .single() - .unwrap_or_else(Utc::now), - not_after: Utc - .timestamp_opt(x.not_after, 0) - .single() - .unwrap_or_else(Utc::now), - token: x.token, - display_claims: serde_json::from_value( - x.display_claims, - ) - .unwrap_or_default(), - }, - key: DeviceTokenKey { - id: uuid, - key: private_key, - x: x.x, - y: x.y, - }, - })); - } - } + if let Some(x) = res + && let Ok(uuid) = Uuid::parse_str(&x.uuid) + && let Ok(private_key) = SigningKey::from_pkcs8_pem(&x.private_key) + { + return Ok(Some(Self { + token: DeviceToken { + issue_instant: Utc + .timestamp_opt(x.issue_instant, 0) + .single() + .unwrap_or_else(Utc::now), + not_after: Utc + .timestamp_opt(x.not_after, 0) + .single() + .unwrap_or_else(Utc::now), + token: x.token, + display_claims: serde_json::from_value(x.display_claims) + .unwrap_or_default(), + }, + key: DeviceTokenKey { + id: uuid, + key: private_key, + x: x.x, + y: x.y, + }, + })); } Ok(None) @@ -724,7 +718,7 @@ const MICROSOFT_CLIENT_ID: &str = "00000000402b5328"; const AUTH_REPLY_URL: &str = "https://login.live.com/oauth20_desktop.srf"; const REQUESTED_SCOPE: &str = "service::user.auth.xboxlive.com::MBI_SSL"; -struct RequestWithDate { +pub struct RequestWithDate { pub date: DateTime, pub value: T, } diff --git a/packages/app-lib/src/state/process.rs b/packages/app-lib/src/state/process.rs index da9a59c3c9..faf1c9b4f3 100644 --- a/packages/app-lib/src/state/process.rs +++ b/packages/app-lib/src/state/process.rs @@ -360,18 +360,17 @@ impl Process { } // Write the throwable if present - if !current_content.is_empty() { - if let Err(e) = + if !current_content.is_empty() + && let Err(e) = Process::append_to_log_file( &log_path, ¤t_content, ) - { - tracing::error!( - "Failed to write throwable to log file: {}", - e - ); - } + { + tracing::error!( + "Failed to write throwable to log file: {}", + e + ); } } } @@ -429,15 +428,13 @@ impl Process { if let Some(timestamp) = current_event.timestamp.as_deref() - { - if let Err(e) = Self::maybe_handle_server_join_logging( + && let Err(e) = Self::maybe_handle_server_join_logging( profile_path, timestamp, message ).await { tracing::error!("Failed to handle server join logging: {e}"); } - } } } _ => {} @@ -445,35 +442,29 @@ impl Process { } Ok(Event::Text(mut e)) => { if in_message || in_throwable { - if let Ok(text) = e.unescape() { + if let Ok(text) = e.xml_content() { current_content.push_str(&text); } } else if !in_event && !e.inplace_trim_end() && !e.inplace_trim_start() + && let Ok(text) = e.xml_content() + && let Err(e) = Process::append_to_log_file( + &log_path, + &format!("{text}\n"), + ) { - if let Ok(text) = e.unescape() { - if let Err(e) = Process::append_to_log_file( - &log_path, - &format!("{text}\n"), - ) { - tracing::error!( - "Failed to write to log file: {}", - e - ); - } - } + tracing::error!( + "Failed to write to log file: {}", + e + ); } } Ok(Event::CData(e)) => { - if in_message || in_throwable { - if let Ok(text) = e - .escape() - .map_err(|x| x.into()) - .and_then(|x| x.unescape()) - { - current_content.push_str(&text); - } + if (in_message || in_throwable) + && let Ok(text) = e.xml_content() + { + current_content.push_str(&text); } } _ => (), @@ -720,16 +711,13 @@ impl Process { let logs_folder = state.directories.profile_logs_dir(&profile_path); let log_path = logs_folder.join(LAUNCHER_LOG_PATH); - if log_path.exists() { - if let Err(e) = Process::append_to_log_file( + if log_path.exists() + && let Err(e) = Process::append_to_log_file( &log_path, &format!("\n# Process exited with status: {mc_exit_status}\n"), - ) { - tracing::warn!( - "Failed to write exit status to log file: {}", - e - ); - } + ) + { + tracing::warn!("Failed to write exit status to log file: {}", e); } let _ = state.discord_rpc.clear_to_default(true).await; diff --git a/packages/app-lib/src/state/profiles.rs b/packages/app-lib/src/state/profiles.rs index 14cce61cb2..f11eeb489c 100644 --- a/packages/app-lib/src/state/profiles.rs +++ b/packages/app-lib/src/state/profiles.rs @@ -595,8 +595,8 @@ impl Profile { } #[tracing::instrument(skip(self, semaphore, icon))] - pub async fn set_icon<'a>( - &'a mut self, + pub async fn set_icon( + &mut self, cache_dir: &Path, semaphore: &IoSemaphore, icon: bytes::Bytes, @@ -629,21 +629,20 @@ impl Profile { { let subdirectory = subdirectory.map_err(io::IOError::from)?.path(); - if subdirectory.is_file() { - if let Some(file_name) = subdirectory + if subdirectory.is_file() + && let Some(file_name) = subdirectory .file_name() .and_then(|x| x.to_str()) - { - let file_size = subdirectory - .metadata() - .map_err(io::IOError::from)? - .len(); - - keys.push(format!( - "{file_size}-{}/{folder}/{file_name}", - profile.path - )); - } + { + let file_size = subdirectory + .metadata() + .map_err(io::IOError::from)? + .len(); + + keys.push(format!( + "{file_size}-{}/{folder}/{file_name}", + profile.path + )); } } } @@ -901,30 +900,29 @@ impl Profile { { let subdirectory = subdirectory.map_err(io::IOError::from)?.path(); - if subdirectory.is_file() { - if let Some(file_name) = + if subdirectory.is_file() + && let Some(file_name) = subdirectory.file_name().and_then(|x| x.to_str()) - { - let file_size = subdirectory - .metadata() - .map_err(io::IOError::from)? - .len(); - - keys.push(InitialScanFile { - path: format!( - "{}/{folder}/{}", - self.path, - file_name.trim_end_matches(".disabled") - ), - file_name: file_name.to_string(), - project_type, - size: file_size, - cache_key: format!( - "{file_size}-{}/{folder}/{file_name}", - self.path - ), - }); - } + { + let file_size = subdirectory + .metadata() + .map_err(io::IOError::from)? + .len(); + + keys.push(InitialScanFile { + path: format!( + "{}/{folder}/{}", + self.path, + file_name.trim_end_matches(".disabled") + ), + file_name: file_name.to_string(), + project_type, + size: file_size, + cache_key: format!( + "{file_size}-{}/{folder}/{file_name}", + self.path + ), + }); } } } diff --git a/packages/app-lib/src/util/fetch.rs b/packages/app-lib/src/util/fetch.rs index 9b2e872086..24d94aee73 100644 --- a/packages/app-lib/src/util/fetch.rs +++ b/packages/app-lib/src/util/fetch.rs @@ -254,7 +254,7 @@ where } #[tracing::instrument(skip(bytes, semaphore))] -pub async fn write<'a>( +pub async fn write( path: &Path, bytes: &[u8], semaphore: &IoSemaphore, diff --git a/packages/app-lib/src/util/jre.rs b/packages/app-lib/src/util/jre.rs index ed197a32b9..4e2c3c4b55 100644 --- a/packages/app-lib/src/util/jre.rs +++ b/packages/app-lib/src/util/jre.rs @@ -191,22 +191,21 @@ async fn get_all_autoinstalled_jre_path() -> Result, JREError> let mut jre_paths = HashSet::new(); let base_path = state.directories.java_versions_dir(); - if base_path.is_dir() { - if let Ok(dir) = std::fs::read_dir(base_path) { - for entry in dir.flatten() { - let file_path = entry.path().join("bin"); - - if let Ok(contents) = - std::fs::read_to_string(file_path.clone()) + if base_path.is_dir() + && let Ok(dir) = std::fs::read_dir(base_path) + { + for entry in dir.flatten() { + let file_path = entry.path().join("bin"); + + if let Ok(contents) = std::fs::read_to_string(file_path.clone()) + { + let entry = entry.path().join(contents); + jre_paths.insert(entry); + } else { + #[cfg(not(target_os = "macos"))] { - let entry = entry.path().join(contents); - jre_paths.insert(entry); - } else { - #[cfg(not(target_os = "macos"))] - { - let file_path = file_path.join(JAVA_BIN); - jre_paths.insert(file_path); - } + let file_path = file_path.join(JAVA_BIN); + jre_paths.insert(file_path); } } } @@ -300,20 +299,20 @@ pub async fn check_java_at_filepath(path: &Path) -> crate::Result { } // Extract version info from it - if let Some(arch) = java_arch { - if let Some(version) = java_version { - if let Ok(version) = extract_java_version(version) { - let path = java.to_string_lossy().to_string(); - return Ok(JavaVersion { - parsed_version: version, - path, - version: version.to_string(), - architecture: arch.to_string(), - }); - } - - return Err(JREError::InvalidJREVersion(version.to_owned()).into()); + if let Some(arch) = java_arch + && let Some(version) = java_version + { + if let Ok(version) = extract_java_version(version) { + let path = java.to_string_lossy().to_string(); + return Ok(JavaVersion { + parsed_version: version, + path, + version: version.to_string(), + architecture: arch.to_string(), + }); } + + return Err(JREError::InvalidJREVersion(version.to_owned()).into()); } Err(JREError::FailedJavaCheck(java).into()) diff --git a/packages/ariadne/src/versions.rs b/packages/ariadne/src/versions.rs index 8cc2951451..eaf65c51b7 100644 --- a/packages/ariadne/src/versions.rs +++ b/packages/ariadne/src/versions.rs @@ -33,12 +33,11 @@ pub fn is_feature_supported_in( if part_version == part_first_release { continue; } - if let Ok(part_version) = part_version.parse::() { - if let Ok(part_first_release) = part_first_release.parse::() { - if part_version > part_first_release { - return true; - } - } + if let Ok(part_version) = part_version.parse::() + && let Ok(part_first_release) = part_first_release.parse::() + && part_version > part_first_release + { + return true; } } false diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e88baf106b..b67e7d5348 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.88.0" +channel = "1.89.0"