diff options
| author | salmonik <raisersoft@proton.me> | 2026-07-11 13:32:48 +0200 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-07-11 13:32:48 +0200 |
| commit | 7df4ceb1cf2a6edc058d28527140598ca90e1f10 (patch) | |
| tree | c8ade0334e962f0089ef4535cb07d5feaf6b857a | |
| download | factorio-mod-downloader-7df4ceb1cf2a6edc058d28527140598ca90e1f10.tar.gz factorio-mod-downloader-7df4ceb1cf2a6edc058d28527140598ca90e1f10.zip | |
initmain
| -rw-r--r-- | .cargo/config.toml | 2 | ||||
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Cargo.lock | 3583 | ||||
| -rw-r--r-- | Cargo.toml | 25 | ||||
| -rw-r--r-- | src/downloader.rs | 589 | ||||
| -rw-r--r-- | src/gui.rs | 369 | ||||
| -rw-r--r-- | src/main.rs | 102 |
7 files changed, 4671 insertions, 0 deletions
diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..ae2c9b8 --- /dev/null +++ b/.cargo/config.toml | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | [env] | ||
| 2 | RUST_MIN_STACK = "67108864" | ||
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore | |||
| @@ -0,0 +1 @@ | |||
| target/ | |||
diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..f8635e3 --- /dev/null +++ b/Cargo.lock | |||
| @@ -0,0 +1,3583 @@ | |||
| 1 | # This file is automatically @generated by Cargo. | ||
| 2 | # It is not intended for manual editing. | ||
| 3 | version = 4 | ||
| 4 | |||
| 5 | [[package]] | ||
| 6 | name = "accesskit" | ||
| 7 | version = "0.24.1" | ||
| 8 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 9 | checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" | ||
| 10 | dependencies = [ | ||
| 11 | "uuid", | ||
| 12 | ] | ||
| 13 | |||
| 14 | [[package]] | ||
| 15 | name = "adler2" | ||
| 16 | version = "2.0.1" | ||
| 17 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 18 | checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" | ||
| 19 | |||
| 20 | [[package]] | ||
| 21 | name = "ahash" | ||
| 22 | version = "0.8.12" | ||
| 23 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 24 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" | ||
| 25 | dependencies = [ | ||
| 26 | "cfg-if", | ||
| 27 | "once_cell", | ||
| 28 | "version_check", | ||
| 29 | "zerocopy", | ||
| 30 | ] | ||
| 31 | |||
| 32 | [[package]] | ||
| 33 | name = "aho-corasick" | ||
| 34 | version = "1.1.4" | ||
| 35 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 36 | checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" | ||
| 37 | dependencies = [ | ||
| 38 | "memchr", | ||
| 39 | ] | ||
| 40 | |||
| 41 | [[package]] | ||
| 42 | name = "android-activity" | ||
| 43 | version = "0.6.1" | ||
| 44 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 45 | checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" | ||
| 46 | dependencies = [ | ||
| 47 | "android-properties", | ||
| 48 | "bitflags 2.13.0", | ||
| 49 | "cc", | ||
| 50 | "jni", | ||
| 51 | "libc", | ||
| 52 | "log", | ||
| 53 | "ndk", | ||
| 54 | "ndk-context", | ||
| 55 | "ndk-sys", | ||
| 56 | "num_enum", | ||
| 57 | "thiserror 2.0.18", | ||
| 58 | ] | ||
| 59 | |||
| 60 | [[package]] | ||
| 61 | name = "android-properties" | ||
| 62 | version = "0.2.2" | ||
| 63 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 64 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" | ||
| 65 | |||
| 66 | [[package]] | ||
| 67 | name = "anyhow" | ||
| 68 | version = "1.0.103" | ||
| 69 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 70 | checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" | ||
| 71 | |||
| 72 | [[package]] | ||
| 73 | name = "arboard" | ||
| 74 | version = "3.6.1" | ||
| 75 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 76 | checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" | ||
| 77 | dependencies = [ | ||
| 78 | "clipboard-win", | ||
| 79 | "image", | ||
| 80 | "log", | ||
| 81 | "objc2 0.6.4", | ||
| 82 | "objc2-app-kit 0.3.2", | ||
| 83 | "objc2-core-foundation", | ||
| 84 | "objc2-core-graphics", | ||
| 85 | "objc2-foundation 0.3.2", | ||
| 86 | "parking_lot", | ||
| 87 | "percent-encoding", | ||
| 88 | "windows-sys 0.59.0", | ||
| 89 | "x11rb", | ||
| 90 | ] | ||
| 91 | |||
| 92 | [[package]] | ||
| 93 | name = "arrayvec" | ||
| 94 | version = "0.7.7" | ||
| 95 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 96 | checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" | ||
| 97 | |||
| 98 | [[package]] | ||
| 99 | name = "as-raw-xcb-connection" | ||
| 100 | version = "1.0.1" | ||
| 101 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 102 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" | ||
| 103 | |||
| 104 | [[package]] | ||
| 105 | name = "atk-sys" | ||
| 106 | version = "0.18.2" | ||
| 107 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 108 | checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" | ||
| 109 | dependencies = [ | ||
| 110 | "glib-sys", | ||
| 111 | "gobject-sys", | ||
| 112 | "libc", | ||
| 113 | "system-deps", | ||
| 114 | ] | ||
| 115 | |||
| 116 | [[package]] | ||
| 117 | name = "atomic-waker" | ||
| 118 | version = "1.1.2" | ||
| 119 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 120 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" | ||
| 121 | |||
| 122 | [[package]] | ||
| 123 | name = "autocfg" | ||
| 124 | version = "1.5.1" | ||
| 125 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 126 | checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" | ||
| 127 | |||
| 128 | [[package]] | ||
| 129 | name = "base64" | ||
| 130 | version = "0.22.1" | ||
| 131 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 132 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" | ||
| 133 | |||
| 134 | [[package]] | ||
| 135 | name = "bit-set" | ||
| 136 | version = "0.9.1" | ||
| 137 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 138 | checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" | ||
| 139 | dependencies = [ | ||
| 140 | "bit-vec", | ||
| 141 | ] | ||
| 142 | |||
| 143 | [[package]] | ||
| 144 | name = "bit-vec" | ||
| 145 | version = "0.9.1" | ||
| 146 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 147 | checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" | ||
| 148 | |||
| 149 | [[package]] | ||
| 150 | name = "bitflags" | ||
| 151 | version = "1.3.2" | ||
| 152 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 153 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" | ||
| 154 | |||
| 155 | [[package]] | ||
| 156 | name = "bitflags" | ||
| 157 | version = "2.13.0" | ||
| 158 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 159 | checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" | ||
| 160 | |||
| 161 | [[package]] | ||
| 162 | name = "block2" | ||
| 163 | version = "0.5.1" | ||
| 164 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 165 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" | ||
| 166 | dependencies = [ | ||
| 167 | "objc2 0.5.2", | ||
| 168 | ] | ||
| 169 | |||
| 170 | [[package]] | ||
| 171 | name = "block2" | ||
| 172 | version = "0.6.2" | ||
| 173 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 174 | checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" | ||
| 175 | dependencies = [ | ||
| 176 | "objc2 0.6.4", | ||
| 177 | ] | ||
| 178 | |||
| 179 | [[package]] | ||
| 180 | name = "bumpalo" | ||
| 181 | version = "3.20.3" | ||
| 182 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 183 | checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" | ||
| 184 | |||
| 185 | [[package]] | ||
| 186 | name = "bytemuck" | ||
| 187 | version = "1.25.0" | ||
| 188 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 189 | checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" | ||
| 190 | dependencies = [ | ||
| 191 | "bytemuck_derive", | ||
| 192 | ] | ||
| 193 | |||
| 194 | [[package]] | ||
| 195 | name = "bytemuck_derive" | ||
| 196 | version = "1.10.2" | ||
| 197 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 198 | checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" | ||
| 199 | dependencies = [ | ||
| 200 | "proc-macro2", | ||
| 201 | "quote", | ||
| 202 | "syn", | ||
| 203 | ] | ||
| 204 | |||
| 205 | [[package]] | ||
| 206 | name = "byteorder-lite" | ||
| 207 | version = "0.1.0" | ||
| 208 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 209 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" | ||
| 210 | |||
| 211 | [[package]] | ||
| 212 | name = "bytes" | ||
| 213 | version = "1.12.0" | ||
| 214 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 215 | checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" | ||
| 216 | |||
| 217 | [[package]] | ||
| 218 | name = "cairo-sys-rs" | ||
| 219 | version = "0.18.2" | ||
| 220 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 221 | checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" | ||
| 222 | dependencies = [ | ||
| 223 | "libc", | ||
| 224 | "system-deps", | ||
| 225 | ] | ||
| 226 | |||
| 227 | [[package]] | ||
| 228 | name = "calloop" | ||
| 229 | version = "0.13.0" | ||
| 230 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 231 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" | ||
| 232 | dependencies = [ | ||
| 233 | "bitflags 2.13.0", | ||
| 234 | "log", | ||
| 235 | "polling", | ||
| 236 | "rustix 0.38.44", | ||
| 237 | "slab", | ||
| 238 | "thiserror 1.0.69", | ||
| 239 | ] | ||
| 240 | |||
| 241 | [[package]] | ||
| 242 | name = "calloop" | ||
| 243 | version = "0.14.4" | ||
| 244 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 245 | checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" | ||
| 246 | dependencies = [ | ||
| 247 | "bitflags 2.13.0", | ||
| 248 | "polling", | ||
| 249 | "rustix 1.1.4", | ||
| 250 | "slab", | ||
| 251 | "tracing", | ||
| 252 | ] | ||
| 253 | |||
| 254 | [[package]] | ||
| 255 | name = "calloop-wayland-source" | ||
| 256 | version = "0.4.1" | ||
| 257 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 258 | checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" | ||
| 259 | dependencies = [ | ||
| 260 | "calloop 0.14.4", | ||
| 261 | "rustix 1.1.4", | ||
| 262 | "wayland-backend", | ||
| 263 | "wayland-client", | ||
| 264 | ] | ||
| 265 | |||
| 266 | [[package]] | ||
| 267 | name = "cc" | ||
| 268 | version = "1.2.65" | ||
| 269 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 270 | checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" | ||
| 271 | dependencies = [ | ||
| 272 | "find-msvc-tools", | ||
| 273 | "jobserver", | ||
| 274 | "libc", | ||
| 275 | "shlex", | ||
| 276 | ] | ||
| 277 | |||
| 278 | [[package]] | ||
| 279 | name = "cfg-expr" | ||
| 280 | version = "0.15.8" | ||
| 281 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 282 | checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" | ||
| 283 | dependencies = [ | ||
| 284 | "smallvec", | ||
| 285 | "target-lexicon", | ||
| 286 | ] | ||
| 287 | |||
| 288 | [[package]] | ||
| 289 | name = "cfg-if" | ||
| 290 | version = "1.0.4" | ||
| 291 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 292 | checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" | ||
| 293 | |||
| 294 | [[package]] | ||
| 295 | name = "cfg_aliases" | ||
| 296 | version = "0.2.1" | ||
| 297 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 298 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" | ||
| 299 | |||
| 300 | [[package]] | ||
| 301 | name = "cgl" | ||
| 302 | version = "0.3.2" | ||
| 303 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 304 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" | ||
| 305 | dependencies = [ | ||
| 306 | "libc", | ||
| 307 | ] | ||
| 308 | |||
| 309 | [[package]] | ||
| 310 | name = "clipboard-win" | ||
| 311 | version = "5.4.1" | ||
| 312 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 313 | checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" | ||
| 314 | dependencies = [ | ||
| 315 | "error-code", | ||
| 316 | ] | ||
| 317 | |||
| 318 | [[package]] | ||
| 319 | name = "codespan-reporting" | ||
| 320 | version = "0.13.1" | ||
| 321 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 322 | checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" | ||
| 323 | dependencies = [ | ||
| 324 | "unicode-width", | ||
| 325 | ] | ||
| 326 | |||
| 327 | [[package]] | ||
| 328 | name = "color" | ||
| 329 | version = "0.3.3" | ||
| 330 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 331 | checksum = "2ec7c5eb7a16992b1904d76c517d170ab353b0e0b3d5a0c81a8a0cd1037893cf" | ||
| 332 | dependencies = [ | ||
| 333 | "bytemuck", | ||
| 334 | ] | ||
| 335 | |||
| 336 | [[package]] | ||
| 337 | name = "combine" | ||
| 338 | version = "4.6.7" | ||
| 339 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 340 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" | ||
| 341 | dependencies = [ | ||
| 342 | "bytes", | ||
| 343 | "memchr", | ||
| 344 | ] | ||
| 345 | |||
| 346 | [[package]] | ||
| 347 | name = "concurrent-queue" | ||
| 348 | version = "2.5.0" | ||
| 349 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 350 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" | ||
| 351 | dependencies = [ | ||
| 352 | "crossbeam-utils", | ||
| 353 | ] | ||
| 354 | |||
| 355 | [[package]] | ||
| 356 | name = "core-foundation" | ||
| 357 | version = "0.9.4" | ||
| 358 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 359 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" | ||
| 360 | dependencies = [ | ||
| 361 | "core-foundation-sys", | ||
| 362 | "libc", | ||
| 363 | ] | ||
| 364 | |||
| 365 | [[package]] | ||
| 366 | name = "core-foundation" | ||
| 367 | version = "0.10.1" | ||
| 368 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 369 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" | ||
| 370 | dependencies = [ | ||
| 371 | "core-foundation-sys", | ||
| 372 | "libc", | ||
| 373 | ] | ||
| 374 | |||
| 375 | [[package]] | ||
| 376 | name = "core-foundation-sys" | ||
| 377 | version = "0.8.7" | ||
| 378 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 379 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" | ||
| 380 | |||
| 381 | [[package]] | ||
| 382 | name = "core-graphics" | ||
| 383 | version = "0.23.2" | ||
| 384 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 385 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" | ||
| 386 | dependencies = [ | ||
| 387 | "bitflags 1.3.2", | ||
| 388 | "core-foundation 0.9.4", | ||
| 389 | "core-graphics-types", | ||
| 390 | "foreign-types", | ||
| 391 | "libc", | ||
| 392 | ] | ||
| 393 | |||
| 394 | [[package]] | ||
| 395 | name = "core-graphics-types" | ||
| 396 | version = "0.1.3" | ||
| 397 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 398 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" | ||
| 399 | dependencies = [ | ||
| 400 | "bitflags 1.3.2", | ||
| 401 | "core-foundation 0.9.4", | ||
| 402 | "libc", | ||
| 403 | ] | ||
| 404 | |||
| 405 | [[package]] | ||
| 406 | name = "crc32fast" | ||
| 407 | version = "1.5.0" | ||
| 408 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 409 | checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" | ||
| 410 | dependencies = [ | ||
| 411 | "cfg-if", | ||
| 412 | ] | ||
| 413 | |||
| 414 | [[package]] | ||
| 415 | name = "crossbeam-utils" | ||
| 416 | version = "0.8.21" | ||
| 417 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 418 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" | ||
| 419 | |||
| 420 | [[package]] | ||
| 421 | name = "crunchy" | ||
| 422 | version = "0.2.4" | ||
| 423 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 424 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" | ||
| 425 | |||
| 426 | [[package]] | ||
| 427 | name = "cursor-icon" | ||
| 428 | version = "1.2.0" | ||
| 429 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 430 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" | ||
| 431 | |||
| 432 | [[package]] | ||
| 433 | name = "dispatch" | ||
| 434 | version = "0.2.0" | ||
| 435 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 436 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" | ||
| 437 | |||
| 438 | [[package]] | ||
| 439 | name = "dispatch2" | ||
| 440 | version = "0.3.1" | ||
| 441 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 442 | checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" | ||
| 443 | dependencies = [ | ||
| 444 | "bitflags 2.13.0", | ||
| 445 | "block2 0.6.2", | ||
| 446 | "libc", | ||
| 447 | "objc2 0.6.4", | ||
| 448 | ] | ||
| 449 | |||
| 450 | [[package]] | ||
| 451 | name = "displaydoc" | ||
| 452 | version = "0.2.6" | ||
| 453 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 454 | checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" | ||
| 455 | dependencies = [ | ||
| 456 | "proc-macro2", | ||
| 457 | "quote", | ||
| 458 | "syn", | ||
| 459 | ] | ||
| 460 | |||
| 461 | [[package]] | ||
| 462 | name = "dlib" | ||
| 463 | version = "0.5.3" | ||
| 464 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 465 | checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" | ||
| 466 | dependencies = [ | ||
| 467 | "libloading", | ||
| 468 | ] | ||
| 469 | |||
| 470 | [[package]] | ||
| 471 | name = "document-features" | ||
| 472 | version = "0.2.12" | ||
| 473 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 474 | checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" | ||
| 475 | dependencies = [ | ||
| 476 | "litrs", | ||
| 477 | ] | ||
| 478 | |||
| 479 | [[package]] | ||
| 480 | name = "downcast-rs" | ||
| 481 | version = "1.2.1" | ||
| 482 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 483 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" | ||
| 484 | |||
| 485 | [[package]] | ||
| 486 | name = "dpi" | ||
| 487 | version = "0.1.2" | ||
| 488 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 489 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" | ||
| 490 | |||
| 491 | [[package]] | ||
| 492 | name = "ecolor" | ||
| 493 | version = "0.35.0" | ||
| 494 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 495 | checksum = "6758be723a3f298bbfda4db75748bc2ba0abafe096b6383c7c32da264764fbc3" | ||
| 496 | dependencies = [ | ||
| 497 | "bytemuck", | ||
| 498 | "emath", | ||
| 499 | ] | ||
| 500 | |||
| 501 | [[package]] | ||
| 502 | name = "eframe" | ||
| 503 | version = "0.35.0" | ||
| 504 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 505 | checksum = "8dc8234e2f681b2afd2b2e8c332fa614de2fddbdcb28d0acf5c420449682ea90" | ||
| 506 | dependencies = [ | ||
| 507 | "ahash", | ||
| 508 | "bytemuck", | ||
| 509 | "document-features", | ||
| 510 | "egui", | ||
| 511 | "egui-wgpu", | ||
| 512 | "egui-winit", | ||
| 513 | "egui_glow", | ||
| 514 | "glow", | ||
| 515 | "glutin", | ||
| 516 | "glutin-winit", | ||
| 517 | "image", | ||
| 518 | "js-sys", | ||
| 519 | "log", | ||
| 520 | "objc2 0.6.4", | ||
| 521 | "objc2-app-kit 0.3.2", | ||
| 522 | "objc2-foundation 0.3.2", | ||
| 523 | "parking_lot", | ||
| 524 | "percent-encoding", | ||
| 525 | "profiling", | ||
| 526 | "raw-window-handle", | ||
| 527 | "static_assertions", | ||
| 528 | "wasm-bindgen", | ||
| 529 | "wasm-bindgen-futures", | ||
| 530 | "web-sys", | ||
| 531 | "web-time", | ||
| 532 | "windows-sys 0.61.2", | ||
| 533 | "winit", | ||
| 534 | ] | ||
| 535 | |||
| 536 | [[package]] | ||
| 537 | name = "egui" | ||
| 538 | version = "0.35.0" | ||
| 539 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 540 | checksum = "2796c98d50b79631281d516343a6f6e93c0666462ca36e2c93b39f25d7793325" | ||
| 541 | dependencies = [ | ||
| 542 | "accesskit", | ||
| 543 | "ahash", | ||
| 544 | "bitflags 2.13.0", | ||
| 545 | "emath", | ||
| 546 | "epaint", | ||
| 547 | "itertools", | ||
| 548 | "log", | ||
| 549 | "nohash-hasher", | ||
| 550 | "profiling", | ||
| 551 | "smallvec", | ||
| 552 | "unicode-segmentation", | ||
| 553 | ] | ||
| 554 | |||
| 555 | [[package]] | ||
| 556 | name = "egui-wgpu" | ||
| 557 | version = "0.35.0" | ||
| 558 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 559 | checksum = "d2e6cfac0725563555fa4f91e9f799b9d7c6c5dd831fca6abc8234afc64b7a34" | ||
| 560 | dependencies = [ | ||
| 561 | "ahash", | ||
| 562 | "bytemuck", | ||
| 563 | "document-features", | ||
| 564 | "egui", | ||
| 565 | "epaint", | ||
| 566 | "log", | ||
| 567 | "profiling", | ||
| 568 | "thiserror 2.0.18", | ||
| 569 | "type-map", | ||
| 570 | "web-time", | ||
| 571 | "wgpu", | ||
| 572 | "winit", | ||
| 573 | ] | ||
| 574 | |||
| 575 | [[package]] | ||
| 576 | name = "egui-winit" | ||
| 577 | version = "0.35.0" | ||
| 578 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 579 | checksum = "9ea6bf3608db949588b95b8b341ee358d0c3f95cf4dc3f53d8d76717edee87db" | ||
| 580 | dependencies = [ | ||
| 581 | "arboard", | ||
| 582 | "bytemuck", | ||
| 583 | "egui", | ||
| 584 | "log", | ||
| 585 | "objc2 0.6.4", | ||
| 586 | "objc2-foundation 0.3.2", | ||
| 587 | "objc2-ui-kit 0.3.2", | ||
| 588 | "profiling", | ||
| 589 | "raw-window-handle", | ||
| 590 | "smithay-clipboard", | ||
| 591 | "web-time", | ||
| 592 | "webbrowser", | ||
| 593 | "winit", | ||
| 594 | ] | ||
| 595 | |||
| 596 | [[package]] | ||
| 597 | name = "egui_glow" | ||
| 598 | version = "0.35.0" | ||
| 599 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 600 | checksum = "52274b9bfb8d8e252cd0f00c9f6214f360d75a0962baa77a2d62ddb002fe99d4" | ||
| 601 | dependencies = [ | ||
| 602 | "bytemuck", | ||
| 603 | "egui", | ||
| 604 | "glow", | ||
| 605 | "log", | ||
| 606 | "memoffset", | ||
| 607 | "profiling", | ||
| 608 | "winit", | ||
| 609 | ] | ||
| 610 | |||
| 611 | [[package]] | ||
| 612 | name = "either" | ||
| 613 | version = "1.16.0" | ||
| 614 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 615 | checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" | ||
| 616 | |||
| 617 | [[package]] | ||
| 618 | name = "emath" | ||
| 619 | version = "0.35.0" | ||
| 620 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 621 | checksum = "cd4ec073c9898516584d8c6cfdcee95b530b3d941cd5031ef4050aa36812308b" | ||
| 622 | dependencies = [ | ||
| 623 | "bytemuck", | ||
| 624 | ] | ||
| 625 | |||
| 626 | [[package]] | ||
| 627 | name = "epaint" | ||
| 628 | version = "0.35.0" | ||
| 629 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 630 | checksum = "4e60a8888b51da911df23918fd7301359b1d43a406a0ff3b8863af093dd7fc6c" | ||
| 631 | dependencies = [ | ||
| 632 | "ahash", | ||
| 633 | "bytemuck", | ||
| 634 | "ecolor", | ||
| 635 | "emath", | ||
| 636 | "epaint_default_fonts", | ||
| 637 | "font-types", | ||
| 638 | "harfrust", | ||
| 639 | "log", | ||
| 640 | "nohash-hasher", | ||
| 641 | "parking_lot", | ||
| 642 | "profiling", | ||
| 643 | "self_cell", | ||
| 644 | "skrifa", | ||
| 645 | "smallvec", | ||
| 646 | "unicode-general-category", | ||
| 647 | "unicode-segmentation", | ||
| 648 | "vello_cpu", | ||
| 649 | ] | ||
| 650 | |||
| 651 | [[package]] | ||
| 652 | name = "epaint_default_fonts" | ||
| 653 | version = "0.35.0" | ||
| 654 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 655 | checksum = "13ee4e1f553a3584c301f3a56ff1a775f1384781396cea301c8d952e9b93f560" | ||
| 656 | |||
| 657 | [[package]] | ||
| 658 | name = "equivalent" | ||
| 659 | version = "1.0.2" | ||
| 660 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 661 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" | ||
| 662 | |||
| 663 | [[package]] | ||
| 664 | name = "errno" | ||
| 665 | version = "0.3.14" | ||
| 666 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 667 | checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" | ||
| 668 | dependencies = [ | ||
| 669 | "libc", | ||
| 670 | "windows-sys 0.61.2", | ||
| 671 | ] | ||
| 672 | |||
| 673 | [[package]] | ||
| 674 | name = "error-code" | ||
| 675 | version = "3.3.2" | ||
| 676 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 677 | checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" | ||
| 678 | |||
| 679 | [[package]] | ||
| 680 | name = "euclid" | ||
| 681 | version = "0.22.14" | ||
| 682 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 683 | checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" | ||
| 684 | dependencies = [ | ||
| 685 | "num-traits", | ||
| 686 | ] | ||
| 687 | |||
| 688 | [[package]] | ||
| 689 | name = "factorio-mod-downloader" | ||
| 690 | version = "0.1.0" | ||
| 691 | dependencies = [ | ||
| 692 | "anyhow", | ||
| 693 | "eframe", | ||
| 694 | "egui", | ||
| 695 | "regex", | ||
| 696 | "rfd", | ||
| 697 | "serde", | ||
| 698 | "serde_json", | ||
| 699 | "ureq", | ||
| 700 | ] | ||
| 701 | |||
| 702 | [[package]] | ||
| 703 | name = "fax" | ||
| 704 | version = "0.2.7" | ||
| 705 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 706 | checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" | ||
| 707 | |||
| 708 | [[package]] | ||
| 709 | name = "fdeflate" | ||
| 710 | version = "0.3.7" | ||
| 711 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 712 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" | ||
| 713 | dependencies = [ | ||
| 714 | "simd-adler32", | ||
| 715 | ] | ||
| 716 | |||
| 717 | [[package]] | ||
| 718 | name = "fearless_simd" | ||
| 719 | version = "0.4.1" | ||
| 720 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 721 | checksum = "b97b65636e5b9ef369943878ac74335ba1c55c1cb6adbf1e2c293c624248d693" | ||
| 722 | |||
| 723 | [[package]] | ||
| 724 | name = "find-msvc-tools" | ||
| 725 | version = "0.1.9" | ||
| 726 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 727 | checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" | ||
| 728 | |||
| 729 | [[package]] | ||
| 730 | name = "flate2" | ||
| 731 | version = "1.1.9" | ||
| 732 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 733 | checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" | ||
| 734 | dependencies = [ | ||
| 735 | "crc32fast", | ||
| 736 | "miniz_oxide", | ||
| 737 | ] | ||
| 738 | |||
| 739 | [[package]] | ||
| 740 | name = "foldhash" | ||
| 741 | version = "0.2.0" | ||
| 742 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 743 | checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" | ||
| 744 | |||
| 745 | [[package]] | ||
| 746 | name = "font-types" | ||
| 747 | version = "0.11.3" | ||
| 748 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 749 | checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" | ||
| 750 | dependencies = [ | ||
| 751 | "bytemuck", | ||
| 752 | ] | ||
| 753 | |||
| 754 | [[package]] | ||
| 755 | name = "foreign-types" | ||
| 756 | version = "0.5.0" | ||
| 757 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 758 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" | ||
| 759 | dependencies = [ | ||
| 760 | "foreign-types-macros", | ||
| 761 | "foreign-types-shared", | ||
| 762 | ] | ||
| 763 | |||
| 764 | [[package]] | ||
| 765 | name = "foreign-types-macros" | ||
| 766 | version = "0.2.3" | ||
| 767 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 768 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" | ||
| 769 | dependencies = [ | ||
| 770 | "proc-macro2", | ||
| 771 | "quote", | ||
| 772 | "syn", | ||
| 773 | ] | ||
| 774 | |||
| 775 | [[package]] | ||
| 776 | name = "foreign-types-shared" | ||
| 777 | version = "0.3.1" | ||
| 778 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 779 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" | ||
| 780 | |||
| 781 | [[package]] | ||
| 782 | name = "form_urlencoded" | ||
| 783 | version = "1.2.2" | ||
| 784 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 785 | checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" | ||
| 786 | dependencies = [ | ||
| 787 | "percent-encoding", | ||
| 788 | ] | ||
| 789 | |||
| 790 | [[package]] | ||
| 791 | name = "futures-core" | ||
| 792 | version = "0.3.32" | ||
| 793 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 794 | checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" | ||
| 795 | |||
| 796 | [[package]] | ||
| 797 | name = "futures-task" | ||
| 798 | version = "0.3.32" | ||
| 799 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 800 | checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" | ||
| 801 | |||
| 802 | [[package]] | ||
| 803 | name = "futures-util" | ||
| 804 | version = "0.3.32" | ||
| 805 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 806 | checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" | ||
| 807 | dependencies = [ | ||
| 808 | "futures-core", | ||
| 809 | "futures-task", | ||
| 810 | "pin-project-lite", | ||
| 811 | "slab", | ||
| 812 | ] | ||
| 813 | |||
| 814 | [[package]] | ||
| 815 | name = "gdk-pixbuf-sys" | ||
| 816 | version = "0.18.0" | ||
| 817 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 818 | checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" | ||
| 819 | dependencies = [ | ||
| 820 | "gio-sys", | ||
| 821 | "glib-sys", | ||
| 822 | "gobject-sys", | ||
| 823 | "libc", | ||
| 824 | "system-deps", | ||
| 825 | ] | ||
| 826 | |||
| 827 | [[package]] | ||
| 828 | name = "gdk-sys" | ||
| 829 | version = "0.18.2" | ||
| 830 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 831 | checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" | ||
| 832 | dependencies = [ | ||
| 833 | "cairo-sys-rs", | ||
| 834 | "gdk-pixbuf-sys", | ||
| 835 | "gio-sys", | ||
| 836 | "glib-sys", | ||
| 837 | "gobject-sys", | ||
| 838 | "libc", | ||
| 839 | "pango-sys", | ||
| 840 | "pkg-config", | ||
| 841 | "system-deps", | ||
| 842 | ] | ||
| 843 | |||
| 844 | [[package]] | ||
| 845 | name = "gethostname" | ||
| 846 | version = "1.1.0" | ||
| 847 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 848 | checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" | ||
| 849 | dependencies = [ | ||
| 850 | "rustix 1.1.4", | ||
| 851 | "windows-link", | ||
| 852 | ] | ||
| 853 | |||
| 854 | [[package]] | ||
| 855 | name = "getrandom" | ||
| 856 | version = "0.2.17" | ||
| 857 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 858 | checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" | ||
| 859 | dependencies = [ | ||
| 860 | "cfg-if", | ||
| 861 | "libc", | ||
| 862 | "wasi", | ||
| 863 | ] | ||
| 864 | |||
| 865 | [[package]] | ||
| 866 | name = "getrandom" | ||
| 867 | version = "0.3.4" | ||
| 868 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 869 | checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" | ||
| 870 | dependencies = [ | ||
| 871 | "cfg-if", | ||
| 872 | "libc", | ||
| 873 | "r-efi", | ||
| 874 | "wasip2", | ||
| 875 | ] | ||
| 876 | |||
| 877 | [[package]] | ||
| 878 | name = "gio-sys" | ||
| 879 | version = "0.18.1" | ||
| 880 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 881 | checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" | ||
| 882 | dependencies = [ | ||
| 883 | "glib-sys", | ||
| 884 | "gobject-sys", | ||
| 885 | "libc", | ||
| 886 | "system-deps", | ||
| 887 | "winapi", | ||
| 888 | ] | ||
| 889 | |||
| 890 | [[package]] | ||
| 891 | name = "gl_generator" | ||
| 892 | version = "0.14.0" | ||
| 893 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 894 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" | ||
| 895 | dependencies = [ | ||
| 896 | "khronos_api", | ||
| 897 | "log", | ||
| 898 | "xml-rs", | ||
| 899 | ] | ||
| 900 | |||
| 901 | [[package]] | ||
| 902 | name = "glib-sys" | ||
| 903 | version = "0.18.1" | ||
| 904 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 905 | checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" | ||
| 906 | dependencies = [ | ||
| 907 | "libc", | ||
| 908 | "system-deps", | ||
| 909 | ] | ||
| 910 | |||
| 911 | [[package]] | ||
| 912 | name = "glifo" | ||
| 913 | version = "0.1.1" | ||
| 914 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 915 | checksum = "d99fc21d493812643aae86d53b7bbd02f376434a90317e8a790bc209fdd6605e" | ||
| 916 | dependencies = [ | ||
| 917 | "bytemuck", | ||
| 918 | "foldhash", | ||
| 919 | "hashbrown 0.17.1", | ||
| 920 | "log", | ||
| 921 | "peniko", | ||
| 922 | "skrifa", | ||
| 923 | "smallvec", | ||
| 924 | "vello_common", | ||
| 925 | ] | ||
| 926 | |||
| 927 | [[package]] | ||
| 928 | name = "glow" | ||
| 929 | version = "0.17.0" | ||
| 930 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 931 | checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5" | ||
| 932 | dependencies = [ | ||
| 933 | "js-sys", | ||
| 934 | "slotmap", | ||
| 935 | "wasm-bindgen", | ||
| 936 | "web-sys", | ||
| 937 | ] | ||
| 938 | |||
| 939 | [[package]] | ||
| 940 | name = "glutin" | ||
| 941 | version = "0.32.3" | ||
| 942 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 943 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" | ||
| 944 | dependencies = [ | ||
| 945 | "bitflags 2.13.0", | ||
| 946 | "cfg_aliases", | ||
| 947 | "cgl", | ||
| 948 | "dispatch2", | ||
| 949 | "glutin_egl_sys", | ||
| 950 | "glutin_glx_sys", | ||
| 951 | "glutin_wgl_sys", | ||
| 952 | "libloading", | ||
| 953 | "objc2 0.6.4", | ||
| 954 | "objc2-app-kit 0.3.2", | ||
| 955 | "objc2-core-foundation", | ||
| 956 | "objc2-foundation 0.3.2", | ||
| 957 | "once_cell", | ||
| 958 | "raw-window-handle", | ||
| 959 | "windows-sys 0.52.0", | ||
| 960 | "x11-dl", | ||
| 961 | ] | ||
| 962 | |||
| 963 | [[package]] | ||
| 964 | name = "glutin-winit" | ||
| 965 | version = "0.5.0" | ||
| 966 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 967 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" | ||
| 968 | dependencies = [ | ||
| 969 | "cfg_aliases", | ||
| 970 | "glutin", | ||
| 971 | "raw-window-handle", | ||
| 972 | "winit", | ||
| 973 | ] | ||
| 974 | |||
| 975 | [[package]] | ||
| 976 | name = "glutin_egl_sys" | ||
| 977 | version = "0.7.1" | ||
| 978 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 979 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" | ||
| 980 | dependencies = [ | ||
| 981 | "gl_generator", | ||
| 982 | "windows-sys 0.52.0", | ||
| 983 | ] | ||
| 984 | |||
| 985 | [[package]] | ||
| 986 | name = "glutin_glx_sys" | ||
| 987 | version = "0.6.1" | ||
| 988 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 989 | checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" | ||
| 990 | dependencies = [ | ||
| 991 | "gl_generator", | ||
| 992 | "x11-dl", | ||
| 993 | ] | ||
| 994 | |||
| 995 | [[package]] | ||
| 996 | name = "glutin_wgl_sys" | ||
| 997 | version = "0.6.1" | ||
| 998 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 999 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" | ||
| 1000 | dependencies = [ | ||
| 1001 | "gl_generator", | ||
| 1002 | ] | ||
| 1003 | |||
| 1004 | [[package]] | ||
| 1005 | name = "gobject-sys" | ||
| 1006 | version = "0.18.0" | ||
| 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1008 | checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" | ||
| 1009 | dependencies = [ | ||
| 1010 | "glib-sys", | ||
| 1011 | "libc", | ||
| 1012 | "system-deps", | ||
| 1013 | ] | ||
| 1014 | |||
| 1015 | [[package]] | ||
| 1016 | name = "gtk-sys" | ||
| 1017 | version = "0.18.2" | ||
| 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1019 | checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" | ||
| 1020 | dependencies = [ | ||
| 1021 | "atk-sys", | ||
| 1022 | "cairo-sys-rs", | ||
| 1023 | "gdk-pixbuf-sys", | ||
| 1024 | "gdk-sys", | ||
| 1025 | "gio-sys", | ||
| 1026 | "glib-sys", | ||
| 1027 | "gobject-sys", | ||
| 1028 | "libc", | ||
| 1029 | "pango-sys", | ||
| 1030 | "system-deps", | ||
| 1031 | ] | ||
| 1032 | |||
| 1033 | [[package]] | ||
| 1034 | name = "guillotiere" | ||
| 1035 | version = "0.7.0" | ||
| 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1037 | checksum = "6b17e70c989c36bad147b27a58d148c0741c51448aa5653436547323e524d0ab" | ||
| 1038 | dependencies = [ | ||
| 1039 | "euclid", | ||
| 1040 | ] | ||
| 1041 | |||
| 1042 | [[package]] | ||
| 1043 | name = "half" | ||
| 1044 | version = "2.7.1" | ||
| 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1046 | checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" | ||
| 1047 | dependencies = [ | ||
| 1048 | "cfg-if", | ||
| 1049 | "crunchy", | ||
| 1050 | "num-traits", | ||
| 1051 | "zerocopy", | ||
| 1052 | ] | ||
| 1053 | |||
| 1054 | [[package]] | ||
| 1055 | name = "harfrust" | ||
| 1056 | version = "0.7.0" | ||
| 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1058 | checksum = "0431e8e389aa0f1e72bb9d1c2db8957a1a7a3580e8ed97db819c14837aac9b3e" | ||
| 1059 | dependencies = [ | ||
| 1060 | "bitflags 2.13.0", | ||
| 1061 | "bytemuck", | ||
| 1062 | "read-fonts", | ||
| 1063 | "smallvec", | ||
| 1064 | ] | ||
| 1065 | |||
| 1066 | [[package]] | ||
| 1067 | name = "hashbrown" | ||
| 1068 | version = "0.16.1" | ||
| 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1070 | checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" | ||
| 1071 | dependencies = [ | ||
| 1072 | "foldhash", | ||
| 1073 | ] | ||
| 1074 | |||
| 1075 | [[package]] | ||
| 1076 | name = "hashbrown" | ||
| 1077 | version = "0.17.1" | ||
| 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1079 | checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" | ||
| 1080 | dependencies = [ | ||
| 1081 | "foldhash", | ||
| 1082 | ] | ||
| 1083 | |||
| 1084 | [[package]] | ||
| 1085 | name = "heck" | ||
| 1086 | version = "0.5.0" | ||
| 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1088 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" | ||
| 1089 | |||
| 1090 | [[package]] | ||
| 1091 | name = "hermit-abi" | ||
| 1092 | version = "0.5.2" | ||
| 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1094 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" | ||
| 1095 | |||
| 1096 | [[package]] | ||
| 1097 | name = "hexf-parse" | ||
| 1098 | version = "0.2.1" | ||
| 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1100 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" | ||
| 1101 | |||
| 1102 | [[package]] | ||
| 1103 | name = "http" | ||
| 1104 | version = "1.4.2" | ||
| 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1106 | checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" | ||
| 1107 | dependencies = [ | ||
| 1108 | "bytes", | ||
| 1109 | "itoa", | ||
| 1110 | ] | ||
| 1111 | |||
| 1112 | [[package]] | ||
| 1113 | name = "httparse" | ||
| 1114 | version = "1.10.1" | ||
| 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1116 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" | ||
| 1117 | |||
| 1118 | [[package]] | ||
| 1119 | name = "icu_collections" | ||
| 1120 | version = "2.2.0" | ||
| 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1122 | checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" | ||
| 1123 | dependencies = [ | ||
| 1124 | "displaydoc", | ||
| 1125 | "potential_utf", | ||
| 1126 | "utf8_iter", | ||
| 1127 | "yoke", | ||
| 1128 | "zerofrom", | ||
| 1129 | "zerovec", | ||
| 1130 | ] | ||
| 1131 | |||
| 1132 | [[package]] | ||
| 1133 | name = "icu_locale_core" | ||
| 1134 | version = "2.2.0" | ||
| 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1136 | checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" | ||
| 1137 | dependencies = [ | ||
| 1138 | "displaydoc", | ||
| 1139 | "litemap", | ||
| 1140 | "tinystr", | ||
| 1141 | "writeable", | ||
| 1142 | "zerovec", | ||
| 1143 | ] | ||
| 1144 | |||
| 1145 | [[package]] | ||
| 1146 | name = "icu_normalizer" | ||
| 1147 | version = "2.2.0" | ||
| 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1149 | checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" | ||
| 1150 | dependencies = [ | ||
| 1151 | "icu_collections", | ||
| 1152 | "icu_normalizer_data", | ||
| 1153 | "icu_properties", | ||
| 1154 | "icu_provider", | ||
| 1155 | "smallvec", | ||
| 1156 | "zerovec", | ||
| 1157 | ] | ||
| 1158 | |||
| 1159 | [[package]] | ||
| 1160 | name = "icu_normalizer_data" | ||
| 1161 | version = "2.2.0" | ||
| 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1163 | checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" | ||
| 1164 | |||
| 1165 | [[package]] | ||
| 1166 | name = "icu_properties" | ||
| 1167 | version = "2.2.0" | ||
| 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1169 | checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" | ||
| 1170 | dependencies = [ | ||
| 1171 | "icu_collections", | ||
| 1172 | "icu_locale_core", | ||
| 1173 | "icu_properties_data", | ||
| 1174 | "icu_provider", | ||
| 1175 | "zerotrie", | ||
| 1176 | "zerovec", | ||
| 1177 | ] | ||
| 1178 | |||
| 1179 | [[package]] | ||
| 1180 | name = "icu_properties_data" | ||
| 1181 | version = "2.2.0" | ||
| 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1183 | checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" | ||
| 1184 | |||
| 1185 | [[package]] | ||
| 1186 | name = "icu_provider" | ||
| 1187 | version = "2.2.0" | ||
| 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1189 | checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" | ||
| 1190 | dependencies = [ | ||
| 1191 | "displaydoc", | ||
| 1192 | "icu_locale_core", | ||
| 1193 | "writeable", | ||
| 1194 | "yoke", | ||
| 1195 | "zerofrom", | ||
| 1196 | "zerotrie", | ||
| 1197 | "zerovec", | ||
| 1198 | ] | ||
| 1199 | |||
| 1200 | [[package]] | ||
| 1201 | name = "idna" | ||
| 1202 | version = "1.1.0" | ||
| 1203 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1204 | checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" | ||
| 1205 | dependencies = [ | ||
| 1206 | "idna_adapter", | ||
| 1207 | "smallvec", | ||
| 1208 | "utf8_iter", | ||
| 1209 | ] | ||
| 1210 | |||
| 1211 | [[package]] | ||
| 1212 | name = "idna_adapter" | ||
| 1213 | version = "1.2.2" | ||
| 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1215 | checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" | ||
| 1216 | dependencies = [ | ||
| 1217 | "icu_normalizer", | ||
| 1218 | "icu_properties", | ||
| 1219 | ] | ||
| 1220 | |||
| 1221 | [[package]] | ||
| 1222 | name = "image" | ||
| 1223 | version = "0.25.10" | ||
| 1224 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1225 | checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" | ||
| 1226 | dependencies = [ | ||
| 1227 | "bytemuck", | ||
| 1228 | "byteorder-lite", | ||
| 1229 | "moxcms", | ||
| 1230 | "num-traits", | ||
| 1231 | "png", | ||
| 1232 | "tiff", | ||
| 1233 | ] | ||
| 1234 | |||
| 1235 | [[package]] | ||
| 1236 | name = "indexmap" | ||
| 1237 | version = "2.14.0" | ||
| 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1239 | checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" | ||
| 1240 | dependencies = [ | ||
| 1241 | "equivalent", | ||
| 1242 | "hashbrown 0.17.1", | ||
| 1243 | ] | ||
| 1244 | |||
| 1245 | [[package]] | ||
| 1246 | name = "itertools" | ||
| 1247 | version = "0.14.0" | ||
| 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1249 | checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" | ||
| 1250 | dependencies = [ | ||
| 1251 | "either", | ||
| 1252 | ] | ||
| 1253 | |||
| 1254 | [[package]] | ||
| 1255 | name = "itoa" | ||
| 1256 | version = "1.0.18" | ||
| 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1258 | checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" | ||
| 1259 | |||
| 1260 | [[package]] | ||
| 1261 | name = "jni" | ||
| 1262 | version = "0.22.4" | ||
| 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1264 | checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" | ||
| 1265 | dependencies = [ | ||
| 1266 | "cfg-if", | ||
| 1267 | "combine", | ||
| 1268 | "jni-macros", | ||
| 1269 | "jni-sys 0.4.1", | ||
| 1270 | "log", | ||
| 1271 | "simd_cesu8", | ||
| 1272 | "thiserror 2.0.18", | ||
| 1273 | "walkdir", | ||
| 1274 | "windows-link", | ||
| 1275 | ] | ||
| 1276 | |||
| 1277 | [[package]] | ||
| 1278 | name = "jni-macros" | ||
| 1279 | version = "0.22.4" | ||
| 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1281 | checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" | ||
| 1282 | dependencies = [ | ||
| 1283 | "proc-macro2", | ||
| 1284 | "quote", | ||
| 1285 | "rustc_version", | ||
| 1286 | "simd_cesu8", | ||
| 1287 | "syn", | ||
| 1288 | ] | ||
| 1289 | |||
| 1290 | [[package]] | ||
| 1291 | name = "jni-sys" | ||
| 1292 | version = "0.3.1" | ||
| 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1294 | checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" | ||
| 1295 | dependencies = [ | ||
| 1296 | "jni-sys 0.4.1", | ||
| 1297 | ] | ||
| 1298 | |||
| 1299 | [[package]] | ||
| 1300 | name = "jni-sys" | ||
| 1301 | version = "0.4.1" | ||
| 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1303 | checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" | ||
| 1304 | dependencies = [ | ||
| 1305 | "jni-sys-macros", | ||
| 1306 | ] | ||
| 1307 | |||
| 1308 | [[package]] | ||
| 1309 | name = "jni-sys-macros" | ||
| 1310 | version = "0.4.1" | ||
| 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1312 | checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" | ||
| 1313 | dependencies = [ | ||
| 1314 | "quote", | ||
| 1315 | "syn", | ||
| 1316 | ] | ||
| 1317 | |||
| 1318 | [[package]] | ||
| 1319 | name = "jobserver" | ||
| 1320 | version = "0.1.34" | ||
| 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1322 | checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" | ||
| 1323 | dependencies = [ | ||
| 1324 | "getrandom 0.3.4", | ||
| 1325 | "libc", | ||
| 1326 | ] | ||
| 1327 | |||
| 1328 | [[package]] | ||
| 1329 | name = "js-sys" | ||
| 1330 | version = "0.3.103" | ||
| 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1332 | checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" | ||
| 1333 | dependencies = [ | ||
| 1334 | "cfg-if", | ||
| 1335 | "futures-util", | ||
| 1336 | "wasm-bindgen", | ||
| 1337 | ] | ||
| 1338 | |||
| 1339 | [[package]] | ||
| 1340 | name = "khronos_api" | ||
| 1341 | version = "3.1.0" | ||
| 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1343 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" | ||
| 1344 | |||
| 1345 | [[package]] | ||
| 1346 | name = "kurbo" | ||
| 1347 | version = "0.13.1" | ||
| 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1349 | checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2" | ||
| 1350 | dependencies = [ | ||
| 1351 | "arrayvec", | ||
| 1352 | "euclid", | ||
| 1353 | "polycool", | ||
| 1354 | "smallvec", | ||
| 1355 | ] | ||
| 1356 | |||
| 1357 | [[package]] | ||
| 1358 | name = "libc" | ||
| 1359 | version = "0.2.186" | ||
| 1360 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1361 | checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" | ||
| 1362 | |||
| 1363 | [[package]] | ||
| 1364 | name = "libloading" | ||
| 1365 | version = "0.8.9" | ||
| 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1367 | checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" | ||
| 1368 | dependencies = [ | ||
| 1369 | "cfg-if", | ||
| 1370 | "windows-link", | ||
| 1371 | ] | ||
| 1372 | |||
| 1373 | [[package]] | ||
| 1374 | name = "libm" | ||
| 1375 | version = "0.2.16" | ||
| 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1377 | checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" | ||
| 1378 | |||
| 1379 | [[package]] | ||
| 1380 | name = "libredox" | ||
| 1381 | version = "0.1.17" | ||
| 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1383 | checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" | ||
| 1384 | dependencies = [ | ||
| 1385 | "bitflags 2.13.0", | ||
| 1386 | "libc", | ||
| 1387 | "plain", | ||
| 1388 | "redox_syscall 0.8.1", | ||
| 1389 | ] | ||
| 1390 | |||
| 1391 | [[package]] | ||
| 1392 | name = "linebender_resource_handle" | ||
| 1393 | version = "0.1.1" | ||
| 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1395 | checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" | ||
| 1396 | |||
| 1397 | [[package]] | ||
| 1398 | name = "linux-raw-sys" | ||
| 1399 | version = "0.4.15" | ||
| 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1401 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" | ||
| 1402 | |||
| 1403 | [[package]] | ||
| 1404 | name = "linux-raw-sys" | ||
| 1405 | version = "0.12.1" | ||
| 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1407 | checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" | ||
| 1408 | |||
| 1409 | [[package]] | ||
| 1410 | name = "litemap" | ||
| 1411 | version = "0.8.2" | ||
| 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1413 | checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" | ||
| 1414 | |||
| 1415 | [[package]] | ||
| 1416 | name = "litrs" | ||
| 1417 | version = "1.0.0" | ||
| 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1419 | checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" | ||
| 1420 | |||
| 1421 | [[package]] | ||
| 1422 | name = "lock_api" | ||
| 1423 | version = "0.4.14" | ||
| 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1425 | checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" | ||
| 1426 | dependencies = [ | ||
| 1427 | "scopeguard", | ||
| 1428 | ] | ||
| 1429 | |||
| 1430 | [[package]] | ||
| 1431 | name = "log" | ||
| 1432 | version = "0.4.33" | ||
| 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1434 | checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" | ||
| 1435 | |||
| 1436 | [[package]] | ||
| 1437 | name = "memchr" | ||
| 1438 | version = "2.8.2" | ||
| 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1440 | checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" | ||
| 1441 | |||
| 1442 | [[package]] | ||
| 1443 | name = "memmap2" | ||
| 1444 | version = "0.9.11" | ||
| 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1446 | checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" | ||
| 1447 | dependencies = [ | ||
| 1448 | "libc", | ||
| 1449 | ] | ||
| 1450 | |||
| 1451 | [[package]] | ||
| 1452 | name = "memoffset" | ||
| 1453 | version = "0.9.1" | ||
| 1454 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1455 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" | ||
| 1456 | dependencies = [ | ||
| 1457 | "autocfg", | ||
| 1458 | ] | ||
| 1459 | |||
| 1460 | [[package]] | ||
| 1461 | name = "miniz_oxide" | ||
| 1462 | version = "0.8.9" | ||
| 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1464 | checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" | ||
| 1465 | dependencies = [ | ||
| 1466 | "adler2", | ||
| 1467 | "simd-adler32", | ||
| 1468 | ] | ||
| 1469 | |||
| 1470 | [[package]] | ||
| 1471 | name = "moxcms" | ||
| 1472 | version = "0.8.1" | ||
| 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1474 | checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" | ||
| 1475 | dependencies = [ | ||
| 1476 | "num-traits", | ||
| 1477 | "pxfm", | ||
| 1478 | ] | ||
| 1479 | |||
| 1480 | [[package]] | ||
| 1481 | name = "naga" | ||
| 1482 | version = "29.0.3" | ||
| 1483 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1484 | checksum = "0dd91265cc2454558f659b3b4b9640f0ddb8cc6521277f166b8a8c181c898079" | ||
| 1485 | dependencies = [ | ||
| 1486 | "arrayvec", | ||
| 1487 | "bit-set", | ||
| 1488 | "bitflags 2.13.0", | ||
| 1489 | "cfg-if", | ||
| 1490 | "cfg_aliases", | ||
| 1491 | "codespan-reporting", | ||
| 1492 | "half", | ||
| 1493 | "hashbrown 0.16.1", | ||
| 1494 | "hexf-parse", | ||
| 1495 | "indexmap", | ||
| 1496 | "libm", | ||
| 1497 | "log", | ||
| 1498 | "num-traits", | ||
| 1499 | "once_cell", | ||
| 1500 | "rustc-hash 1.1.0", | ||
| 1501 | "thiserror 2.0.18", | ||
| 1502 | "unicode-ident", | ||
| 1503 | ] | ||
| 1504 | |||
| 1505 | [[package]] | ||
| 1506 | name = "ndk" | ||
| 1507 | version = "0.9.0" | ||
| 1508 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1509 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" | ||
| 1510 | dependencies = [ | ||
| 1511 | "bitflags 2.13.0", | ||
| 1512 | "jni-sys 0.3.1", | ||
| 1513 | "log", | ||
| 1514 | "ndk-sys", | ||
| 1515 | "num_enum", | ||
| 1516 | "raw-window-handle", | ||
| 1517 | "thiserror 1.0.69", | ||
| 1518 | ] | ||
| 1519 | |||
| 1520 | [[package]] | ||
| 1521 | name = "ndk-context" | ||
| 1522 | version = "0.1.1" | ||
| 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1524 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" | ||
| 1525 | |||
| 1526 | [[package]] | ||
| 1527 | name = "ndk-sys" | ||
| 1528 | version = "0.6.0+11769913" | ||
| 1529 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1530 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" | ||
| 1531 | dependencies = [ | ||
| 1532 | "jni-sys 0.3.1", | ||
| 1533 | ] | ||
| 1534 | |||
| 1535 | [[package]] | ||
| 1536 | name = "nohash-hasher" | ||
| 1537 | version = "0.2.0" | ||
| 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1539 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" | ||
| 1540 | |||
| 1541 | [[package]] | ||
| 1542 | name = "num-traits" | ||
| 1543 | version = "0.2.19" | ||
| 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1545 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" | ||
| 1546 | dependencies = [ | ||
| 1547 | "autocfg", | ||
| 1548 | "libm", | ||
| 1549 | ] | ||
| 1550 | |||
| 1551 | [[package]] | ||
| 1552 | name = "num_enum" | ||
| 1553 | version = "0.7.6" | ||
| 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1555 | checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" | ||
| 1556 | dependencies = [ | ||
| 1557 | "num_enum_derive", | ||
| 1558 | "rustversion", | ||
| 1559 | ] | ||
| 1560 | |||
| 1561 | [[package]] | ||
| 1562 | name = "num_enum_derive" | ||
| 1563 | version = "0.7.6" | ||
| 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1565 | checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" | ||
| 1566 | dependencies = [ | ||
| 1567 | "proc-macro-crate", | ||
| 1568 | "proc-macro2", | ||
| 1569 | "quote", | ||
| 1570 | "syn", | ||
| 1571 | ] | ||
| 1572 | |||
| 1573 | [[package]] | ||
| 1574 | name = "objc-sys" | ||
| 1575 | version = "0.3.5" | ||
| 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1577 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" | ||
| 1578 | |||
| 1579 | [[package]] | ||
| 1580 | name = "objc2" | ||
| 1581 | version = "0.5.2" | ||
| 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1583 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" | ||
| 1584 | dependencies = [ | ||
| 1585 | "objc-sys", | ||
| 1586 | "objc2-encode", | ||
| 1587 | ] | ||
| 1588 | |||
| 1589 | [[package]] | ||
| 1590 | name = "objc2" | ||
| 1591 | version = "0.6.4" | ||
| 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1593 | checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" | ||
| 1594 | dependencies = [ | ||
| 1595 | "objc2-encode", | ||
| 1596 | ] | ||
| 1597 | |||
| 1598 | [[package]] | ||
| 1599 | name = "objc2-app-kit" | ||
| 1600 | version = "0.2.2" | ||
| 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1602 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" | ||
| 1603 | dependencies = [ | ||
| 1604 | "bitflags 2.13.0", | ||
| 1605 | "block2 0.5.1", | ||
| 1606 | "libc", | ||
| 1607 | "objc2 0.5.2", | ||
| 1608 | "objc2-core-data", | ||
| 1609 | "objc2-core-image", | ||
| 1610 | "objc2-foundation 0.2.2", | ||
| 1611 | "objc2-quartz-core", | ||
| 1612 | ] | ||
| 1613 | |||
| 1614 | [[package]] | ||
| 1615 | name = "objc2-app-kit" | ||
| 1616 | version = "0.3.2" | ||
| 1617 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1618 | checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" | ||
| 1619 | dependencies = [ | ||
| 1620 | "bitflags 2.13.0", | ||
| 1621 | "block2 0.6.2", | ||
| 1622 | "objc2 0.6.4", | ||
| 1623 | "objc2-core-foundation", | ||
| 1624 | "objc2-core-graphics", | ||
| 1625 | "objc2-foundation 0.3.2", | ||
| 1626 | ] | ||
| 1627 | |||
| 1628 | [[package]] | ||
| 1629 | name = "objc2-cloud-kit" | ||
| 1630 | version = "0.2.2" | ||
| 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1632 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" | ||
| 1633 | dependencies = [ | ||
| 1634 | "bitflags 2.13.0", | ||
| 1635 | "block2 0.5.1", | ||
| 1636 | "objc2 0.5.2", | ||
| 1637 | "objc2-core-location", | ||
| 1638 | "objc2-foundation 0.2.2", | ||
| 1639 | ] | ||
| 1640 | |||
| 1641 | [[package]] | ||
| 1642 | name = "objc2-contacts" | ||
| 1643 | version = "0.2.2" | ||
| 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1645 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" | ||
| 1646 | dependencies = [ | ||
| 1647 | "block2 0.5.1", | ||
| 1648 | "objc2 0.5.2", | ||
| 1649 | "objc2-foundation 0.2.2", | ||
| 1650 | ] | ||
| 1651 | |||
| 1652 | [[package]] | ||
| 1653 | name = "objc2-core-data" | ||
| 1654 | version = "0.2.2" | ||
| 1655 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1656 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" | ||
| 1657 | dependencies = [ | ||
| 1658 | "bitflags 2.13.0", | ||
| 1659 | "block2 0.5.1", | ||
| 1660 | "objc2 0.5.2", | ||
| 1661 | "objc2-foundation 0.2.2", | ||
| 1662 | ] | ||
| 1663 | |||
| 1664 | [[package]] | ||
| 1665 | name = "objc2-core-foundation" | ||
| 1666 | version = "0.3.2" | ||
| 1667 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1668 | checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" | ||
| 1669 | dependencies = [ | ||
| 1670 | "bitflags 2.13.0", | ||
| 1671 | "dispatch2", | ||
| 1672 | "objc2 0.6.4", | ||
| 1673 | ] | ||
| 1674 | |||
| 1675 | [[package]] | ||
| 1676 | name = "objc2-core-graphics" | ||
| 1677 | version = "0.3.2" | ||
| 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1679 | checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" | ||
| 1680 | dependencies = [ | ||
| 1681 | "bitflags 2.13.0", | ||
| 1682 | "dispatch2", | ||
| 1683 | "objc2 0.6.4", | ||
| 1684 | "objc2-core-foundation", | ||
| 1685 | "objc2-io-surface", | ||
| 1686 | ] | ||
| 1687 | |||
| 1688 | [[package]] | ||
| 1689 | name = "objc2-core-image" | ||
| 1690 | version = "0.2.2" | ||
| 1691 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1692 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" | ||
| 1693 | dependencies = [ | ||
| 1694 | "block2 0.5.1", | ||
| 1695 | "objc2 0.5.2", | ||
| 1696 | "objc2-foundation 0.2.2", | ||
| 1697 | "objc2-metal", | ||
| 1698 | ] | ||
| 1699 | |||
| 1700 | [[package]] | ||
| 1701 | name = "objc2-core-location" | ||
| 1702 | version = "0.2.2" | ||
| 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1704 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" | ||
| 1705 | dependencies = [ | ||
| 1706 | "block2 0.5.1", | ||
| 1707 | "objc2 0.5.2", | ||
| 1708 | "objc2-contacts", | ||
| 1709 | "objc2-foundation 0.2.2", | ||
| 1710 | ] | ||
| 1711 | |||
| 1712 | [[package]] | ||
| 1713 | name = "objc2-encode" | ||
| 1714 | version = "4.1.0" | ||
| 1715 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1716 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" | ||
| 1717 | |||
| 1718 | [[package]] | ||
| 1719 | name = "objc2-foundation" | ||
| 1720 | version = "0.2.2" | ||
| 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1722 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" | ||
| 1723 | dependencies = [ | ||
| 1724 | "bitflags 2.13.0", | ||
| 1725 | "block2 0.5.1", | ||
| 1726 | "dispatch", | ||
| 1727 | "libc", | ||
| 1728 | "objc2 0.5.2", | ||
| 1729 | ] | ||
| 1730 | |||
| 1731 | [[package]] | ||
| 1732 | name = "objc2-foundation" | ||
| 1733 | version = "0.3.2" | ||
| 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1735 | checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" | ||
| 1736 | dependencies = [ | ||
| 1737 | "bitflags 2.13.0", | ||
| 1738 | "block2 0.6.2", | ||
| 1739 | "objc2 0.6.4", | ||
| 1740 | "objc2-core-foundation", | ||
| 1741 | ] | ||
| 1742 | |||
| 1743 | [[package]] | ||
| 1744 | name = "objc2-io-surface" | ||
| 1745 | version = "0.3.2" | ||
| 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1747 | checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" | ||
| 1748 | dependencies = [ | ||
| 1749 | "bitflags 2.13.0", | ||
| 1750 | "objc2 0.6.4", | ||
| 1751 | "objc2-core-foundation", | ||
| 1752 | ] | ||
| 1753 | |||
| 1754 | [[package]] | ||
| 1755 | name = "objc2-link-presentation" | ||
| 1756 | version = "0.2.2" | ||
| 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1758 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" | ||
| 1759 | dependencies = [ | ||
| 1760 | "block2 0.5.1", | ||
| 1761 | "objc2 0.5.2", | ||
| 1762 | "objc2-app-kit 0.2.2", | ||
| 1763 | "objc2-foundation 0.2.2", | ||
| 1764 | ] | ||
| 1765 | |||
| 1766 | [[package]] | ||
| 1767 | name = "objc2-metal" | ||
| 1768 | version = "0.2.2" | ||
| 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1770 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" | ||
| 1771 | dependencies = [ | ||
| 1772 | "bitflags 2.13.0", | ||
| 1773 | "block2 0.5.1", | ||
| 1774 | "objc2 0.5.2", | ||
| 1775 | "objc2-foundation 0.2.2", | ||
| 1776 | ] | ||
| 1777 | |||
| 1778 | [[package]] | ||
| 1779 | name = "objc2-quartz-core" | ||
| 1780 | version = "0.2.2" | ||
| 1781 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1782 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" | ||
| 1783 | dependencies = [ | ||
| 1784 | "bitflags 2.13.0", | ||
| 1785 | "block2 0.5.1", | ||
| 1786 | "objc2 0.5.2", | ||
| 1787 | "objc2-foundation 0.2.2", | ||
| 1788 | "objc2-metal", | ||
| 1789 | ] | ||
| 1790 | |||
| 1791 | [[package]] | ||
| 1792 | name = "objc2-symbols" | ||
| 1793 | version = "0.2.2" | ||
| 1794 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1795 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" | ||
| 1796 | dependencies = [ | ||
| 1797 | "objc2 0.5.2", | ||
| 1798 | "objc2-foundation 0.2.2", | ||
| 1799 | ] | ||
| 1800 | |||
| 1801 | [[package]] | ||
| 1802 | name = "objc2-ui-kit" | ||
| 1803 | version = "0.2.2" | ||
| 1804 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1805 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" | ||
| 1806 | dependencies = [ | ||
| 1807 | "bitflags 2.13.0", | ||
| 1808 | "block2 0.5.1", | ||
| 1809 | "objc2 0.5.2", | ||
| 1810 | "objc2-cloud-kit", | ||
| 1811 | "objc2-core-data", | ||
| 1812 | "objc2-core-image", | ||
| 1813 | "objc2-core-location", | ||
| 1814 | "objc2-foundation 0.2.2", | ||
| 1815 | "objc2-link-presentation", | ||
| 1816 | "objc2-quartz-core", | ||
| 1817 | "objc2-symbols", | ||
| 1818 | "objc2-uniform-type-identifiers", | ||
| 1819 | "objc2-user-notifications", | ||
| 1820 | ] | ||
| 1821 | |||
| 1822 | [[package]] | ||
| 1823 | name = "objc2-ui-kit" | ||
| 1824 | version = "0.3.2" | ||
| 1825 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1826 | checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" | ||
| 1827 | dependencies = [ | ||
| 1828 | "bitflags 2.13.0", | ||
| 1829 | "objc2 0.6.4", | ||
| 1830 | "objc2-core-foundation", | ||
| 1831 | "objc2-foundation 0.3.2", | ||
| 1832 | ] | ||
| 1833 | |||
| 1834 | [[package]] | ||
| 1835 | name = "objc2-uniform-type-identifiers" | ||
| 1836 | version = "0.2.2" | ||
| 1837 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1838 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" | ||
| 1839 | dependencies = [ | ||
| 1840 | "block2 0.5.1", | ||
| 1841 | "objc2 0.5.2", | ||
| 1842 | "objc2-foundation 0.2.2", | ||
| 1843 | ] | ||
| 1844 | |||
| 1845 | [[package]] | ||
| 1846 | name = "objc2-user-notifications" | ||
| 1847 | version = "0.2.2" | ||
| 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1849 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" | ||
| 1850 | dependencies = [ | ||
| 1851 | "bitflags 2.13.0", | ||
| 1852 | "block2 0.5.1", | ||
| 1853 | "objc2 0.5.2", | ||
| 1854 | "objc2-core-location", | ||
| 1855 | "objc2-foundation 0.2.2", | ||
| 1856 | ] | ||
| 1857 | |||
| 1858 | [[package]] | ||
| 1859 | name = "once_cell" | ||
| 1860 | version = "1.21.4" | ||
| 1861 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1862 | checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" | ||
| 1863 | |||
| 1864 | [[package]] | ||
| 1865 | name = "orbclient" | ||
| 1866 | version = "0.3.55" | ||
| 1867 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1868 | checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" | ||
| 1869 | dependencies = [ | ||
| 1870 | "libc", | ||
| 1871 | "libredox", | ||
| 1872 | ] | ||
| 1873 | |||
| 1874 | [[package]] | ||
| 1875 | name = "pango-sys" | ||
| 1876 | version = "0.18.0" | ||
| 1877 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1878 | checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" | ||
| 1879 | dependencies = [ | ||
| 1880 | "glib-sys", | ||
| 1881 | "gobject-sys", | ||
| 1882 | "libc", | ||
| 1883 | "system-deps", | ||
| 1884 | ] | ||
| 1885 | |||
| 1886 | [[package]] | ||
| 1887 | name = "parking_lot" | ||
| 1888 | version = "0.12.5" | ||
| 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1890 | checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" | ||
| 1891 | dependencies = [ | ||
| 1892 | "lock_api", | ||
| 1893 | "parking_lot_core", | ||
| 1894 | ] | ||
| 1895 | |||
| 1896 | [[package]] | ||
| 1897 | name = "parking_lot_core" | ||
| 1898 | version = "0.9.12" | ||
| 1899 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1900 | checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" | ||
| 1901 | dependencies = [ | ||
| 1902 | "cfg-if", | ||
| 1903 | "libc", | ||
| 1904 | "redox_syscall 0.5.18", | ||
| 1905 | "smallvec", | ||
| 1906 | "windows-link", | ||
| 1907 | ] | ||
| 1908 | |||
| 1909 | [[package]] | ||
| 1910 | name = "peniko" | ||
| 1911 | version = "0.6.1" | ||
| 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1913 | checksum = "839c8299360d2e998bdb106dc0a6cd71dcc5f4df51df1b620361bf50e283cca6" | ||
| 1914 | dependencies = [ | ||
| 1915 | "bytemuck", | ||
| 1916 | "color", | ||
| 1917 | "kurbo", | ||
| 1918 | "linebender_resource_handle", | ||
| 1919 | "smallvec", | ||
| 1920 | ] | ||
| 1921 | |||
| 1922 | [[package]] | ||
| 1923 | name = "percent-encoding" | ||
| 1924 | version = "2.3.2" | ||
| 1925 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1926 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" | ||
| 1927 | |||
| 1928 | [[package]] | ||
| 1929 | name = "pin-project" | ||
| 1930 | version = "1.1.13" | ||
| 1931 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1932 | checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" | ||
| 1933 | dependencies = [ | ||
| 1934 | "pin-project-internal", | ||
| 1935 | ] | ||
| 1936 | |||
| 1937 | [[package]] | ||
| 1938 | name = "pin-project-internal" | ||
| 1939 | version = "1.1.13" | ||
| 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1941 | checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" | ||
| 1942 | dependencies = [ | ||
| 1943 | "proc-macro2", | ||
| 1944 | "quote", | ||
| 1945 | "syn", | ||
| 1946 | ] | ||
| 1947 | |||
| 1948 | [[package]] | ||
| 1949 | name = "pin-project-lite" | ||
| 1950 | version = "0.2.17" | ||
| 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1952 | checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" | ||
| 1953 | |||
| 1954 | [[package]] | ||
| 1955 | name = "pkg-config" | ||
| 1956 | version = "0.3.33" | ||
| 1957 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1958 | checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" | ||
| 1959 | |||
| 1960 | [[package]] | ||
| 1961 | name = "plain" | ||
| 1962 | version = "0.2.3" | ||
| 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1964 | checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" | ||
| 1965 | |||
| 1966 | [[package]] | ||
| 1967 | name = "png" | ||
| 1968 | version = "0.18.1" | ||
| 1969 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1970 | checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" | ||
| 1971 | dependencies = [ | ||
| 1972 | "bitflags 2.13.0", | ||
| 1973 | "crc32fast", | ||
| 1974 | "fdeflate", | ||
| 1975 | "flate2", | ||
| 1976 | "miniz_oxide", | ||
| 1977 | ] | ||
| 1978 | |||
| 1979 | [[package]] | ||
| 1980 | name = "polling" | ||
| 1981 | version = "3.11.0" | ||
| 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1983 | checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" | ||
| 1984 | dependencies = [ | ||
| 1985 | "cfg-if", | ||
| 1986 | "concurrent-queue", | ||
| 1987 | "hermit-abi", | ||
| 1988 | "pin-project-lite", | ||
| 1989 | "rustix 1.1.4", | ||
| 1990 | "windows-sys 0.61.2", | ||
| 1991 | ] | ||
| 1992 | |||
| 1993 | [[package]] | ||
| 1994 | name = "pollster" | ||
| 1995 | version = "0.4.0" | ||
| 1996 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 1997 | checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" | ||
| 1998 | |||
| 1999 | [[package]] | ||
| 2000 | name = "polycool" | ||
| 2001 | version = "0.4.0" | ||
| 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2003 | checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6" | ||
| 2004 | dependencies = [ | ||
| 2005 | "arrayvec", | ||
| 2006 | ] | ||
| 2007 | |||
| 2008 | [[package]] | ||
| 2009 | name = "portable-atomic" | ||
| 2010 | version = "1.13.1" | ||
| 2011 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2012 | checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" | ||
| 2013 | |||
| 2014 | [[package]] | ||
| 2015 | name = "portable-atomic-util" | ||
| 2016 | version = "0.2.7" | ||
| 2017 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2018 | checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" | ||
| 2019 | dependencies = [ | ||
| 2020 | "portable-atomic", | ||
| 2021 | ] | ||
| 2022 | |||
| 2023 | [[package]] | ||
| 2024 | name = "potential_utf" | ||
| 2025 | version = "0.1.5" | ||
| 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2027 | checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" | ||
| 2028 | dependencies = [ | ||
| 2029 | "zerovec", | ||
| 2030 | ] | ||
| 2031 | |||
| 2032 | [[package]] | ||
| 2033 | name = "proc-macro-crate" | ||
| 2034 | version = "3.5.0" | ||
| 2035 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2036 | checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" | ||
| 2037 | dependencies = [ | ||
| 2038 | "toml_edit 0.25.12+spec-1.1.0", | ||
| 2039 | ] | ||
| 2040 | |||
| 2041 | [[package]] | ||
| 2042 | name = "proc-macro2" | ||
| 2043 | version = "1.0.106" | ||
| 2044 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2045 | checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" | ||
| 2046 | dependencies = [ | ||
| 2047 | "unicode-ident", | ||
| 2048 | ] | ||
| 2049 | |||
| 2050 | [[package]] | ||
| 2051 | name = "profiling" | ||
| 2052 | version = "1.0.18" | ||
| 2053 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2054 | checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" | ||
| 2055 | |||
| 2056 | [[package]] | ||
| 2057 | name = "pxfm" | ||
| 2058 | version = "0.1.29" | ||
| 2059 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2060 | checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" | ||
| 2061 | |||
| 2062 | [[package]] | ||
| 2063 | name = "quick-error" | ||
| 2064 | version = "2.0.1" | ||
| 2065 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2066 | checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" | ||
| 2067 | |||
| 2068 | [[package]] | ||
| 2069 | name = "quick-xml" | ||
| 2070 | version = "0.39.4" | ||
| 2071 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2072 | checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" | ||
| 2073 | dependencies = [ | ||
| 2074 | "memchr", | ||
| 2075 | ] | ||
| 2076 | |||
| 2077 | [[package]] | ||
| 2078 | name = "quote" | ||
| 2079 | version = "1.0.46" | ||
| 2080 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2081 | checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" | ||
| 2082 | dependencies = [ | ||
| 2083 | "proc-macro2", | ||
| 2084 | ] | ||
| 2085 | |||
| 2086 | [[package]] | ||
| 2087 | name = "r-efi" | ||
| 2088 | version = "5.3.0" | ||
| 2089 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2090 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" | ||
| 2091 | |||
| 2092 | [[package]] | ||
| 2093 | name = "raw-window-handle" | ||
| 2094 | version = "0.6.2" | ||
| 2095 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2096 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" | ||
| 2097 | |||
| 2098 | [[package]] | ||
| 2099 | name = "read-fonts" | ||
| 2100 | version = "0.39.2" | ||
| 2101 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2102 | checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" | ||
| 2103 | dependencies = [ | ||
| 2104 | "bytemuck", | ||
| 2105 | "font-types", | ||
| 2106 | ] | ||
| 2107 | |||
| 2108 | [[package]] | ||
| 2109 | name = "redox_syscall" | ||
| 2110 | version = "0.4.1" | ||
| 2111 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2112 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" | ||
| 2113 | dependencies = [ | ||
| 2114 | "bitflags 1.3.2", | ||
| 2115 | ] | ||
| 2116 | |||
| 2117 | [[package]] | ||
| 2118 | name = "redox_syscall" | ||
| 2119 | version = "0.5.18" | ||
| 2120 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2121 | checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" | ||
| 2122 | dependencies = [ | ||
| 2123 | "bitflags 2.13.0", | ||
| 2124 | ] | ||
| 2125 | |||
| 2126 | [[package]] | ||
| 2127 | name = "redox_syscall" | ||
| 2128 | version = "0.8.1" | ||
| 2129 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2130 | checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" | ||
| 2131 | dependencies = [ | ||
| 2132 | "bitflags 2.13.0", | ||
| 2133 | ] | ||
| 2134 | |||
| 2135 | [[package]] | ||
| 2136 | name = "regex" | ||
| 2137 | version = "1.12.4" | ||
| 2138 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2139 | checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" | ||
| 2140 | dependencies = [ | ||
| 2141 | "aho-corasick", | ||
| 2142 | "memchr", | ||
| 2143 | "regex-automata", | ||
| 2144 | "regex-syntax", | ||
| 2145 | ] | ||
| 2146 | |||
| 2147 | [[package]] | ||
| 2148 | name = "regex-automata" | ||
| 2149 | version = "0.4.14" | ||
| 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2151 | checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" | ||
| 2152 | dependencies = [ | ||
| 2153 | "aho-corasick", | ||
| 2154 | "memchr", | ||
| 2155 | "regex-syntax", | ||
| 2156 | ] | ||
| 2157 | |||
| 2158 | [[package]] | ||
| 2159 | name = "regex-syntax" | ||
| 2160 | version = "0.8.11" | ||
| 2161 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2162 | checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" | ||
| 2163 | |||
| 2164 | [[package]] | ||
| 2165 | name = "renderdoc-sys" | ||
| 2166 | version = "1.1.0" | ||
| 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2168 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" | ||
| 2169 | |||
| 2170 | [[package]] | ||
| 2171 | name = "rfd" | ||
| 2172 | version = "0.15.4" | ||
| 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2174 | checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" | ||
| 2175 | dependencies = [ | ||
| 2176 | "block2 0.6.2", | ||
| 2177 | "dispatch2", | ||
| 2178 | "glib-sys", | ||
| 2179 | "gobject-sys", | ||
| 2180 | "gtk-sys", | ||
| 2181 | "js-sys", | ||
| 2182 | "log", | ||
| 2183 | "objc2 0.6.4", | ||
| 2184 | "objc2-app-kit 0.3.2", | ||
| 2185 | "objc2-core-foundation", | ||
| 2186 | "objc2-foundation 0.3.2", | ||
| 2187 | "pollster", | ||
| 2188 | "raw-window-handle", | ||
| 2189 | "wasm-bindgen", | ||
| 2190 | "wasm-bindgen-futures", | ||
| 2191 | "web-sys", | ||
| 2192 | "windows-sys 0.59.0", | ||
| 2193 | ] | ||
| 2194 | |||
| 2195 | [[package]] | ||
| 2196 | name = "ring" | ||
| 2197 | version = "0.17.14" | ||
| 2198 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2199 | checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" | ||
| 2200 | dependencies = [ | ||
| 2201 | "cc", | ||
| 2202 | "cfg-if", | ||
| 2203 | "getrandom 0.2.17", | ||
| 2204 | "libc", | ||
| 2205 | "untrusted", | ||
| 2206 | "windows-sys 0.52.0", | ||
| 2207 | ] | ||
| 2208 | |||
| 2209 | [[package]] | ||
| 2210 | name = "rustc-hash" | ||
| 2211 | version = "1.1.0" | ||
| 2212 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2213 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" | ||
| 2214 | |||
| 2215 | [[package]] | ||
| 2216 | name = "rustc-hash" | ||
| 2217 | version = "2.1.2" | ||
| 2218 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2219 | checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" | ||
| 2220 | |||
| 2221 | [[package]] | ||
| 2222 | name = "rustc_version" | ||
| 2223 | version = "0.4.1" | ||
| 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2225 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" | ||
| 2226 | dependencies = [ | ||
| 2227 | "semver", | ||
| 2228 | ] | ||
| 2229 | |||
| 2230 | [[package]] | ||
| 2231 | name = "rustix" | ||
| 2232 | version = "0.38.44" | ||
| 2233 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2234 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" | ||
| 2235 | dependencies = [ | ||
| 2236 | "bitflags 2.13.0", | ||
| 2237 | "errno", | ||
| 2238 | "libc", | ||
| 2239 | "linux-raw-sys 0.4.15", | ||
| 2240 | "windows-sys 0.59.0", | ||
| 2241 | ] | ||
| 2242 | |||
| 2243 | [[package]] | ||
| 2244 | name = "rustix" | ||
| 2245 | version = "1.1.4" | ||
| 2246 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2247 | checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" | ||
| 2248 | dependencies = [ | ||
| 2249 | "bitflags 2.13.0", | ||
| 2250 | "errno", | ||
| 2251 | "libc", | ||
| 2252 | "linux-raw-sys 0.12.1", | ||
| 2253 | "windows-sys 0.61.2", | ||
| 2254 | ] | ||
| 2255 | |||
| 2256 | [[package]] | ||
| 2257 | name = "rustls" | ||
| 2258 | version = "0.23.41" | ||
| 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2260 | checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" | ||
| 2261 | dependencies = [ | ||
| 2262 | "log", | ||
| 2263 | "once_cell", | ||
| 2264 | "ring", | ||
| 2265 | "rustls-pki-types", | ||
| 2266 | "rustls-webpki", | ||
| 2267 | "subtle", | ||
| 2268 | "zeroize", | ||
| 2269 | ] | ||
| 2270 | |||
| 2271 | [[package]] | ||
| 2272 | name = "rustls-pki-types" | ||
| 2273 | version = "1.14.1" | ||
| 2274 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2275 | checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" | ||
| 2276 | dependencies = [ | ||
| 2277 | "zeroize", | ||
| 2278 | ] | ||
| 2279 | |||
| 2280 | [[package]] | ||
| 2281 | name = "rustls-webpki" | ||
| 2282 | version = "0.103.13" | ||
| 2283 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2284 | checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" | ||
| 2285 | dependencies = [ | ||
| 2286 | "ring", | ||
| 2287 | "rustls-pki-types", | ||
| 2288 | "untrusted", | ||
| 2289 | ] | ||
| 2290 | |||
| 2291 | [[package]] | ||
| 2292 | name = "rustversion" | ||
| 2293 | version = "1.0.22" | ||
| 2294 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2295 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" | ||
| 2296 | |||
| 2297 | [[package]] | ||
| 2298 | name = "same-file" | ||
| 2299 | version = "1.0.6" | ||
| 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2301 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" | ||
| 2302 | dependencies = [ | ||
| 2303 | "winapi-util", | ||
| 2304 | ] | ||
| 2305 | |||
| 2306 | [[package]] | ||
| 2307 | name = "scoped-tls" | ||
| 2308 | version = "1.0.1" | ||
| 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2310 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" | ||
| 2311 | |||
| 2312 | [[package]] | ||
| 2313 | name = "scopeguard" | ||
| 2314 | version = "1.2.0" | ||
| 2315 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2316 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" | ||
| 2317 | |||
| 2318 | [[package]] | ||
| 2319 | name = "self_cell" | ||
| 2320 | version = "1.2.2" | ||
| 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2322 | checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" | ||
| 2323 | |||
| 2324 | [[package]] | ||
| 2325 | name = "semver" | ||
| 2326 | version = "1.0.28" | ||
| 2327 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2328 | checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" | ||
| 2329 | |||
| 2330 | [[package]] | ||
| 2331 | name = "serde" | ||
| 2332 | version = "1.0.228" | ||
| 2333 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2334 | checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" | ||
| 2335 | dependencies = [ | ||
| 2336 | "serde_core", | ||
| 2337 | "serde_derive", | ||
| 2338 | ] | ||
| 2339 | |||
| 2340 | [[package]] | ||
| 2341 | name = "serde_core" | ||
| 2342 | version = "1.0.228" | ||
| 2343 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2344 | checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" | ||
| 2345 | dependencies = [ | ||
| 2346 | "serde_derive", | ||
| 2347 | ] | ||
| 2348 | |||
| 2349 | [[package]] | ||
| 2350 | name = "serde_derive" | ||
| 2351 | version = "1.0.228" | ||
| 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2353 | checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" | ||
| 2354 | dependencies = [ | ||
| 2355 | "proc-macro2", | ||
| 2356 | "quote", | ||
| 2357 | "syn", | ||
| 2358 | ] | ||
| 2359 | |||
| 2360 | [[package]] | ||
| 2361 | name = "serde_json" | ||
| 2362 | version = "1.0.150" | ||
| 2363 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2364 | checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" | ||
| 2365 | dependencies = [ | ||
| 2366 | "itoa", | ||
| 2367 | "memchr", | ||
| 2368 | "serde", | ||
| 2369 | "serde_core", | ||
| 2370 | "zmij", | ||
| 2371 | ] | ||
| 2372 | |||
| 2373 | [[package]] | ||
| 2374 | name = "serde_spanned" | ||
| 2375 | version = "0.6.9" | ||
| 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2377 | checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" | ||
| 2378 | dependencies = [ | ||
| 2379 | "serde", | ||
| 2380 | ] | ||
| 2381 | |||
| 2382 | [[package]] | ||
| 2383 | name = "shlex" | ||
| 2384 | version = "2.0.1" | ||
| 2385 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2386 | checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" | ||
| 2387 | |||
| 2388 | [[package]] | ||
| 2389 | name = "simd-adler32" | ||
| 2390 | version = "0.3.9" | ||
| 2391 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2392 | checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" | ||
| 2393 | |||
| 2394 | [[package]] | ||
| 2395 | name = "simd_cesu8" | ||
| 2396 | version = "1.1.1" | ||
| 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2398 | checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" | ||
| 2399 | dependencies = [ | ||
| 2400 | "rustc_version", | ||
| 2401 | "simdutf8", | ||
| 2402 | ] | ||
| 2403 | |||
| 2404 | [[package]] | ||
| 2405 | name = "simdutf8" | ||
| 2406 | version = "0.1.5" | ||
| 2407 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2408 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" | ||
| 2409 | |||
| 2410 | [[package]] | ||
| 2411 | name = "skrifa" | ||
| 2412 | version = "0.42.1" | ||
| 2413 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2414 | checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" | ||
| 2415 | dependencies = [ | ||
| 2416 | "bytemuck", | ||
| 2417 | "read-fonts", | ||
| 2418 | ] | ||
| 2419 | |||
| 2420 | [[package]] | ||
| 2421 | name = "slab" | ||
| 2422 | version = "0.4.12" | ||
| 2423 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2424 | checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" | ||
| 2425 | |||
| 2426 | [[package]] | ||
| 2427 | name = "slotmap" | ||
| 2428 | version = "1.1.1" | ||
| 2429 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2430 | checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" | ||
| 2431 | dependencies = [ | ||
| 2432 | "version_check", | ||
| 2433 | ] | ||
| 2434 | |||
| 2435 | [[package]] | ||
| 2436 | name = "smallvec" | ||
| 2437 | version = "1.15.2" | ||
| 2438 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2439 | checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" | ||
| 2440 | |||
| 2441 | [[package]] | ||
| 2442 | name = "smithay-client-toolkit" | ||
| 2443 | version = "0.20.0" | ||
| 2444 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2445 | checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" | ||
| 2446 | dependencies = [ | ||
| 2447 | "bitflags 2.13.0", | ||
| 2448 | "calloop 0.14.4", | ||
| 2449 | "calloop-wayland-source", | ||
| 2450 | "cursor-icon", | ||
| 2451 | "libc", | ||
| 2452 | "log", | ||
| 2453 | "memmap2", | ||
| 2454 | "rustix 1.1.4", | ||
| 2455 | "thiserror 2.0.18", | ||
| 2456 | "wayland-backend", | ||
| 2457 | "wayland-client", | ||
| 2458 | "wayland-csd-frame", | ||
| 2459 | "wayland-cursor", | ||
| 2460 | "wayland-protocols", | ||
| 2461 | "wayland-protocols-experimental", | ||
| 2462 | "wayland-protocols-misc", | ||
| 2463 | "wayland-protocols-wlr", | ||
| 2464 | "wayland-scanner", | ||
| 2465 | "xkeysym", | ||
| 2466 | ] | ||
| 2467 | |||
| 2468 | [[package]] | ||
| 2469 | name = "smithay-clipboard" | ||
| 2470 | version = "0.7.3" | ||
| 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2472 | checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226" | ||
| 2473 | dependencies = [ | ||
| 2474 | "libc", | ||
| 2475 | "smithay-client-toolkit", | ||
| 2476 | "wayland-backend", | ||
| 2477 | ] | ||
| 2478 | |||
| 2479 | [[package]] | ||
| 2480 | name = "smol_str" | ||
| 2481 | version = "0.2.2" | ||
| 2482 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2483 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" | ||
| 2484 | dependencies = [ | ||
| 2485 | "serde", | ||
| 2486 | ] | ||
| 2487 | |||
| 2488 | [[package]] | ||
| 2489 | name = "stable_deref_trait" | ||
| 2490 | version = "1.2.1" | ||
| 2491 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2492 | checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" | ||
| 2493 | |||
| 2494 | [[package]] | ||
| 2495 | name = "static_assertions" | ||
| 2496 | version = "1.1.0" | ||
| 2497 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2498 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" | ||
| 2499 | |||
| 2500 | [[package]] | ||
| 2501 | name = "subtle" | ||
| 2502 | version = "2.6.1" | ||
| 2503 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2504 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" | ||
| 2505 | |||
| 2506 | [[package]] | ||
| 2507 | name = "syn" | ||
| 2508 | version = "2.0.118" | ||
| 2509 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2510 | checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" | ||
| 2511 | dependencies = [ | ||
| 2512 | "proc-macro2", | ||
| 2513 | "quote", | ||
| 2514 | "unicode-ident", | ||
| 2515 | ] | ||
| 2516 | |||
| 2517 | [[package]] | ||
| 2518 | name = "synstructure" | ||
| 2519 | version = "0.13.2" | ||
| 2520 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2521 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" | ||
| 2522 | dependencies = [ | ||
| 2523 | "proc-macro2", | ||
| 2524 | "quote", | ||
| 2525 | "syn", | ||
| 2526 | ] | ||
| 2527 | |||
| 2528 | [[package]] | ||
| 2529 | name = "system-deps" | ||
| 2530 | version = "6.2.2" | ||
| 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2532 | checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" | ||
| 2533 | dependencies = [ | ||
| 2534 | "cfg-expr", | ||
| 2535 | "heck", | ||
| 2536 | "pkg-config", | ||
| 2537 | "toml", | ||
| 2538 | "version-compare", | ||
| 2539 | ] | ||
| 2540 | |||
| 2541 | [[package]] | ||
| 2542 | name = "target-lexicon" | ||
| 2543 | version = "0.12.16" | ||
| 2544 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2545 | checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" | ||
| 2546 | |||
| 2547 | [[package]] | ||
| 2548 | name = "thiserror" | ||
| 2549 | version = "1.0.69" | ||
| 2550 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2551 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" | ||
| 2552 | dependencies = [ | ||
| 2553 | "thiserror-impl 1.0.69", | ||
| 2554 | ] | ||
| 2555 | |||
| 2556 | [[package]] | ||
| 2557 | name = "thiserror" | ||
| 2558 | version = "2.0.18" | ||
| 2559 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2560 | checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" | ||
| 2561 | dependencies = [ | ||
| 2562 | "thiserror-impl 2.0.18", | ||
| 2563 | ] | ||
| 2564 | |||
| 2565 | [[package]] | ||
| 2566 | name = "thiserror-impl" | ||
| 2567 | version = "1.0.69" | ||
| 2568 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2569 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" | ||
| 2570 | dependencies = [ | ||
| 2571 | "proc-macro2", | ||
| 2572 | "quote", | ||
| 2573 | "syn", | ||
| 2574 | ] | ||
| 2575 | |||
| 2576 | [[package]] | ||
| 2577 | name = "thiserror-impl" | ||
| 2578 | version = "2.0.18" | ||
| 2579 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2580 | checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" | ||
| 2581 | dependencies = [ | ||
| 2582 | "proc-macro2", | ||
| 2583 | "quote", | ||
| 2584 | "syn", | ||
| 2585 | ] | ||
| 2586 | |||
| 2587 | [[package]] | ||
| 2588 | name = "tiff" | ||
| 2589 | version = "0.11.3" | ||
| 2590 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2591 | checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" | ||
| 2592 | dependencies = [ | ||
| 2593 | "fax", | ||
| 2594 | "flate2", | ||
| 2595 | "half", | ||
| 2596 | "quick-error", | ||
| 2597 | "weezl", | ||
| 2598 | "zune-jpeg", | ||
| 2599 | ] | ||
| 2600 | |||
| 2601 | [[package]] | ||
| 2602 | name = "tinystr" | ||
| 2603 | version = "0.8.3" | ||
| 2604 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2605 | checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" | ||
| 2606 | dependencies = [ | ||
| 2607 | "displaydoc", | ||
| 2608 | "zerovec", | ||
| 2609 | ] | ||
| 2610 | |||
| 2611 | [[package]] | ||
| 2612 | name = "toml" | ||
| 2613 | version = "0.8.23" | ||
| 2614 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2615 | checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" | ||
| 2616 | dependencies = [ | ||
| 2617 | "serde", | ||
| 2618 | "serde_spanned", | ||
| 2619 | "toml_datetime 0.6.11", | ||
| 2620 | "toml_edit 0.22.27", | ||
| 2621 | ] | ||
| 2622 | |||
| 2623 | [[package]] | ||
| 2624 | name = "toml_datetime" | ||
| 2625 | version = "0.6.11" | ||
| 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2627 | checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" | ||
| 2628 | dependencies = [ | ||
| 2629 | "serde", | ||
| 2630 | ] | ||
| 2631 | |||
| 2632 | [[package]] | ||
| 2633 | name = "toml_datetime" | ||
| 2634 | version = "1.1.1+spec-1.1.0" | ||
| 2635 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2636 | checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" | ||
| 2637 | dependencies = [ | ||
| 2638 | "serde_core", | ||
| 2639 | ] | ||
| 2640 | |||
| 2641 | [[package]] | ||
| 2642 | name = "toml_edit" | ||
| 2643 | version = "0.22.27" | ||
| 2644 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2645 | checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" | ||
| 2646 | dependencies = [ | ||
| 2647 | "indexmap", | ||
| 2648 | "serde", | ||
| 2649 | "serde_spanned", | ||
| 2650 | "toml_datetime 0.6.11", | ||
| 2651 | "winnow 0.7.15", | ||
| 2652 | ] | ||
| 2653 | |||
| 2654 | [[package]] | ||
| 2655 | name = "toml_edit" | ||
| 2656 | version = "0.25.12+spec-1.1.0" | ||
| 2657 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2658 | checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" | ||
| 2659 | dependencies = [ | ||
| 2660 | "indexmap", | ||
| 2661 | "toml_datetime 1.1.1+spec-1.1.0", | ||
| 2662 | "toml_parser", | ||
| 2663 | "winnow 1.0.3", | ||
| 2664 | ] | ||
| 2665 | |||
| 2666 | [[package]] | ||
| 2667 | name = "toml_parser" | ||
| 2668 | version = "1.1.2+spec-1.1.0" | ||
| 2669 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2670 | checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" | ||
| 2671 | dependencies = [ | ||
| 2672 | "winnow 1.0.3", | ||
| 2673 | ] | ||
| 2674 | |||
| 2675 | [[package]] | ||
| 2676 | name = "tracing" | ||
| 2677 | version = "0.1.44" | ||
| 2678 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2679 | checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" | ||
| 2680 | dependencies = [ | ||
| 2681 | "log", | ||
| 2682 | "pin-project-lite", | ||
| 2683 | "tracing-core", | ||
| 2684 | ] | ||
| 2685 | |||
| 2686 | [[package]] | ||
| 2687 | name = "tracing-core" | ||
| 2688 | version = "0.1.36" | ||
| 2689 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2690 | checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" | ||
| 2691 | |||
| 2692 | [[package]] | ||
| 2693 | name = "type-map" | ||
| 2694 | version = "0.5.1" | ||
| 2695 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2696 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" | ||
| 2697 | dependencies = [ | ||
| 2698 | "rustc-hash 2.1.2", | ||
| 2699 | ] | ||
| 2700 | |||
| 2701 | [[package]] | ||
| 2702 | name = "unicode-general-category" | ||
| 2703 | version = "1.1.0" | ||
| 2704 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2705 | checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f" | ||
| 2706 | |||
| 2707 | [[package]] | ||
| 2708 | name = "unicode-ident" | ||
| 2709 | version = "1.0.24" | ||
| 2710 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2711 | checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" | ||
| 2712 | |||
| 2713 | [[package]] | ||
| 2714 | name = "unicode-segmentation" | ||
| 2715 | version = "1.13.3" | ||
| 2716 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2717 | checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" | ||
| 2718 | |||
| 2719 | [[package]] | ||
| 2720 | name = "unicode-width" | ||
| 2721 | version = "0.2.2" | ||
| 2722 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2723 | checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" | ||
| 2724 | |||
| 2725 | [[package]] | ||
| 2726 | name = "untrusted" | ||
| 2727 | version = "0.9.0" | ||
| 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2729 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" | ||
| 2730 | |||
| 2731 | [[package]] | ||
| 2732 | name = "ureq" | ||
| 2733 | version = "3.3.0" | ||
| 2734 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2735 | checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" | ||
| 2736 | dependencies = [ | ||
| 2737 | "base64", | ||
| 2738 | "flate2", | ||
| 2739 | "log", | ||
| 2740 | "percent-encoding", | ||
| 2741 | "rustls", | ||
| 2742 | "rustls-pki-types", | ||
| 2743 | "ureq-proto", | ||
| 2744 | "utf8-zero", | ||
| 2745 | "webpki-roots", | ||
| 2746 | ] | ||
| 2747 | |||
| 2748 | [[package]] | ||
| 2749 | name = "ureq-proto" | ||
| 2750 | version = "0.6.0" | ||
| 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2752 | checksum = "e994ba84b0bd1b1b0cf92878b7ef898a5c1760108fe7b6010327e274917a808c" | ||
| 2753 | dependencies = [ | ||
| 2754 | "base64", | ||
| 2755 | "http", | ||
| 2756 | "httparse", | ||
| 2757 | "log", | ||
| 2758 | ] | ||
| 2759 | |||
| 2760 | [[package]] | ||
| 2761 | name = "url" | ||
| 2762 | version = "2.5.8" | ||
| 2763 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2764 | checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" | ||
| 2765 | dependencies = [ | ||
| 2766 | "form_urlencoded", | ||
| 2767 | "idna", | ||
| 2768 | "percent-encoding", | ||
| 2769 | "serde", | ||
| 2770 | ] | ||
| 2771 | |||
| 2772 | [[package]] | ||
| 2773 | name = "utf8-zero" | ||
| 2774 | version = "0.8.1" | ||
| 2775 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2776 | checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" | ||
| 2777 | |||
| 2778 | [[package]] | ||
| 2779 | name = "utf8_iter" | ||
| 2780 | version = "1.0.4" | ||
| 2781 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2782 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" | ||
| 2783 | |||
| 2784 | [[package]] | ||
| 2785 | name = "uuid" | ||
| 2786 | version = "1.23.4" | ||
| 2787 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2788 | checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" | ||
| 2789 | |||
| 2790 | [[package]] | ||
| 2791 | name = "vello_common" | ||
| 2792 | version = "0.0.9" | ||
| 2793 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2794 | checksum = "19d672facaa2d697285a786cd9d44d614cd2ce54cdc022504bf339f8fff3b750" | ||
| 2795 | dependencies = [ | ||
| 2796 | "bytemuck", | ||
| 2797 | "fearless_simd", | ||
| 2798 | "guillotiere", | ||
| 2799 | "hashbrown 0.17.1", | ||
| 2800 | "log", | ||
| 2801 | "peniko", | ||
| 2802 | "smallvec", | ||
| 2803 | "thiserror 2.0.18", | ||
| 2804 | ] | ||
| 2805 | |||
| 2806 | [[package]] | ||
| 2807 | name = "vello_cpu" | ||
| 2808 | version = "0.0.9" | ||
| 2809 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2810 | checksum = "588691169aed86b5c8fb487266afee01323234e6fd0a3f2aaec0eaa8e4007f23" | ||
| 2811 | dependencies = [ | ||
| 2812 | "bytemuck", | ||
| 2813 | "glifo", | ||
| 2814 | "hashbrown 0.17.1", | ||
| 2815 | "vello_common", | ||
| 2816 | ] | ||
| 2817 | |||
| 2818 | [[package]] | ||
| 2819 | name = "version-compare" | ||
| 2820 | version = "0.2.1" | ||
| 2821 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2822 | checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" | ||
| 2823 | |||
| 2824 | [[package]] | ||
| 2825 | name = "version_check" | ||
| 2826 | version = "0.9.5" | ||
| 2827 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2828 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" | ||
| 2829 | |||
| 2830 | [[package]] | ||
| 2831 | name = "walkdir" | ||
| 2832 | version = "2.5.0" | ||
| 2833 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2834 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" | ||
| 2835 | dependencies = [ | ||
| 2836 | "same-file", | ||
| 2837 | "winapi-util", | ||
| 2838 | ] | ||
| 2839 | |||
| 2840 | [[package]] | ||
| 2841 | name = "wasi" | ||
| 2842 | version = "0.11.1+wasi-snapshot-preview1" | ||
| 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2844 | checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" | ||
| 2845 | |||
| 2846 | [[package]] | ||
| 2847 | name = "wasip2" | ||
| 2848 | version = "1.0.4+wasi-0.2.12" | ||
| 2849 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2850 | checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" | ||
| 2851 | dependencies = [ | ||
| 2852 | "wit-bindgen", | ||
| 2853 | ] | ||
| 2854 | |||
| 2855 | [[package]] | ||
| 2856 | name = "wasm-bindgen" | ||
| 2857 | version = "0.2.126" | ||
| 2858 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2859 | checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" | ||
| 2860 | dependencies = [ | ||
| 2861 | "cfg-if", | ||
| 2862 | "once_cell", | ||
| 2863 | "rustversion", | ||
| 2864 | "wasm-bindgen-macro", | ||
| 2865 | "wasm-bindgen-shared", | ||
| 2866 | ] | ||
| 2867 | |||
| 2868 | [[package]] | ||
| 2869 | name = "wasm-bindgen-futures" | ||
| 2870 | version = "0.4.76" | ||
| 2871 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2872 | checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" | ||
| 2873 | dependencies = [ | ||
| 2874 | "js-sys", | ||
| 2875 | "wasm-bindgen", | ||
| 2876 | ] | ||
| 2877 | |||
| 2878 | [[package]] | ||
| 2879 | name = "wasm-bindgen-macro" | ||
| 2880 | version = "0.2.126" | ||
| 2881 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2882 | checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" | ||
| 2883 | dependencies = [ | ||
| 2884 | "quote", | ||
| 2885 | "wasm-bindgen-macro-support", | ||
| 2886 | ] | ||
| 2887 | |||
| 2888 | [[package]] | ||
| 2889 | name = "wasm-bindgen-macro-support" | ||
| 2890 | version = "0.2.126" | ||
| 2891 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2892 | checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" | ||
| 2893 | dependencies = [ | ||
| 2894 | "bumpalo", | ||
| 2895 | "proc-macro2", | ||
| 2896 | "quote", | ||
| 2897 | "syn", | ||
| 2898 | "wasm-bindgen-shared", | ||
| 2899 | ] | ||
| 2900 | |||
| 2901 | [[package]] | ||
| 2902 | name = "wasm-bindgen-shared" | ||
| 2903 | version = "0.2.126" | ||
| 2904 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2905 | checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" | ||
| 2906 | dependencies = [ | ||
| 2907 | "unicode-ident", | ||
| 2908 | ] | ||
| 2909 | |||
| 2910 | [[package]] | ||
| 2911 | name = "wayland-backend" | ||
| 2912 | version = "0.3.15" | ||
| 2913 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2914 | checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" | ||
| 2915 | dependencies = [ | ||
| 2916 | "cc", | ||
| 2917 | "downcast-rs", | ||
| 2918 | "rustix 1.1.4", | ||
| 2919 | "scoped-tls", | ||
| 2920 | "smallvec", | ||
| 2921 | "wayland-sys", | ||
| 2922 | ] | ||
| 2923 | |||
| 2924 | [[package]] | ||
| 2925 | name = "wayland-client" | ||
| 2926 | version = "0.31.14" | ||
| 2927 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2928 | checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" | ||
| 2929 | dependencies = [ | ||
| 2930 | "bitflags 2.13.0", | ||
| 2931 | "rustix 1.1.4", | ||
| 2932 | "wayland-backend", | ||
| 2933 | "wayland-scanner", | ||
| 2934 | ] | ||
| 2935 | |||
| 2936 | [[package]] | ||
| 2937 | name = "wayland-csd-frame" | ||
| 2938 | version = "0.3.0" | ||
| 2939 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2940 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" | ||
| 2941 | dependencies = [ | ||
| 2942 | "bitflags 2.13.0", | ||
| 2943 | "cursor-icon", | ||
| 2944 | "wayland-backend", | ||
| 2945 | ] | ||
| 2946 | |||
| 2947 | [[package]] | ||
| 2948 | name = "wayland-cursor" | ||
| 2949 | version = "0.31.14" | ||
| 2950 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2951 | checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" | ||
| 2952 | dependencies = [ | ||
| 2953 | "rustix 1.1.4", | ||
| 2954 | "wayland-client", | ||
| 2955 | "xcursor", | ||
| 2956 | ] | ||
| 2957 | |||
| 2958 | [[package]] | ||
| 2959 | name = "wayland-protocols" | ||
| 2960 | version = "0.32.13" | ||
| 2961 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2962 | checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" | ||
| 2963 | dependencies = [ | ||
| 2964 | "bitflags 2.13.0", | ||
| 2965 | "wayland-backend", | ||
| 2966 | "wayland-client", | ||
| 2967 | "wayland-scanner", | ||
| 2968 | ] | ||
| 2969 | |||
| 2970 | [[package]] | ||
| 2971 | name = "wayland-protocols-experimental" | ||
| 2972 | version = "20250721.0.1" | ||
| 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2974 | checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" | ||
| 2975 | dependencies = [ | ||
| 2976 | "bitflags 2.13.0", | ||
| 2977 | "wayland-backend", | ||
| 2978 | "wayland-client", | ||
| 2979 | "wayland-protocols", | ||
| 2980 | "wayland-scanner", | ||
| 2981 | ] | ||
| 2982 | |||
| 2983 | [[package]] | ||
| 2984 | name = "wayland-protocols-misc" | ||
| 2985 | version = "0.3.12" | ||
| 2986 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 2987 | checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" | ||
| 2988 | dependencies = [ | ||
| 2989 | "bitflags 2.13.0", | ||
| 2990 | "wayland-backend", | ||
| 2991 | "wayland-client", | ||
| 2992 | "wayland-protocols", | ||
| 2993 | "wayland-scanner", | ||
| 2994 | ] | ||
| 2995 | |||
| 2996 | [[package]] | ||
| 2997 | name = "wayland-protocols-wlr" | ||
| 2998 | version = "0.3.12" | ||
| 2999 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3000 | checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" | ||
| 3001 | dependencies = [ | ||
| 3002 | "bitflags 2.13.0", | ||
| 3003 | "wayland-backend", | ||
| 3004 | "wayland-client", | ||
| 3005 | "wayland-protocols", | ||
| 3006 | "wayland-scanner", | ||
| 3007 | ] | ||
| 3008 | |||
| 3009 | [[package]] | ||
| 3010 | name = "wayland-scanner" | ||
| 3011 | version = "0.31.10" | ||
| 3012 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3013 | checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" | ||
| 3014 | dependencies = [ | ||
| 3015 | "proc-macro2", | ||
| 3016 | "quick-xml", | ||
| 3017 | "quote", | ||
| 3018 | ] | ||
| 3019 | |||
| 3020 | [[package]] | ||
| 3021 | name = "wayland-sys" | ||
| 3022 | version = "0.31.11" | ||
| 3023 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3024 | checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" | ||
| 3025 | dependencies = [ | ||
| 3026 | "dlib", | ||
| 3027 | "log", | ||
| 3028 | "once_cell", | ||
| 3029 | "pkg-config", | ||
| 3030 | ] | ||
| 3031 | |||
| 3032 | [[package]] | ||
| 3033 | name = "web-sys" | ||
| 3034 | version = "0.3.103" | ||
| 3035 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3036 | checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" | ||
| 3037 | dependencies = [ | ||
| 3038 | "js-sys", | ||
| 3039 | "wasm-bindgen", | ||
| 3040 | ] | ||
| 3041 | |||
| 3042 | [[package]] | ||
| 3043 | name = "web-time" | ||
| 3044 | version = "1.1.0" | ||
| 3045 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3046 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" | ||
| 3047 | dependencies = [ | ||
| 3048 | "js-sys", | ||
| 3049 | "wasm-bindgen", | ||
| 3050 | ] | ||
| 3051 | |||
| 3052 | [[package]] | ||
| 3053 | name = "webbrowser" | ||
| 3054 | version = "1.2.1" | ||
| 3055 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3056 | checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" | ||
| 3057 | dependencies = [ | ||
| 3058 | "core-foundation 0.10.1", | ||
| 3059 | "jni", | ||
| 3060 | "log", | ||
| 3061 | "ndk-context", | ||
| 3062 | "objc2 0.6.4", | ||
| 3063 | "objc2-foundation 0.3.2", | ||
| 3064 | "url", | ||
| 3065 | "web-sys", | ||
| 3066 | ] | ||
| 3067 | |||
| 3068 | [[package]] | ||
| 3069 | name = "webpki-roots" | ||
| 3070 | version = "1.0.8" | ||
| 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3072 | checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" | ||
| 3073 | dependencies = [ | ||
| 3074 | "rustls-pki-types", | ||
| 3075 | ] | ||
| 3076 | |||
| 3077 | [[package]] | ||
| 3078 | name = "weezl" | ||
| 3079 | version = "0.1.12" | ||
| 3080 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3081 | checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" | ||
| 3082 | |||
| 3083 | [[package]] | ||
| 3084 | name = "wgpu" | ||
| 3085 | version = "29.0.3" | ||
| 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3087 | checksum = "bb3feacc458f7bee8bc1737149b42b6c731aa461039a4264a67bb6681646b250" | ||
| 3088 | dependencies = [ | ||
| 3089 | "arrayvec", | ||
| 3090 | "bitflags 2.13.0", | ||
| 3091 | "bytemuck", | ||
| 3092 | "cfg-if", | ||
| 3093 | "cfg_aliases", | ||
| 3094 | "document-features", | ||
| 3095 | "hashbrown 0.16.1", | ||
| 3096 | "js-sys", | ||
| 3097 | "log", | ||
| 3098 | "portable-atomic", | ||
| 3099 | "profiling", | ||
| 3100 | "raw-window-handle", | ||
| 3101 | "smallvec", | ||
| 3102 | "static_assertions", | ||
| 3103 | "wasm-bindgen", | ||
| 3104 | "wasm-bindgen-futures", | ||
| 3105 | "web-sys", | ||
| 3106 | "wgpu-core", | ||
| 3107 | "wgpu-hal", | ||
| 3108 | "wgpu-types", | ||
| 3109 | ] | ||
| 3110 | |||
| 3111 | [[package]] | ||
| 3112 | name = "wgpu-core" | ||
| 3113 | version = "29.0.3" | ||
| 3114 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3115 | checksum = "02da3ad1b568337f25513b317870960ef87073ea0945502e44b864b67a8c77b7" | ||
| 3116 | dependencies = [ | ||
| 3117 | "arrayvec", | ||
| 3118 | "bit-set", | ||
| 3119 | "bit-vec", | ||
| 3120 | "bitflags 2.13.0", | ||
| 3121 | "bytemuck", | ||
| 3122 | "cfg_aliases", | ||
| 3123 | "document-features", | ||
| 3124 | "hashbrown 0.16.1", | ||
| 3125 | "indexmap", | ||
| 3126 | "log", | ||
| 3127 | "naga", | ||
| 3128 | "once_cell", | ||
| 3129 | "parking_lot", | ||
| 3130 | "portable-atomic", | ||
| 3131 | "profiling", | ||
| 3132 | "raw-window-handle", | ||
| 3133 | "rustc-hash 1.1.0", | ||
| 3134 | "smallvec", | ||
| 3135 | "thiserror 2.0.18", | ||
| 3136 | "wgpu-core-deps-windows-linux-android", | ||
| 3137 | "wgpu-hal", | ||
| 3138 | "wgpu-naga-bridge", | ||
| 3139 | "wgpu-types", | ||
| 3140 | ] | ||
| 3141 | |||
| 3142 | [[package]] | ||
| 3143 | name = "wgpu-core-deps-windows-linux-android" | ||
| 3144 | version = "29.0.3" | ||
| 3145 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3146 | checksum = "1bfb01076d0aa08b0ba9bd741e178b5cc440f5abe99d9581323a4c8b5d1a1916" | ||
| 3147 | dependencies = [ | ||
| 3148 | "wgpu-hal", | ||
| 3149 | ] | ||
| 3150 | |||
| 3151 | [[package]] | ||
| 3152 | name = "wgpu-hal" | ||
| 3153 | version = "29.0.3" | ||
| 3154 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3155 | checksum = "31f8e1a9e7a8512f276f7c62e018c7fa8d60954303fed2e5750114332049193f" | ||
| 3156 | dependencies = [ | ||
| 3157 | "bitflags 2.13.0", | ||
| 3158 | "cfg-if", | ||
| 3159 | "cfg_aliases", | ||
| 3160 | "libloading", | ||
| 3161 | "log", | ||
| 3162 | "naga", | ||
| 3163 | "portable-atomic", | ||
| 3164 | "portable-atomic-util", | ||
| 3165 | "raw-window-handle", | ||
| 3166 | "renderdoc-sys", | ||
| 3167 | "thiserror 2.0.18", | ||
| 3168 | "wgpu-naga-bridge", | ||
| 3169 | "wgpu-types", | ||
| 3170 | ] | ||
| 3171 | |||
| 3172 | [[package]] | ||
| 3173 | name = "wgpu-naga-bridge" | ||
| 3174 | version = "29.0.3" | ||
| 3175 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3176 | checksum = "59c654c483f058800972c3645e95388a7eca31bf9fe1933bc20e036588a0be02" | ||
| 3177 | dependencies = [ | ||
| 3178 | "naga", | ||
| 3179 | "wgpu-types", | ||
| 3180 | ] | ||
| 3181 | |||
| 3182 | [[package]] | ||
| 3183 | name = "wgpu-types" | ||
| 3184 | version = "29.0.3" | ||
| 3185 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3186 | checksum = "a9bcc31518a0e9735aefebedb5f7a9ef3ed1c42549c9f4c882fa9060ceaac639" | ||
| 3187 | dependencies = [ | ||
| 3188 | "bitflags 2.13.0", | ||
| 3189 | "bytemuck", | ||
| 3190 | "js-sys", | ||
| 3191 | "log", | ||
| 3192 | "raw-window-handle", | ||
| 3193 | "web-sys", | ||
| 3194 | ] | ||
| 3195 | |||
| 3196 | [[package]] | ||
| 3197 | name = "winapi" | ||
| 3198 | version = "0.3.9" | ||
| 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3200 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" | ||
| 3201 | dependencies = [ | ||
| 3202 | "winapi-i686-pc-windows-gnu", | ||
| 3203 | "winapi-x86_64-pc-windows-gnu", | ||
| 3204 | ] | ||
| 3205 | |||
| 3206 | [[package]] | ||
| 3207 | name = "winapi-i686-pc-windows-gnu" | ||
| 3208 | version = "0.4.0" | ||
| 3209 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3210 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | ||
| 3211 | |||
| 3212 | [[package]] | ||
| 3213 | name = "winapi-util" | ||
| 3214 | version = "0.1.11" | ||
| 3215 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3216 | checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" | ||
| 3217 | dependencies = [ | ||
| 3218 | "windows-sys 0.61.2", | ||
| 3219 | ] | ||
| 3220 | |||
| 3221 | [[package]] | ||
| 3222 | name = "winapi-x86_64-pc-windows-gnu" | ||
| 3223 | version = "0.4.0" | ||
| 3224 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3225 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | ||
| 3226 | |||
| 3227 | [[package]] | ||
| 3228 | name = "windows-link" | ||
| 3229 | version = "0.2.1" | ||
| 3230 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3231 | checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" | ||
| 3232 | |||
| 3233 | [[package]] | ||
| 3234 | name = "windows-sys" | ||
| 3235 | version = "0.52.0" | ||
| 3236 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3237 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" | ||
| 3238 | dependencies = [ | ||
| 3239 | "windows-targets", | ||
| 3240 | ] | ||
| 3241 | |||
| 3242 | [[package]] | ||
| 3243 | name = "windows-sys" | ||
| 3244 | version = "0.59.0" | ||
| 3245 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3246 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" | ||
| 3247 | dependencies = [ | ||
| 3248 | "windows-targets", | ||
| 3249 | ] | ||
| 3250 | |||
| 3251 | [[package]] | ||
| 3252 | name = "windows-sys" | ||
| 3253 | version = "0.61.2" | ||
| 3254 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3255 | checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" | ||
| 3256 | dependencies = [ | ||
| 3257 | "windows-link", | ||
| 3258 | ] | ||
| 3259 | |||
| 3260 | [[package]] | ||
| 3261 | name = "windows-targets" | ||
| 3262 | version = "0.52.6" | ||
| 3263 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3264 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" | ||
| 3265 | dependencies = [ | ||
| 3266 | "windows_aarch64_gnullvm", | ||
| 3267 | "windows_aarch64_msvc", | ||
| 3268 | "windows_i686_gnu", | ||
| 3269 | "windows_i686_gnullvm", | ||
| 3270 | "windows_i686_msvc", | ||
| 3271 | "windows_x86_64_gnu", | ||
| 3272 | "windows_x86_64_gnullvm", | ||
| 3273 | "windows_x86_64_msvc", | ||
| 3274 | ] | ||
| 3275 | |||
| 3276 | [[package]] | ||
| 3277 | name = "windows_aarch64_gnullvm" | ||
| 3278 | version = "0.52.6" | ||
| 3279 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3280 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" | ||
| 3281 | |||
| 3282 | [[package]] | ||
| 3283 | name = "windows_aarch64_msvc" | ||
| 3284 | version = "0.52.6" | ||
| 3285 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3286 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" | ||
| 3287 | |||
| 3288 | [[package]] | ||
| 3289 | name = "windows_i686_gnu" | ||
| 3290 | version = "0.52.6" | ||
| 3291 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3292 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" | ||
| 3293 | |||
| 3294 | [[package]] | ||
| 3295 | name = "windows_i686_gnullvm" | ||
| 3296 | version = "0.52.6" | ||
| 3297 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3298 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" | ||
| 3299 | |||
| 3300 | [[package]] | ||
| 3301 | name = "windows_i686_msvc" | ||
| 3302 | version = "0.52.6" | ||
| 3303 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3304 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" | ||
| 3305 | |||
| 3306 | [[package]] | ||
| 3307 | name = "windows_x86_64_gnu" | ||
| 3308 | version = "0.52.6" | ||
| 3309 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3310 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" | ||
| 3311 | |||
| 3312 | [[package]] | ||
| 3313 | name = "windows_x86_64_gnullvm" | ||
| 3314 | version = "0.52.6" | ||
| 3315 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3316 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" | ||
| 3317 | |||
| 3318 | [[package]] | ||
| 3319 | name = "windows_x86_64_msvc" | ||
| 3320 | version = "0.52.6" | ||
| 3321 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3322 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | ||
| 3323 | |||
| 3324 | [[package]] | ||
| 3325 | name = "winit" | ||
| 3326 | version = "0.30.13" | ||
| 3327 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3328 | checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" | ||
| 3329 | dependencies = [ | ||
| 3330 | "android-activity", | ||
| 3331 | "atomic-waker", | ||
| 3332 | "bitflags 2.13.0", | ||
| 3333 | "block2 0.5.1", | ||
| 3334 | "bytemuck", | ||
| 3335 | "calloop 0.13.0", | ||
| 3336 | "cfg_aliases", | ||
| 3337 | "concurrent-queue", | ||
| 3338 | "core-foundation 0.9.4", | ||
| 3339 | "core-graphics", | ||
| 3340 | "cursor-icon", | ||
| 3341 | "dpi", | ||
| 3342 | "js-sys", | ||
| 3343 | "libc", | ||
| 3344 | "ndk", | ||
| 3345 | "objc2 0.5.2", | ||
| 3346 | "objc2-app-kit 0.2.2", | ||
| 3347 | "objc2-foundation 0.2.2", | ||
| 3348 | "objc2-ui-kit 0.2.2", | ||
| 3349 | "orbclient", | ||
| 3350 | "percent-encoding", | ||
| 3351 | "pin-project", | ||
| 3352 | "raw-window-handle", | ||
| 3353 | "redox_syscall 0.4.1", | ||
| 3354 | "rustix 0.38.44", | ||
| 3355 | "smol_str", | ||
| 3356 | "tracing", | ||
| 3357 | "unicode-segmentation", | ||
| 3358 | "wasm-bindgen", | ||
| 3359 | "wasm-bindgen-futures", | ||
| 3360 | "web-sys", | ||
| 3361 | "web-time", | ||
| 3362 | "windows-sys 0.52.0", | ||
| 3363 | "x11-dl", | ||
| 3364 | "x11rb", | ||
| 3365 | "xkbcommon-dl", | ||
| 3366 | ] | ||
| 3367 | |||
| 3368 | [[package]] | ||
| 3369 | name = "winnow" | ||
| 3370 | version = "0.7.15" | ||
| 3371 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3372 | checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" | ||
| 3373 | dependencies = [ | ||
| 3374 | "memchr", | ||
| 3375 | ] | ||
| 3376 | |||
| 3377 | [[package]] | ||
| 3378 | name = "winnow" | ||
| 3379 | version = "1.0.3" | ||
| 3380 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3381 | checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" | ||
| 3382 | dependencies = [ | ||
| 3383 | "memchr", | ||
| 3384 | ] | ||
| 3385 | |||
| 3386 | [[package]] | ||
| 3387 | name = "wit-bindgen" | ||
| 3388 | version = "0.57.1" | ||
| 3389 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3390 | checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" | ||
| 3391 | |||
| 3392 | [[package]] | ||
| 3393 | name = "writeable" | ||
| 3394 | version = "0.6.3" | ||
| 3395 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3396 | checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" | ||
| 3397 | |||
| 3398 | [[package]] | ||
| 3399 | name = "x11-dl" | ||
| 3400 | version = "2.21.0" | ||
| 3401 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3402 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" | ||
| 3403 | dependencies = [ | ||
| 3404 | "libc", | ||
| 3405 | "once_cell", | ||
| 3406 | "pkg-config", | ||
| 3407 | ] | ||
| 3408 | |||
| 3409 | [[package]] | ||
| 3410 | name = "x11rb" | ||
| 3411 | version = "0.13.2" | ||
| 3412 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3413 | checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" | ||
| 3414 | dependencies = [ | ||
| 3415 | "as-raw-xcb-connection", | ||
| 3416 | "gethostname", | ||
| 3417 | "libc", | ||
| 3418 | "libloading", | ||
| 3419 | "once_cell", | ||
| 3420 | "rustix 1.1.4", | ||
| 3421 | "x11rb-protocol", | ||
| 3422 | ] | ||
| 3423 | |||
| 3424 | [[package]] | ||
| 3425 | name = "x11rb-protocol" | ||
| 3426 | version = "0.13.2" | ||
| 3427 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3428 | checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" | ||
| 3429 | |||
| 3430 | [[package]] | ||
| 3431 | name = "xcursor" | ||
| 3432 | version = "0.3.10" | ||
| 3433 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3434 | checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" | ||
| 3435 | |||
| 3436 | [[package]] | ||
| 3437 | name = "xkbcommon-dl" | ||
| 3438 | version = "0.4.2" | ||
| 3439 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3440 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" | ||
| 3441 | dependencies = [ | ||
| 3442 | "bitflags 2.13.0", | ||
| 3443 | "dlib", | ||
| 3444 | "log", | ||
| 3445 | "once_cell", | ||
| 3446 | "xkeysym", | ||
| 3447 | ] | ||
| 3448 | |||
| 3449 | [[package]] | ||
| 3450 | name = "xkeysym" | ||
| 3451 | version = "0.2.1" | ||
| 3452 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3453 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" | ||
| 3454 | |||
| 3455 | [[package]] | ||
| 3456 | name = "xml-rs" | ||
| 3457 | version = "0.8.28" | ||
| 3458 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3459 | checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" | ||
| 3460 | |||
| 3461 | [[package]] | ||
| 3462 | name = "yoke" | ||
| 3463 | version = "0.8.3" | ||
| 3464 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3465 | checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" | ||
| 3466 | dependencies = [ | ||
| 3467 | "stable_deref_trait", | ||
| 3468 | "yoke-derive", | ||
| 3469 | "zerofrom", | ||
| 3470 | ] | ||
| 3471 | |||
| 3472 | [[package]] | ||
| 3473 | name = "yoke-derive" | ||
| 3474 | version = "0.8.2" | ||
| 3475 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3476 | checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" | ||
| 3477 | dependencies = [ | ||
| 3478 | "proc-macro2", | ||
| 3479 | "quote", | ||
| 3480 | "syn", | ||
| 3481 | "synstructure", | ||
| 3482 | ] | ||
| 3483 | |||
| 3484 | [[package]] | ||
| 3485 | name = "zerocopy" | ||
| 3486 | version = "0.8.52" | ||
| 3487 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3488 | checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" | ||
| 3489 | dependencies = [ | ||
| 3490 | "zerocopy-derive", | ||
| 3491 | ] | ||
| 3492 | |||
| 3493 | [[package]] | ||
| 3494 | name = "zerocopy-derive" | ||
| 3495 | version = "0.8.52" | ||
| 3496 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3497 | checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" | ||
| 3498 | dependencies = [ | ||
| 3499 | "proc-macro2", | ||
| 3500 | "quote", | ||
| 3501 | "syn", | ||
| 3502 | ] | ||
| 3503 | |||
| 3504 | [[package]] | ||
| 3505 | name = "zerofrom" | ||
| 3506 | version = "0.1.8" | ||
| 3507 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3508 | checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" | ||
| 3509 | dependencies = [ | ||
| 3510 | "zerofrom-derive", | ||
| 3511 | ] | ||
| 3512 | |||
| 3513 | [[package]] | ||
| 3514 | name = "zerofrom-derive" | ||
| 3515 | version = "0.1.7" | ||
| 3516 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3517 | checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" | ||
| 3518 | dependencies = [ | ||
| 3519 | "proc-macro2", | ||
| 3520 | "quote", | ||
| 3521 | "syn", | ||
| 3522 | "synstructure", | ||
| 3523 | ] | ||
| 3524 | |||
| 3525 | [[package]] | ||
| 3526 | name = "zeroize" | ||
| 3527 | version = "1.9.0" | ||
| 3528 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3529 | checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" | ||
| 3530 | |||
| 3531 | [[package]] | ||
| 3532 | name = "zerotrie" | ||
| 3533 | version = "0.2.4" | ||
| 3534 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3535 | checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" | ||
| 3536 | dependencies = [ | ||
| 3537 | "displaydoc", | ||
| 3538 | "yoke", | ||
| 3539 | "zerofrom", | ||
| 3540 | ] | ||
| 3541 | |||
| 3542 | [[package]] | ||
| 3543 | name = "zerovec" | ||
| 3544 | version = "0.11.6" | ||
| 3545 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3546 | checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" | ||
| 3547 | dependencies = [ | ||
| 3548 | "yoke", | ||
| 3549 | "zerofrom", | ||
| 3550 | "zerovec-derive", | ||
| 3551 | ] | ||
| 3552 | |||
| 3553 | [[package]] | ||
| 3554 | name = "zerovec-derive" | ||
| 3555 | version = "0.11.3" | ||
| 3556 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3557 | checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" | ||
| 3558 | dependencies = [ | ||
| 3559 | "proc-macro2", | ||
| 3560 | "quote", | ||
| 3561 | "syn", | ||
| 3562 | ] | ||
| 3563 | |||
| 3564 | [[package]] | ||
| 3565 | name = "zmij" | ||
| 3566 | version = "1.0.21" | ||
| 3567 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3568 | checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" | ||
| 3569 | |||
| 3570 | [[package]] | ||
| 3571 | name = "zune-core" | ||
| 3572 | version = "0.5.1" | ||
| 3573 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3574 | checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" | ||
| 3575 | |||
| 3576 | [[package]] | ||
| 3577 | name = "zune-jpeg" | ||
| 3578 | version = "0.5.15" | ||
| 3579 | source = "registry+https://github.com/rust-lang/crates.io-index" | ||
| 3580 | checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" | ||
| 3581 | dependencies = [ | ||
| 3582 | "zune-core", | ||
| 3583 | ] | ||
diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ac616e9 --- /dev/null +++ b/Cargo.toml | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | [package] | ||
| 2 | name = "factorio-mod-downloader" | ||
| 3 | version = "0.1.0" | ||
| 4 | edition = "2021" | ||
| 5 | |||
| 6 | [features] | ||
| 7 | default = ["gui"] | ||
| 8 | gui = ["eframe", "egui", "rfd"] | ||
| 9 | |||
| 10 | [dependencies] | ||
| 11 | ureq = { version = "3", default-features = false, features = ["rustls", "gzip"] } | ||
| 12 | serde = { version = "1", features = ["derive"] } | ||
| 13 | serde_json = "1" | ||
| 14 | regex = { version = "1", default-features = false, features = ["std"] } | ||
| 15 | anyhow = "1" | ||
| 16 | eframe = { version = "0.35", default-features = false, features = ["glow", "x11", "default_fonts"], optional = true} | ||
| 17 | egui = { version = "0.35", optional = true } | ||
| 18 | rfd = { version = "0.15", default-features = false, features = ["pollster", "gtk3"], optional = true } | ||
| 19 | |||
| 20 | [profile.release] | ||
| 21 | opt-level = "s" | ||
| 22 | lto = true | ||
| 23 | strip = true | ||
| 24 | codegen-units = 1 | ||
| 25 | panic = "abort" | ||
diff --git a/src/downloader.rs b/src/downloader.rs new file mode 100644 index 0000000..6d92166 --- /dev/null +++ b/src/downloader.rs | |||
| @@ -0,0 +1,589 @@ | |||
| 1 | use std::collections::HashSet; | ||
| 2 | use std::fs; | ||
| 3 | use std::io::{Read, Write}; | ||
| 4 | use std::path::Path; | ||
| 5 | |||
| 6 | use anyhow::{bail, Context, Result}; | ||
| 7 | use regex::Regex; | ||
| 8 | use serde::Deserialize; | ||
| 9 | |||
| 10 | // --------------------------------------------------------------------------- | ||
| 11 | // Public event type for GUI progress reporting | ||
| 12 | // --------------------------------------------------------------------------- | ||
| 13 | |||
| 14 | #[cfg(feature = "gui")] | ||
| 15 | use std::sync::mpsc; | ||
| 16 | |||
| 17 | #[cfg(feature = "gui")] | ||
| 18 | #[derive(Debug, Clone)] | ||
| 19 | pub enum Event { | ||
| 20 | Log(String), | ||
| 21 | DownloadStart { name: String, total_bytes: u64 }, | ||
| 22 | DownloadProgress { name: String, bytes: u64 }, | ||
| 23 | DownloadComplete { name: String }, | ||
| 24 | DownloadError { name: String, error: String }, | ||
| 25 | Finished { success: bool, message: String }, | ||
| 26 | } | ||
| 27 | |||
| 28 | // --------------------------------------------------------------------------- | ||
| 29 | // API response types | ||
| 30 | // --------------------------------------------------------------------------- | ||
| 31 | |||
| 32 | #[derive(Deserialize)] | ||
| 33 | pub struct ModInfo { | ||
| 34 | pub releases: Vec<Release>, | ||
| 35 | } | ||
| 36 | |||
| 37 | #[derive(Deserialize, Clone)] | ||
| 38 | pub struct Release { | ||
| 39 | pub version: String, | ||
| 40 | pub info_json: Option<InfoJson>, | ||
| 41 | } | ||
| 42 | |||
| 43 | #[derive(Deserialize, Clone)] | ||
| 44 | pub struct InfoJson { | ||
| 45 | #[serde(default)] | ||
| 46 | pub dependencies: Vec<String>, | ||
| 47 | } | ||
| 48 | |||
| 49 | // --------------------------------------------------------------------------- | ||
| 50 | // Dependency model | ||
| 51 | // --------------------------------------------------------------------------- | ||
| 52 | |||
| 53 | #[derive(Debug, Clone, PartialEq)] | ||
| 54 | pub enum DepType { | ||
| 55 | Base, | ||
| 56 | Required, | ||
| 57 | Optional, | ||
| 58 | Incompatible, | ||
| 59 | } | ||
| 60 | |||
| 61 | #[derive(Debug, Clone)] | ||
| 62 | pub struct Dependency { | ||
| 63 | pub dep_type: DepType, | ||
| 64 | pub name: String, | ||
| 65 | } | ||
| 66 | |||
| 67 | // --------------------------------------------------------------------------- | ||
| 68 | // Constants | ||
| 69 | // --------------------------------------------------------------------------- | ||
| 70 | |||
| 71 | pub const MODINFO_API: &str = "https://re146.dev/factorio/mods/modinfo"; | ||
| 72 | pub const DOWNLOAD_BASE: &str = "https://mods-storage.re146.dev"; | ||
| 73 | |||
| 74 | fn dep_regex() -> &'static Regex { | ||
| 75 | static RE: std::sync::LazyLock<Regex> = std::sync::LazyLock::new(|| { | ||
| 76 | Regex::new( | ||
| 77 | r"(?i)^((?:)|(?:\?)|(?:\(\?\))|(?:!)|(?:~))(?:\s?)([%\w\s-]+)(?:\s{0,})(?:((?:=>)|(?:==)|(?:=)|(?:<=)|(?:>=)|(?:<)|(?:>)|(?:))(?:\s{0,})((\d+\.\d+\.\d+)|(\d+\.\d+)))?$", | ||
| 78 | ) | ||
| 79 | .unwrap() | ||
| 80 | }); | ||
| 81 | &RE | ||
| 82 | } | ||
| 83 | |||
| 84 | // --------------------------------------------------------------------------- | ||
| 85 | // Mod name extraction | ||
| 86 | // --------------------------------------------------------------------------- | ||
| 87 | |||
| 88 | pub fn extract_mod_name(url_or_name: &str) -> Result<String> { | ||
| 89 | let re = Regex::new(r"(?i)^https?://mods\.factorio\.com/mod/([^\s/#?]{1,})").unwrap(); | ||
| 90 | if let Some(caps) = re.captures(url_or_name) { | ||
| 91 | return Ok(caps[1].to_string()); | ||
| 92 | } | ||
| 93 | |||
| 94 | let re2 = | ||
| 95 | Regex::new(r"(?i)^https?://mods\.factorio\.com/mods/([^\s/]{1,})/([^\s/#?]{1,})").unwrap(); | ||
| 96 | if let Some(caps) = re2.captures(url_or_name) { | ||
| 97 | return Ok(caps[2].to_string()); | ||
| 98 | } | ||
| 99 | |||
| 100 | if !url_or_name.contains('/') && !url_or_name.starts_with("http") { | ||
| 101 | return Ok(url_or_name.to_string()); | ||
| 102 | } | ||
| 103 | |||
| 104 | bail!("Could not extract mod name from: {url_or_name}") | ||
| 105 | } | ||
| 106 | |||
| 107 | // --------------------------------------------------------------------------- | ||
| 108 | // API helpers | ||
| 109 | // --------------------------------------------------------------------------- | ||
| 110 | |||
| 111 | pub fn fetch_modinfo(mod_name: &str) -> Result<ModInfo> { | ||
| 112 | let url = format!("{MODINFO_API}?id={mod_name}"); | ||
| 113 | let resp = ureq::get(&url) | ||
| 114 | .header("Accept", "application/json") | ||
| 115 | .call() | ||
| 116 | .with_context(|| format!("Failed to fetch mod info for {mod_name}"))?; | ||
| 117 | |||
| 118 | if resp.status().as_u16() == 404 { | ||
| 119 | bail!("Mod '{mod_name}' not found on the portal"); | ||
| 120 | } | ||
| 121 | |||
| 122 | let body_text = resp | ||
| 123 | .into_body() | ||
| 124 | .read_to_string() | ||
| 125 | .with_context(|| format!("Failed to read response body for {mod_name}"))?; | ||
| 126 | |||
| 127 | let modinfo: ModInfo = serde_json::from_str(&body_text) | ||
| 128 | .with_context(|| format!("Failed to parse mod info JSON for {mod_name}"))?; | ||
| 129 | |||
| 130 | if modinfo.releases.is_empty() { | ||
| 131 | bail!("No releases found for '{mod_name}'"); | ||
| 132 | } | ||
| 133 | |||
| 134 | Ok(modinfo) | ||
| 135 | } | ||
| 136 | |||
| 137 | /// Fetch available versions for a mod. Returns (version, display_label) pairs. | ||
| 138 | #[cfg(feature = "gui")] | ||
| 139 | pub fn fetch_versions(mod_name: &str) -> Result<Vec<(String, String)>> { | ||
| 140 | let modinfo = fetch_modinfo(mod_name)?; | ||
| 141 | let total = modinfo.releases.len(); | ||
| 142 | |||
| 143 | let mut versions: Vec<(String, String)> = modinfo | ||
| 144 | .releases | ||
| 145 | .iter() | ||
| 146 | .enumerate() | ||
| 147 | .filter_map(|(i, r)| { | ||
| 148 | let v = r.version.clone(); | ||
| 149 | if v.is_empty() { | ||
| 150 | return None; | ||
| 151 | } | ||
| 152 | let is_latest = i == total - 1; | ||
| 153 | let factorio_ver = r | ||
| 154 | .info_json | ||
| 155 | .as_ref() | ||
| 156 | .and_then(|j| j.dependencies.first()) | ||
| 157 | .and_then(|d| { | ||
| 158 | parse_dependency_string(d).and_then(|dep| { | ||
| 159 | if dep.dep_type == DepType::Base && !dep.name.is_empty() { | ||
| 160 | Some(dep.name) | ||
| 161 | } else { | ||
| 162 | None | ||
| 163 | } | ||
| 164 | }) | ||
| 165 | }) | ||
| 166 | .unwrap_or_default(); | ||
| 167 | |||
| 168 | let mut label = v.clone(); | ||
| 169 | if is_latest { | ||
| 170 | label.push_str(" (latest)"); | ||
| 171 | } | ||
| 172 | if !factorio_ver.is_empty() { | ||
| 173 | label.push_str(&format!(" for {}", factorio_ver)); | ||
| 174 | } | ||
| 175 | Some((v, label)) | ||
| 176 | }) | ||
| 177 | .collect(); | ||
| 178 | |||
| 179 | versions.reverse(); | ||
| 180 | Ok(versions) | ||
| 181 | } | ||
| 182 | |||
| 183 | pub fn find_release<'a>(modinfo: &'a ModInfo, target_version: Option<&str>) -> Option<&'a Release> { | ||
| 184 | match target_version { | ||
| 185 | Some(v) => modinfo.releases.iter().find(|r| r.version == v), | ||
| 186 | None => modinfo.releases.last(), | ||
| 187 | } | ||
| 188 | } | ||
| 189 | |||
| 190 | // --------------------------------------------------------------------------- | ||
| 191 | // Dependency parsing | ||
| 192 | // --------------------------------------------------------------------------- | ||
| 193 | |||
| 194 | pub fn parse_dependency_string(input: &str) -> Option<Dependency> { | ||
| 195 | let re = dep_regex(); | ||
| 196 | let caps = re.captures(input)?; | ||
| 197 | |||
| 198 | let name = caps[2].trim().to_string(); | ||
| 199 | |||
| 200 | if name.eq_ignore_ascii_case("base") { | ||
| 201 | return Some(Dependency { | ||
| 202 | dep_type: DepType::Base, | ||
| 203 | name: "base".into(), | ||
| 204 | }); | ||
| 205 | } | ||
| 206 | |||
| 207 | let dep_type = match &caps[1] { | ||
| 208 | "?" | "(?)" => DepType::Optional, | ||
| 209 | "!" => DepType::Incompatible, | ||
| 210 | _ => DepType::Required, | ||
| 211 | }; | ||
| 212 | |||
| 213 | Some(Dependency { | ||
| 214 | dep_type, | ||
| 215 | name: name.trim().to_string(), | ||
| 216 | }) | ||
| 217 | } | ||
| 218 | |||
| 219 | pub fn parse_dependencies(deps: &[String]) -> (Vec<Dependency>, Vec<Dependency>, Vec<Dependency>) { | ||
| 220 | let mut required = Vec::new(); | ||
| 221 | let mut optional = Vec::new(); | ||
| 222 | let mut incompatible = Vec::new(); | ||
| 223 | |||
| 224 | for dep_str in deps.iter().rev() { | ||
| 225 | if let Some(dep) = parse_dependency_string(dep_str) { | ||
| 226 | match dep.dep_type { | ||
| 227 | DepType::Base => {} | ||
| 228 | DepType::Required => required.push(dep), | ||
| 229 | DepType::Optional => optional.push(dep), | ||
| 230 | DepType::Incompatible => incompatible.push(dep), | ||
| 231 | } | ||
| 232 | } | ||
| 233 | } | ||
| 234 | |||
| 235 | (required, optional, incompatible) | ||
| 236 | } | ||
| 237 | |||
| 238 | // --------------------------------------------------------------------------- | ||
| 239 | // GUI download (channel-based) | ||
| 240 | // --------------------------------------------------------------------------- | ||
| 241 | |||
| 242 | #[cfg(feature = "gui")] | ||
| 243 | fn gui_download_file( | ||
| 244 | url: &str, | ||
| 245 | file_path: &Path, | ||
| 246 | display_name: &str, | ||
| 247 | tx: &mpsc::Sender<Event>, | ||
| 248 | ) -> Result<()> { | ||
| 249 | let resp = ureq::get(url) | ||
| 250 | .call() | ||
| 251 | .with_context(|| format!("Failed to download {display_name}"))?; | ||
| 252 | |||
| 253 | let status = resp.status().as_u16(); | ||
| 254 | if status == 404 { | ||
| 255 | bail!("File not found on storage: {display_name}"); | ||
| 256 | } | ||
| 257 | if !(200..300).contains(&status) { | ||
| 258 | bail!("HTTP {status} while downloading {display_name}"); | ||
| 259 | } | ||
| 260 | |||
| 261 | let total_size: u64 = resp | ||
| 262 | .headers() | ||
| 263 | .get("content-length") | ||
| 264 | .and_then(|v| v.to_str().ok()) | ||
| 265 | .and_then(|v| v.parse().ok()) | ||
| 266 | .unwrap_or(0); | ||
| 267 | |||
| 268 | let _ = tx.send(Event::DownloadStart { | ||
| 269 | name: display_name.to_string(), | ||
| 270 | total_bytes: total_size, | ||
| 271 | }); | ||
| 272 | |||
| 273 | let mut reader = resp.into_body().into_reader(); | ||
| 274 | let mut file = fs::File::create(file_path) | ||
| 275 | .with_context(|| format!("Failed to create file {}", file_path.display()))?; | ||
| 276 | |||
| 277 | let mut buf = [0u8; 256 * 1024]; | ||
| 278 | let mut downloaded: u64 = 0; | ||
| 279 | loop { | ||
| 280 | let n = reader | ||
| 281 | .read(&mut buf) | ||
| 282 | .with_context(|| format!("Read error while downloading {display_name}"))?; | ||
| 283 | if n == 0 { | ||
| 284 | break; | ||
| 285 | } | ||
| 286 | file.write_all(&buf[..n]) | ||
| 287 | .with_context(|| format!("Write error for {}", file_path.display()))?; | ||
| 288 | downloaded += n as u64; | ||
| 289 | let _ = tx.send(Event::DownloadProgress { | ||
| 290 | name: display_name.to_string(), | ||
| 291 | bytes: downloaded, | ||
| 292 | }); | ||
| 293 | } | ||
| 294 | |||
| 295 | let _ = tx.send(Event::DownloadComplete { | ||
| 296 | name: display_name.to_string(), | ||
| 297 | }); | ||
| 298 | Ok(()) | ||
| 299 | } | ||
| 300 | |||
| 301 | #[cfg(feature = "gui")] | ||
| 302 | fn gui_download_mod_with_deps( | ||
| 303 | mod_name: &str, | ||
| 304 | output: &Path, | ||
| 305 | target_version: Option<&str>, | ||
| 306 | include_optional: bool, | ||
| 307 | downloaded: &mut HashSet<String>, | ||
| 308 | analyzed: &mut HashSet<String>, | ||
| 309 | tx: &mpsc::Sender<Event>, | ||
| 310 | ) -> Result<()> { | ||
| 311 | if analyzed.contains(mod_name) { | ||
| 312 | return Ok(()); | ||
| 313 | } | ||
| 314 | |||
| 315 | if mod_name == "space-age" { | ||
| 316 | let _ = tx.send(Event::Log(format!( | ||
| 317 | "Skipping reserved dependency '{mod_name}'" | ||
| 318 | ))); | ||
| 319 | return Ok(()); | ||
| 320 | } | ||
| 321 | |||
| 322 | let modinfo = fetch_modinfo(mod_name)?; | ||
| 323 | |||
| 324 | let release = find_release(&modinfo, target_version) | ||
| 325 | .with_context(|| format!("Version not found for '{mod_name}'"))?; | ||
| 326 | |||
| 327 | let version = &release.version; | ||
| 328 | let _ = tx.send(Event::Log(format!("Processing: {mod_name} v{version}"))); | ||
| 329 | analyzed.insert(mod_name.to_string()); | ||
| 330 | |||
| 331 | let file_name = format!("{mod_name}_{version}.zip"); | ||
| 332 | let file_path = output.join(&file_name); | ||
| 333 | |||
| 334 | if !file_path.exists() { | ||
| 335 | fs::create_dir_all(output)?; | ||
| 336 | let download_url = format!("{DOWNLOAD_BASE}/{mod_name}/{version}.zip"); | ||
| 337 | |||
| 338 | if let Err(e) = gui_download_file(&download_url, &file_path, &file_name, tx) { | ||
| 339 | let _ = tx.send(Event::DownloadError { | ||
| 340 | name: file_name.clone(), | ||
| 341 | error: e.to_string(), | ||
| 342 | }); | ||
| 343 | return Err(e); | ||
| 344 | } | ||
| 345 | downloaded.insert(mod_name.to_string()); | ||
| 346 | } else { | ||
| 347 | let _ = tx.send(Event::Log(format!("Already downloaded: {file_name}"))); | ||
| 348 | } | ||
| 349 | |||
| 350 | if let Some(info_json) = &release.info_json { | ||
| 351 | let (required, optional, _incompatible) = parse_dependencies(&info_json.dependencies); | ||
| 352 | |||
| 353 | let mut deps = required; | ||
| 354 | if include_optional { | ||
| 355 | deps.extend(optional); | ||
| 356 | } | ||
| 357 | |||
| 358 | for dep in &deps { | ||
| 359 | if dep.name == "base" || downloaded.contains(&dep.name) || analyzed.contains(&dep.name) | ||
| 360 | { | ||
| 361 | continue; | ||
| 362 | } | ||
| 363 | let _ = tx.send(Event::Log(format!("-> Fetching dependency: {}", dep.name))); | ||
| 364 | if let Err(e) = gui_download_mod_with_deps( | ||
| 365 | &dep.name, | ||
| 366 | output, | ||
| 367 | None, | ||
| 368 | include_optional, | ||
| 369 | downloaded, | ||
| 370 | analyzed, | ||
| 371 | tx, | ||
| 372 | ) { | ||
| 373 | let _ = tx.send(Event::Log(format!( | ||
| 374 | "Error processing dependency {}: {}", | ||
| 375 | dep.name, e | ||
| 376 | ))); | ||
| 377 | } | ||
| 378 | } | ||
| 379 | } | ||
| 380 | |||
| 381 | Ok(()) | ||
| 382 | } | ||
| 383 | |||
| 384 | /// Entry point for GUI downloads. Runs the full pipeline and sends events via the channel. | ||
| 385 | #[cfg(feature = "gui")] | ||
| 386 | pub fn run_gui_download( | ||
| 387 | mod_url: &str, | ||
| 388 | output: &Path, | ||
| 389 | target_version: Option<String>, | ||
| 390 | include_optional: bool, | ||
| 391 | tx: mpsc::Sender<Event>, | ||
| 392 | ) { | ||
| 393 | let result = (|| -> Result<()> { | ||
| 394 | let mod_name = extract_mod_name(mod_url)?; | ||
| 395 | let _ = tx.send(Event::Log(format!("Starting download: {mod_name}"))); | ||
| 396 | |||
| 397 | let mut downloaded = HashSet::new(); | ||
| 398 | let mut analyzed = HashSet::new(); | ||
| 399 | |||
| 400 | gui_download_mod_with_deps( | ||
| 401 | &mod_name, | ||
| 402 | output, | ||
| 403 | target_version.as_deref(), | ||
| 404 | include_optional, | ||
| 405 | &mut downloaded, | ||
| 406 | &mut analyzed, | ||
| 407 | &tx, | ||
| 408 | )?; | ||
| 409 | |||
| 410 | Ok(()) | ||
| 411 | })(); | ||
| 412 | |||
| 413 | match result { | ||
| 414 | Ok(()) => { | ||
| 415 | let _ = tx.send(Event::Finished { | ||
| 416 | success: true, | ||
| 417 | message: "All mods downloaded successfully.".into(), | ||
| 418 | }); | ||
| 419 | } | ||
| 420 | Err(e) => { | ||
| 421 | let _ = tx.send(Event::Finished { | ||
| 422 | success: false, | ||
| 423 | message: format!("Download failed: {e}"), | ||
| 424 | }); | ||
| 425 | } | ||
| 426 | } | ||
| 427 | } | ||
| 428 | |||
| 429 | // --------------------------------------------------------------------------- | ||
| 430 | // CLI download (prints progress to stdout) | ||
| 431 | // --------------------------------------------------------------------------- | ||
| 432 | |||
| 433 | #[cfg(not(feature = "gui"))] | ||
| 434 | fn cli_download_file(url: &str, file_path: &Path, display_name: &str) -> Result<()> { | ||
| 435 | let resp = ureq::get(url) | ||
| 436 | .call() | ||
| 437 | .with_context(|| format!("Failed to download {display_name}"))?; | ||
| 438 | |||
| 439 | let status = resp.status().as_u16(); | ||
| 440 | if status == 404 { | ||
| 441 | bail!("File not found on storage: {display_name}"); | ||
| 442 | } | ||
| 443 | if !(200..300).contains(&status) { | ||
| 444 | bail!("HTTP {status} while downloading {display_name}"); | ||
| 445 | } | ||
| 446 | |||
| 447 | let total_size: u64 = resp | ||
| 448 | .headers() | ||
| 449 | .get("content-length") | ||
| 450 | .and_then(|v| v.to_str().ok()) | ||
| 451 | .and_then(|v| v.parse().ok()) | ||
| 452 | .unwrap_or(0); | ||
| 453 | |||
| 454 | println!( | ||
| 455 | " Downloading: {display_name} ({:.1} MB)", | ||
| 456 | total_size as f64 / 1_048_576.0 | ||
| 457 | ); | ||
| 458 | |||
| 459 | let mut reader = resp.into_body().into_reader(); | ||
| 460 | let mut file = fs::File::create(file_path) | ||
| 461 | .with_context(|| format!("Failed to create file {}", file_path.display()))?; | ||
| 462 | |||
| 463 | let mut buf = [0u8; 256 * 1024]; | ||
| 464 | let mut downloaded: u64 = 0; | ||
| 465 | let mut last_pct: u32 = 0; | ||
| 466 | loop { | ||
| 467 | let n = reader | ||
| 468 | .read(&mut buf) | ||
| 469 | .with_context(|| format!("Read error while downloading {display_name}"))?; | ||
| 470 | if n == 0 { | ||
| 471 | break; | ||
| 472 | } | ||
| 473 | file.write_all(&buf[..n]) | ||
| 474 | .with_context(|| format!("Write error for {}", file_path.display()))?; | ||
| 475 | downloaded += n as u64; | ||
| 476 | |||
| 477 | if total_size > 0 { | ||
| 478 | let pct = (downloaded * 100 / total_size) as u32; | ||
| 479 | if pct / 10 != last_pct / 10 { | ||
| 480 | last_pct = pct; | ||
| 481 | print!("\r {} {}%", display_name, pct); | ||
| 482 | let _ = std::io::Write::flush(&mut std::io::stdout()); | ||
| 483 | } | ||
| 484 | } | ||
| 485 | } | ||
| 486 | println!("\r {} Done.", display_name); | ||
| 487 | Ok(()) | ||
| 488 | } | ||
| 489 | |||
| 490 | #[cfg(not(feature = "gui"))] | ||
| 491 | fn cli_download_mod_with_deps( | ||
| 492 | mod_name: &str, | ||
| 493 | output: &Path, | ||
| 494 | target_version: Option<&str>, | ||
| 495 | include_optional: bool, | ||
| 496 | downloaded: &mut HashSet<String>, | ||
| 497 | analyzed: &mut HashSet<String>, | ||
| 498 | ) -> Result<()> { | ||
| 499 | if analyzed.contains(mod_name) { | ||
| 500 | return Ok(()); | ||
| 501 | } | ||
| 502 | |||
| 503 | if mod_name == "space-age" { | ||
| 504 | println!("Skipping reserved dependency '{mod_name}'"); | ||
| 505 | return Ok(()); | ||
| 506 | } | ||
| 507 | |||
| 508 | let modinfo = fetch_modinfo(mod_name)?; | ||
| 509 | |||
| 510 | let release = find_release(&modinfo, target_version) | ||
| 511 | .with_context(|| format!("Version not found for '{mod_name}'"))?; | ||
| 512 | |||
| 513 | let version = &release.version; | ||
| 514 | println!("Processing: {mod_name} v{version}"); | ||
| 515 | analyzed.insert(mod_name.to_string()); | ||
| 516 | |||
| 517 | let file_name = format!("{mod_name}_{version}.zip"); | ||
| 518 | let file_path = output.join(&file_name); | ||
| 519 | |||
| 520 | if !file_path.exists() { | ||
| 521 | fs::create_dir_all(output)?; | ||
| 522 | let download_url = format!("{DOWNLOAD_BASE}/{mod_name}/{version}.zip"); | ||
| 523 | |||
| 524 | if let Err(e) = cli_download_file(&download_url, &file_path, &file_name) { | ||
| 525 | eprintln!("Error downloading {file_name}: {e}"); | ||
| 526 | return Err(e); | ||
| 527 | } | ||
| 528 | downloaded.insert(mod_name.to_string()); | ||
| 529 | } else { | ||
| 530 | println!("Already downloaded: {file_name}"); | ||
| 531 | } | ||
| 532 | |||
| 533 | if let Some(info_json) = &release.info_json { | ||
| 534 | let (required, optional, _incompatible) = parse_dependencies(&info_json.dependencies); | ||
| 535 | |||
| 536 | let mut deps = required; | ||
| 537 | if include_optional { | ||
| 538 | deps.extend(optional); | ||
| 539 | } | ||
| 540 | |||
| 541 | for dep in &deps { | ||
| 542 | if dep.name == "base" || downloaded.contains(&dep.name) || analyzed.contains(&dep.name) | ||
| 543 | { | ||
| 544 | continue; | ||
| 545 | } | ||
| 546 | println!("-> Fetching dependency: {}", dep.name); | ||
| 547 | if let Err(e) = cli_download_mod_with_deps( | ||
| 548 | &dep.name, | ||
| 549 | output, | ||
| 550 | None, | ||
| 551 | include_optional, | ||
| 552 | downloaded, | ||
| 553 | analyzed, | ||
| 554 | ) { | ||
| 555 | eprintln!("Error processing dependency {}: {}", dep.name, e); | ||
| 556 | } | ||
| 557 | } | ||
| 558 | } | ||
| 559 | |||
| 560 | Ok(()) | ||
| 561 | } | ||
| 562 | |||
| 563 | /// Entry point for CLI downloads. Prints progress to stdout. | ||
| 564 | #[cfg(not(feature = "gui"))] | ||
| 565 | pub fn run_cli_download( | ||
| 566 | mod_url: &str, | ||
| 567 | output: &Path, | ||
| 568 | target_version: Option<&str>, | ||
| 569 | include_optional: bool, | ||
| 570 | ) -> Result<()> { | ||
| 571 | let mod_name = extract_mod_name(mod_url)?; | ||
| 572 | println!("Starting download: {mod_name}"); | ||
| 573 | println!("Output directory: {}", output.display()); | ||
| 574 | |||
| 575 | let mut downloaded = HashSet::new(); | ||
| 576 | let mut analyzed = HashSet::new(); | ||
| 577 | |||
| 578 | cli_download_mod_with_deps( | ||
| 579 | &mod_name, | ||
| 580 | output, | ||
| 581 | target_version, | ||
| 582 | include_optional, | ||
| 583 | &mut downloaded, | ||
| 584 | &mut analyzed, | ||
| 585 | )?; | ||
| 586 | |||
| 587 | println!("\nAll mods downloaded successfully."); | ||
| 588 | Ok(()) | ||
| 589 | } | ||
diff --git a/src/gui.rs b/src/gui.rs new file mode 100644 index 0000000..5fe1092 --- /dev/null +++ b/src/gui.rs | |||
| @@ -0,0 +1,369 @@ | |||
| 1 | use std::path::PathBuf; | ||
| 2 | use std::sync::mpsc; | ||
| 3 | use std::sync::mpsc::TryRecvError; | ||
| 4 | use std::sync::{Arc, Mutex}; | ||
| 5 | use std::thread; | ||
| 6 | |||
| 7 | use egui::{Color32, ProgressBar, ScrollArea, TextEdit}; | ||
| 8 | use rfd::FileDialog; | ||
| 9 | |||
| 10 | use crate::downloader::{self, Event}; | ||
| 11 | |||
| 12 | pub struct App { | ||
| 13 | mod_url: String, | ||
| 14 | output_path: String, | ||
| 15 | target_version: String, | ||
| 16 | include_optional: bool, | ||
| 17 | |||
| 18 | versions: Vec<(String, String)>, | ||
| 19 | loading_versions: bool, | ||
| 20 | version_handle: Option<Arc<Mutex<Option<Vec<(String, String)>>>>>, | ||
| 21 | |||
| 22 | downloading: bool, | ||
| 23 | finished: bool, | ||
| 24 | |||
| 25 | downloads: Vec<DownloadState>, | ||
| 26 | log_entries: Vec<LogEntry>, | ||
| 27 | |||
| 28 | receiver: Option<mpsc::Receiver<Event>>, | ||
| 29 | } | ||
| 30 | |||
| 31 | struct DownloadState { | ||
| 32 | name: String, | ||
| 33 | total_bytes: u64, | ||
| 34 | downloaded_bytes: u64, | ||
| 35 | complete: bool, | ||
| 36 | error: Option<String>, | ||
| 37 | } | ||
| 38 | |||
| 39 | struct LogEntry { | ||
| 40 | text: String, | ||
| 41 | is_error: bool, | ||
| 42 | } | ||
| 43 | |||
| 44 | impl App { | ||
| 45 | pub fn new() -> Self { | ||
| 46 | Self { | ||
| 47 | mod_url: String::new(), | ||
| 48 | output_path: std::env::current_dir() | ||
| 49 | .map(|p| p.display().to_string()) | ||
| 50 | .unwrap_or_default(), | ||
| 51 | target_version: String::new(), | ||
| 52 | include_optional: false, | ||
| 53 | versions: Vec::new(), | ||
| 54 | loading_versions: false, | ||
| 55 | version_handle: None, | ||
| 56 | downloading: false, | ||
| 57 | finished: false, | ||
| 58 | downloads: Vec::new(), | ||
| 59 | log_entries: Vec::new(), | ||
| 60 | receiver: None, | ||
| 61 | } | ||
| 62 | } | ||
| 63 | |||
| 64 | fn log(&mut self, text: String, is_error: bool) { | ||
| 65 | self.log_entries.push(LogEntry { text, is_error }); | ||
| 66 | if self.log_entries.len() > 500 { | ||
| 67 | self.log_entries.remove(0); | ||
| 68 | } | ||
| 69 | } | ||
| 70 | |||
| 71 | fn find_or_create_download(&mut self, name: &str) -> &mut DownloadState { | ||
| 72 | if let Some(pos) = self.downloads.iter().position(|d| d.name == name) { | ||
| 73 | &mut self.downloads[pos] | ||
| 74 | } else { | ||
| 75 | self.downloads.push(DownloadState { | ||
| 76 | name: name.to_string(), | ||
| 77 | total_bytes: 0, | ||
| 78 | downloaded_bytes: 0, | ||
| 79 | complete: false, | ||
| 80 | error: None, | ||
| 81 | }); | ||
| 82 | self.downloads.last_mut().unwrap() | ||
| 83 | } | ||
| 84 | } | ||
| 85 | |||
| 86 | fn poll_events(&mut self) { | ||
| 87 | let mut events = Vec::new(); | ||
| 88 | if let Some(ref rx) = self.receiver { | ||
| 89 | loop { | ||
| 90 | match rx.try_recv() { | ||
| 91 | Ok(event) => events.push(event), | ||
| 92 | Err(TryRecvError::Empty) => break, | ||
| 93 | Err(TryRecvError::Disconnected) => { | ||
| 94 | self.downloading = false; | ||
| 95 | self.receiver = None; | ||
| 96 | break; | ||
| 97 | } | ||
| 98 | } | ||
| 99 | } | ||
| 100 | } | ||
| 101 | for event in events { | ||
| 102 | self.handle_event(event); | ||
| 103 | } | ||
| 104 | } | ||
| 105 | |||
| 106 | fn handle_event(&mut self, event: Event) { | ||
| 107 | match event { | ||
| 108 | Event::Log(text) => self.log(text, false), | ||
| 109 | Event::DownloadStart { name, total_bytes } => { | ||
| 110 | self.log(format!("Downloading: {name}"), false); | ||
| 111 | let dl = self.find_or_create_download(&name); | ||
| 112 | dl.total_bytes = total_bytes; | ||
| 113 | dl.downloaded_bytes = 0; | ||
| 114 | dl.complete = false; | ||
| 115 | dl.error = None; | ||
| 116 | } | ||
| 117 | Event::DownloadProgress { name, bytes } => { | ||
| 118 | let dl = self.find_or_create_download(&name); | ||
| 119 | dl.downloaded_bytes = bytes; | ||
| 120 | } | ||
| 121 | Event::DownloadComplete { name } => { | ||
| 122 | let dl = self.find_or_create_download(&name); | ||
| 123 | dl.complete = true; | ||
| 124 | dl.downloaded_bytes = dl.total_bytes; | ||
| 125 | self.log(format!("Downloaded: {name}"), false); | ||
| 126 | } | ||
| 127 | Event::DownloadError { name, error } => { | ||
| 128 | let dl = self.find_or_create_download(&name); | ||
| 129 | dl.error = Some(error.clone()); | ||
| 130 | self.log(format!("Error: {name} - {error}"), true); | ||
| 131 | } | ||
| 132 | Event::Finished { success, message } => { | ||
| 133 | self.log(message.clone(), !success); | ||
| 134 | self.downloading = false; | ||
| 135 | self.finished = true; | ||
| 136 | self.receiver = None; | ||
| 137 | } | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 141 | fn start_download(&mut self) { | ||
| 142 | let mod_url = self.mod_url.trim().to_string(); | ||
| 143 | if mod_url.is_empty() { | ||
| 144 | return; | ||
| 145 | } | ||
| 146 | |||
| 147 | let output = PathBuf::from(&self.output_path); | ||
| 148 | let target_version = if self.target_version.trim().is_empty() { | ||
| 149 | None | ||
| 150 | } else { | ||
| 151 | Some(self.target_version.trim().to_string()) | ||
| 152 | }; | ||
| 153 | let include_optional = self.include_optional; | ||
| 154 | |||
| 155 | let (tx, rx) = mpsc::channel(); | ||
| 156 | self.receiver = Some(rx); | ||
| 157 | self.downloading = true; | ||
| 158 | self.finished = false; | ||
| 159 | self.downloads.clear(); | ||
| 160 | self.log_entries.clear(); | ||
| 161 | |||
| 162 | self.log("Starting download...".into(), false); | ||
| 163 | |||
| 164 | thread::spawn(move || { | ||
| 165 | downloader::run_gui_download(&mod_url, &output, target_version, include_optional, tx); | ||
| 166 | }); | ||
| 167 | } | ||
| 168 | |||
| 169 | fn load_versions(&mut self) { | ||
| 170 | let mod_url = self.mod_url.trim().to_string(); | ||
| 171 | if mod_url.is_empty() { | ||
| 172 | return; | ||
| 173 | } | ||
| 174 | |||
| 175 | self.loading_versions = true; | ||
| 176 | let result: Arc<Mutex<Option<Vec<(String, String)>>>> = Arc::new(Mutex::new(None)); | ||
| 177 | self.version_handle = Some(result.clone()); | ||
| 178 | |||
| 179 | thread::spawn(move || { | ||
| 180 | let name = downloader::extract_mod_name(&mod_url); | ||
| 181 | let versions = match name { | ||
| 182 | Ok(name) => downloader::fetch_versions(&name).ok().unwrap_or_default(), | ||
| 183 | Err(_) => Vec::new(), | ||
| 184 | }; | ||
| 185 | *result.lock().unwrap() = Some(versions); | ||
| 186 | }); | ||
| 187 | } | ||
| 188 | |||
| 189 | fn browse_output(&mut self) { | ||
| 190 | if let Some(path) = FileDialog::new().pick_folder() { | ||
| 191 | self.output_path = path.display().to_string(); | ||
| 192 | } | ||
| 193 | } | ||
| 194 | } | ||
| 195 | |||
| 196 | impl eframe::App for App { | ||
| 197 | fn logic(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { | ||
| 198 | self.poll_events(); | ||
| 199 | |||
| 200 | // Check version loading result | ||
| 201 | if self.loading_versions { | ||
| 202 | let result = if let Some(ref handle) = self.version_handle { | ||
| 203 | handle.lock().ok().and_then(|mut g| g.take()) | ||
| 204 | } else { | ||
| 205 | None | ||
| 206 | }; | ||
| 207 | if let Some(versions) = result { | ||
| 208 | self.versions = versions; | ||
| 209 | self.loading_versions = false; | ||
| 210 | self.version_handle = None; | ||
| 211 | } | ||
| 212 | } | ||
| 213 | |||
| 214 | if self.downloading { | ||
| 215 | ctx.request_repaint(); | ||
| 216 | } | ||
| 217 | } | ||
| 218 | |||
| 219 | fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) { | ||
| 220 | ui.heading("Factorio Mod Downloader"); | ||
| 221 | ui.separator(); | ||
| 222 | |||
| 223 | // ── Input section ── | ||
| 224 | ui.horizontal(|ui| { | ||
| 225 | ui.label("Mod URL:"); | ||
| 226 | ui.add_sized( | ||
| 227 | [ui.available_width() - 10.0, 20.0], | ||
| 228 | TextEdit::singleline(&mut self.mod_url) | ||
| 229 | .hint_text("https://mods.factorio.com/mod/... or mod name"), | ||
| 230 | ); | ||
| 231 | }); | ||
| 232 | |||
| 233 | ui.horizontal(|ui| { | ||
| 234 | ui.label("Output:"); | ||
| 235 | ui.add_sized( | ||
| 236 | [ui.available_width() - 80.0, 20.0], | ||
| 237 | TextEdit::singleline(&mut self.output_path).hint_text("Download directory"), | ||
| 238 | ); | ||
| 239 | if ui.button("Browse").clicked() { | ||
| 240 | self.browse_output(); | ||
| 241 | } | ||
| 242 | }); | ||
| 243 | |||
| 244 | ui.horizontal(|ui| { | ||
| 245 | ui.label("Version:"); | ||
| 246 | let version_enabled = !self.downloading && !self.versions.is_empty(); | ||
| 247 | ui.add_enabled_ui(version_enabled, |ui| { | ||
| 248 | egui::ComboBox::from_id_salt("version_combo") | ||
| 249 | .width(200.0) | ||
| 250 | .selected_text(if self.target_version.is_empty() { | ||
| 251 | "Latest" | ||
| 252 | } else { | ||
| 253 | &self.target_version | ||
| 254 | }) | ||
| 255 | .show_ui(ui, |ui| { | ||
| 256 | if ui.selectable_label(false, "Latest").clicked() { | ||
| 257 | self.target_version.clear(); | ||
| 258 | } | ||
| 259 | for (ver, label) in &self.versions { | ||
| 260 | if ui.selectable_label(self.target_version == *ver, label).clicked() { | ||
| 261 | self.target_version = ver.clone(); | ||
| 262 | } | ||
| 263 | } | ||
| 264 | }); | ||
| 265 | }); | ||
| 266 | |||
| 267 | if ui | ||
| 268 | .add_enabled( | ||
| 269 | !self.downloading && !self.loading_versions, | ||
| 270 | egui::Button::new(if self.loading_versions { | ||
| 271 | "Loading..." | ||
| 272 | } else { | ||
| 273 | "Load Versions" | ||
| 274 | }), | ||
| 275 | ) | ||
| 276 | .clicked() | ||
| 277 | { | ||
| 278 | self.load_versions(); | ||
| 279 | } | ||
| 280 | |||
| 281 | ui.checkbox(&mut self.include_optional, "Include optional deps"); | ||
| 282 | }); | ||
| 283 | |||
| 284 | ui.add_space(8.0); | ||
| 285 | |||
| 286 | // ── Download button ── | ||
| 287 | let can_download = !self.downloading | ||
| 288 | && !self.mod_url.trim().is_empty() | ||
| 289 | && !self.output_path.is_empty(); | ||
| 290 | |||
| 291 | if ui | ||
| 292 | .add_enabled( | ||
| 293 | can_download, | ||
| 294 | egui::Button::new(if self.downloading { | ||
| 295 | "Downloading..." | ||
| 296 | } else if self.finished { | ||
| 297 | "Download Again" | ||
| 298 | } else { | ||
| 299 | "Start Download" | ||
| 300 | }), | ||
| 301 | ) | ||
| 302 | .clicked() | ||
| 303 | { | ||
| 304 | self.start_download(); | ||
| 305 | } | ||
| 306 | |||
| 307 | ui.add_space(8.0); | ||
| 308 | |||
| 309 | // ── Progress section ── | ||
| 310 | if !self.downloads.is_empty() { | ||
| 311 | egui::CollapsingHeader::new("Downloads") | ||
| 312 | .default_open(true) | ||
| 313 | .show(ui, |ui| { | ||
| 314 | for dl in &self.downloads { | ||
| 315 | let percentage = if dl.total_bytes > 0 { | ||
| 316 | dl.downloaded_bytes as f32 / dl.total_bytes as f32 | ||
| 317 | } else { | ||
| 318 | 0.0 | ||
| 319 | }; | ||
| 320 | |||
| 321 | ui.horizontal(|ui| { | ||
| 322 | let status = if dl.complete { | ||
| 323 | "[OK]" | ||
| 324 | } else if dl.error.is_some() { | ||
| 325 | "[ERR]" | ||
| 326 | } else { | ||
| 327 | "[>>]" | ||
| 328 | }; | ||
| 329 | ui.label(format!("{status} {}", dl.name)); | ||
| 330 | |||
| 331 | if let Some(ref err) = dl.error { | ||
| 332 | ui.colored_label(Color32::RED, format!("Error: {err}")); | ||
| 333 | } else if dl.total_bytes > 0 { | ||
| 334 | ui.label(format!( | ||
| 335 | "{:.1} / {:.1} MB", | ||
| 336 | dl.downloaded_bytes as f64 / 1_048_576.0, | ||
| 337 | dl.total_bytes as f64 / 1_048_576.0 | ||
| 338 | )); | ||
| 339 | } | ||
| 340 | }); | ||
| 341 | |||
| 342 | let bar = | ||
| 343 | ProgressBar::new(percentage).desired_width(ui.available_width()); | ||
| 344 | ui.add(bar); | ||
| 345 | } | ||
| 346 | }); | ||
| 347 | } | ||
| 348 | |||
| 349 | ui.add_space(8.0); | ||
| 350 | |||
| 351 | // ── Log section ── | ||
| 352 | egui::CollapsingHeader::new("Log") | ||
| 353 | .default_open(true) | ||
| 354 | .show(ui, |ui| { | ||
| 355 | ScrollArea::vertical() | ||
| 356 | .max_height(300.0) | ||
| 357 | .stick_to_bottom(true) | ||
| 358 | .show(ui, |ui| { | ||
| 359 | for entry in &self.log_entries { | ||
| 360 | if entry.is_error { | ||
| 361 | ui.colored_label(Color32::RED, &entry.text); | ||
| 362 | } else { | ||
| 363 | ui.label(&entry.text); | ||
| 364 | } | ||
| 365 | } | ||
| 366 | }); | ||
| 367 | }); | ||
| 368 | } | ||
| 369 | } | ||
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..78f17f8 --- /dev/null +++ b/src/main.rs | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | mod downloader; | ||
| 2 | |||
| 3 | #[cfg(feature = "gui")] | ||
| 4 | mod gui; | ||
| 5 | |||
| 6 | // --------------------------------------------------------------------------- | ||
| 7 | // GUI entry point (when the "gui" feature is enabled) | ||
| 8 | // --------------------------------------------------------------------------- | ||
| 9 | #[cfg(feature = "gui")] | ||
| 10 | fn main() -> eframe::Result<()> { | ||
| 11 | let options = eframe::NativeOptions { | ||
| 12 | viewport: egui::ViewportBuilder::default() | ||
| 13 | .with_inner_size([800.0, 650.0]) | ||
| 14 | .with_min_inner_size([600.0, 400.0]), | ||
| 15 | ..Default::default() | ||
| 16 | }; | ||
| 17 | |||
| 18 | eframe::run_native( | ||
| 19 | "Factorio Mod Downloader", | ||
| 20 | options, | ||
| 21 | Box::new(|_cc| Ok(Box::new(gui::App::new()))), | ||
| 22 | ) | ||
| 23 | } | ||
| 24 | |||
| 25 | // --------------------------------------------------------------------------- | ||
| 26 | // CLI entry point (when the "gui" feature is disabled) | ||
| 27 | // --------------------------------------------------------------------------- | ||
| 28 | #[cfg(not(feature = "gui"))] | ||
| 29 | fn main() { | ||
| 30 | let args: Vec<String> = std::env::args().collect(); | ||
| 31 | |||
| 32 | if args.len() < 2 { | ||
| 33 | eprintln!("Factorio Mod Downloader (CLI)"); | ||
| 34 | eprintln!(); | ||
| 35 | eprintln!( | ||
| 36 | "Usage: {} <mod_url_or_name> [output_directory] [options]", | ||
| 37 | args[0] | ||
| 38 | ); | ||
| 39 | eprintln!(); | ||
| 40 | eprintln!("Options:"); | ||
| 41 | eprintln!(" --version <VER> Download a specific version instead of latest"); | ||
| 42 | eprintln!(" --include-optional Also download optional dependencies"); | ||
| 43 | eprintln!(); | ||
| 44 | eprintln!("Examples:"); | ||
| 45 | eprintln!(" {} my-cool-mod", args[0]); | ||
| 46 | eprintln!( | ||
| 47 | " {} https://mods.factorio.com/mod/my-cool-mod ./mods", | ||
| 48 | args[0] | ||
| 49 | ); | ||
| 50 | eprintln!( | ||
| 51 | " {} my-cool-mod ./mods --version 2.1.0 --include-optional", | ||
| 52 | args[0] | ||
| 53 | ); | ||
| 54 | std::process::exit(1); | ||
| 55 | } | ||
| 56 | |||
| 57 | let mod_url = &args[1]; | ||
| 58 | |||
| 59 | let output = if args.len() >= 3 && !args[2].starts_with("--") { | ||
| 60 | std::path::PathBuf::from(&args[2]) | ||
| 61 | } else { | ||
| 62 | std::env::current_dir().unwrap_or_else(|_| std::path::PathBuf::from(".")) | ||
| 63 | }; | ||
| 64 | |||
| 65 | let mut target_version: Option<&str> = None; | ||
| 66 | let mut include_optional = false; | ||
| 67 | |||
| 68 | let mut i = if args.len() >= 3 && !args[2].starts_with("--") { | ||
| 69 | 3 | ||
| 70 | } else { | ||
| 71 | 2 | ||
| 72 | }; | ||
| 73 | while i < args.len() { | ||
| 74 | match args[i].as_str() { | ||
| 75 | "--version" => { | ||
| 76 | if i + 1 < args.len() { | ||
| 77 | target_version = Some(&args[i + 1]); | ||
| 78 | i += 1; | ||
| 79 | } else { | ||
| 80 | eprintln!("Error: --version requires a value"); | ||
| 81 | std::process::exit(1); | ||
| 82 | } | ||
| 83 | } | ||
| 84 | "--include-optional" => { | ||
| 85 | include_optional = true; | ||
| 86 | } | ||
| 87 | other => { | ||
| 88 | eprintln!("Unknown option: {other}"); | ||
| 89 | std::process::exit(1); | ||
| 90 | } | ||
| 91 | } | ||
| 92 | i += 1; | ||
| 93 | } | ||
| 94 | |||
| 95 | match downloader::run_cli_download(mod_url, &output, target_version, include_optional) { | ||
| 96 | Ok(()) => {} | ||
| 97 | Err(e) => { | ||
| 98 | eprintln!("Error: {:#}", e); | ||
| 99 | std::process::exit(1); | ||
| 100 | } | ||
| 101 | } | ||
| 102 | } | ||
