├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── examples ├── cli.rs ├── client.rs ├── echo.rs └── swarm.rs ├── rust-toolchain.toml ├── rustfmt.toml └── src └── lib.rs /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vscode/ 3 | target/ -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.8.4" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 25 | dependencies = [ 26 | "cfg-if", 27 | "cipher", 28 | "cpufeatures", 29 | ] 30 | 31 | [[package]] 32 | name = "aho-corasick" 33 | version = "1.1.3" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 36 | dependencies = [ 37 | "memchr", 38 | ] 39 | 40 | [[package]] 41 | name = "android_log-sys" 42 | version = "0.3.2" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" 45 | 46 | [[package]] 47 | name = "anyhow" 48 | version = "1.0.98" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 51 | 52 | [[package]] 53 | name = "arrayvec" 54 | version = "0.7.6" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 57 | 58 | [[package]] 59 | name = "as-any" 60 | version = "0.3.2" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "b0f477b951e452a0b6b4a10b53ccd569042d1d01729b519e02074a9c0958a063" 63 | 64 | [[package]] 65 | name = "assert_type_match" 66 | version = "0.1.1" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" 69 | dependencies = [ 70 | "proc-macro2", 71 | "quote", 72 | "syn", 73 | ] 74 | 75 | [[package]] 76 | name = "async-channel" 77 | version = "2.3.1" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 80 | dependencies = [ 81 | "concurrent-queue", 82 | "event-listener-strategy", 83 | "futures-core", 84 | "pin-project-lite", 85 | ] 86 | 87 | [[package]] 88 | name = "async-compat" 89 | version = "0.2.4" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" 92 | dependencies = [ 93 | "futures-core", 94 | "futures-io", 95 | "once_cell", 96 | "pin-project-lite", 97 | "tokio", 98 | ] 99 | 100 | [[package]] 101 | name = "async-executor" 102 | version = "1.13.2" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" 105 | dependencies = [ 106 | "async-task", 107 | "concurrent-queue", 108 | "fastrand", 109 | "futures-lite", 110 | "pin-project-lite", 111 | "slab", 112 | ] 113 | 114 | [[package]] 115 | name = "async-recursion" 116 | version = "1.1.1" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" 119 | dependencies = [ 120 | "proc-macro2", 121 | "quote", 122 | "syn", 123 | ] 124 | 125 | [[package]] 126 | name = "async-task" 127 | version = "4.7.1" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 130 | dependencies = [ 131 | "portable-atomic", 132 | ] 133 | 134 | [[package]] 135 | name = "async-trait" 136 | version = "0.1.88" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 139 | dependencies = [ 140 | "proc-macro2", 141 | "quote", 142 | "syn", 143 | ] 144 | 145 | [[package]] 146 | name = "atomic-waker" 147 | version = "1.1.2" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 150 | dependencies = [ 151 | "portable-atomic", 152 | ] 153 | 154 | [[package]] 155 | name = "autocfg" 156 | version = "1.4.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 159 | 160 | [[package]] 161 | name = "azalea" 162 | version = "0.12.0+mc1.21.5" 163 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 164 | dependencies = [ 165 | "azalea-auth", 166 | "azalea-block", 167 | "azalea-brigadier", 168 | "azalea-buf", 169 | "azalea-chat", 170 | "azalea-client", 171 | "azalea-core", 172 | "azalea-entity", 173 | "azalea-inventory", 174 | "azalea-physics", 175 | "azalea-protocol", 176 | "azalea-registry", 177 | "azalea-world", 178 | "bevy_app", 179 | "bevy_ecs", 180 | "bevy_log", 181 | "bevy_tasks", 182 | "derive_more 2.0.1", 183 | "futures", 184 | "futures-lite", 185 | "indexmap", 186 | "nohash-hasher", 187 | "num-format", 188 | "num-traits", 189 | "parking_lot", 190 | "rustc-hash 2.1.1", 191 | "thiserror 2.0.12", 192 | "tokio", 193 | "tracing", 194 | "uuid", 195 | ] 196 | 197 | [[package]] 198 | name = "azalea-auth" 199 | version = "0.12.0+mc1.21.5" 200 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 201 | dependencies = [ 202 | "azalea-buf", 203 | "azalea-crypto", 204 | "base64", 205 | "chrono", 206 | "md-5", 207 | "reqwest", 208 | "rsa", 209 | "serde", 210 | "serde_json", 211 | "thiserror 2.0.12", 212 | "tokio", 213 | "tracing", 214 | "uuid", 215 | ] 216 | 217 | [[package]] 218 | name = "azalea-block" 219 | version = "0.12.0+mc1.21.5" 220 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 221 | dependencies = [ 222 | "azalea-block-macros", 223 | "azalea-buf", 224 | "azalea-registry", 225 | ] 226 | 227 | [[package]] 228 | name = "azalea-block-macros" 229 | version = "0.12.0+mc1.21.5" 230 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 231 | dependencies = [ 232 | "proc-macro2", 233 | "quote", 234 | "syn", 235 | ] 236 | 237 | [[package]] 238 | name = "azalea-brigadier" 239 | version = "0.12.0+mc1.21.5" 240 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 241 | dependencies = [ 242 | "azalea-buf", 243 | "azalea-chat", 244 | "parking_lot", 245 | ] 246 | 247 | [[package]] 248 | name = "azalea-buf" 249 | version = "0.12.0+mc1.21.5" 250 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 251 | dependencies = [ 252 | "azalea-buf-macros", 253 | "byteorder", 254 | "serde_json", 255 | "simdnbt", 256 | "thiserror 2.0.12", 257 | "tracing", 258 | "uuid", 259 | ] 260 | 261 | [[package]] 262 | name = "azalea-buf-macros" 263 | version = "0.12.0+mc1.21.5" 264 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 265 | dependencies = [ 266 | "proc-macro2", 267 | "quote", 268 | "syn", 269 | ] 270 | 271 | [[package]] 272 | name = "azalea-chat" 273 | version = "0.12.0+mc1.21.5" 274 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 275 | dependencies = [ 276 | "azalea-buf", 277 | "azalea-language", 278 | "azalea-registry", 279 | "serde", 280 | "serde_json", 281 | "simdnbt", 282 | "tracing", 283 | ] 284 | 285 | [[package]] 286 | name = "azalea-client" 287 | version = "0.12.0+mc1.21.5" 288 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 289 | dependencies = [ 290 | "async-compat", 291 | "azalea-auth", 292 | "azalea-block", 293 | "azalea-buf", 294 | "azalea-chat", 295 | "azalea-core", 296 | "azalea-crypto", 297 | "azalea-entity", 298 | "azalea-inventory", 299 | "azalea-physics", 300 | "azalea-protocol", 301 | "azalea-registry", 302 | "azalea-world", 303 | "bevy_app", 304 | "bevy_ecs", 305 | "bevy_tasks", 306 | "bevy_time", 307 | "chrono", 308 | "derive_more 2.0.1", 309 | "minecraft_folder_path", 310 | "parking_lot", 311 | "paste", 312 | "regex", 313 | "reqwest", 314 | "simdnbt", 315 | "thiserror 2.0.12", 316 | "tokio", 317 | "tracing", 318 | "uuid", 319 | ] 320 | 321 | [[package]] 322 | name = "azalea-core" 323 | version = "0.12.0+mc1.21.5" 324 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 325 | dependencies = [ 326 | "azalea-buf", 327 | "azalea-chat", 328 | "azalea-registry", 329 | "bevy_ecs", 330 | "indexmap", 331 | "nohash-hasher", 332 | "num-traits", 333 | "serde", 334 | "simdnbt", 335 | "tracing", 336 | ] 337 | 338 | [[package]] 339 | name = "azalea-crypto" 340 | version = "0.12.0+mc1.21.5" 341 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 342 | dependencies = [ 343 | "aes", 344 | "azalea-buf", 345 | "cfb8", 346 | "num-bigint", 347 | "rand 0.8.5", 348 | "rsa", 349 | "rsa_public_encrypt_pkcs1", 350 | "sha-1", 351 | "sha2", 352 | "uuid", 353 | ] 354 | 355 | [[package]] 356 | name = "azalea-entity" 357 | version = "0.12.0+mc1.21.5" 358 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 359 | dependencies = [ 360 | "azalea-block", 361 | "azalea-buf", 362 | "azalea-chat", 363 | "azalea-core", 364 | "azalea-inventory", 365 | "azalea-registry", 366 | "azalea-world", 367 | "bevy_app", 368 | "bevy_ecs", 369 | "derive_more 2.0.1", 370 | "enum-as-inner", 371 | "nohash-hasher", 372 | "parking_lot", 373 | "simdnbt", 374 | "thiserror 2.0.12", 375 | "tracing", 376 | "uuid", 377 | ] 378 | 379 | [[package]] 380 | name = "azalea-inventory" 381 | version = "0.12.0+mc1.21.5" 382 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 383 | dependencies = [ 384 | "azalea-buf", 385 | "azalea-chat", 386 | "azalea-core", 387 | "azalea-inventory-macros", 388 | "azalea-registry", 389 | "indexmap", 390 | "simdnbt", 391 | "tracing", 392 | "uuid", 393 | ] 394 | 395 | [[package]] 396 | name = "azalea-inventory-macros" 397 | version = "0.12.0+mc1.21.5" 398 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 399 | dependencies = [ 400 | "proc-macro2", 401 | "quote", 402 | "syn", 403 | ] 404 | 405 | [[package]] 406 | name = "azalea-language" 407 | version = "0.12.0+mc1.21.5" 408 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 409 | dependencies = [ 410 | "compact_str", 411 | "serde", 412 | "serde_json", 413 | ] 414 | 415 | [[package]] 416 | name = "azalea-physics" 417 | version = "0.12.0+mc1.21.5" 418 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 419 | dependencies = [ 420 | "azalea-block", 421 | "azalea-core", 422 | "azalea-entity", 423 | "azalea-inventory", 424 | "azalea-registry", 425 | "azalea-world", 426 | "bevy_app", 427 | "bevy_ecs", 428 | "parking_lot", 429 | "tracing", 430 | ] 431 | 432 | [[package]] 433 | name = "azalea-protocol" 434 | version = "0.12.0+mc1.21.5" 435 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 436 | dependencies = [ 437 | "async-recursion", 438 | "azalea-auth", 439 | "azalea-block", 440 | "azalea-brigadier", 441 | "azalea-buf", 442 | "azalea-chat", 443 | "azalea-core", 444 | "azalea-crypto", 445 | "azalea-entity", 446 | "azalea-inventory", 447 | "azalea-protocol-macros", 448 | "azalea-registry", 449 | "azalea-world", 450 | "bevy_ecs", 451 | "crc32fast", 452 | "flate2", 453 | "futures", 454 | "futures-lite", 455 | "hickory-resolver", 456 | "serde", 457 | "serde_json", 458 | "simdnbt", 459 | "socks5-impl", 460 | "thiserror 2.0.12", 461 | "tokio", 462 | "tokio-util", 463 | "tracing", 464 | "uuid", 465 | ] 466 | 467 | [[package]] 468 | name = "azalea-protocol-macros" 469 | version = "0.12.0+mc1.21.5" 470 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 471 | dependencies = [ 472 | "proc-macro2", 473 | "quote", 474 | "syn", 475 | ] 476 | 477 | [[package]] 478 | name = "azalea-registry" 479 | version = "0.12.0+mc1.21.5" 480 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 481 | dependencies = [ 482 | "azalea-buf", 483 | "azalea-registry-macros", 484 | "serde", 485 | "simdnbt", 486 | ] 487 | 488 | [[package]] 489 | name = "azalea-registry-macros" 490 | version = "0.12.0+mc1.21.5" 491 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 492 | dependencies = [ 493 | "quote", 494 | "syn", 495 | ] 496 | 497 | [[package]] 498 | name = "azalea-viaversion" 499 | version = "0.1.0" 500 | dependencies = [ 501 | "anyhow", 502 | "async-compat", 503 | "azalea", 504 | "futures-util", 505 | "kdam", 506 | "lazy-regex", 507 | "minecraft_folder_path", 508 | "reqwest", 509 | "semver", 510 | "tokio", 511 | "tracing", 512 | "tracing-subscriber", 513 | ] 514 | 515 | [[package]] 516 | name = "azalea-world" 517 | version = "0.12.0+mc1.21.5" 518 | source = "git+https://github.com/azalea-rs/azalea#1493c06de597fc320b79212d133f08c678763a6b" 519 | dependencies = [ 520 | "azalea-block", 521 | "azalea-buf", 522 | "azalea-core", 523 | "azalea-registry", 524 | "bevy_ecs", 525 | "derive_more 2.0.1", 526 | "nohash-hasher", 527 | "parking_lot", 528 | "rustc-hash 2.1.1", 529 | "simdnbt", 530 | "thiserror 2.0.12", 531 | "tracing", 532 | ] 533 | 534 | [[package]] 535 | name = "backtrace" 536 | version = "0.3.75" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 539 | dependencies = [ 540 | "addr2line", 541 | "cfg-if", 542 | "libc", 543 | "miniz_oxide", 544 | "object", 545 | "rustc-demangle", 546 | "windows-targets 0.52.6", 547 | ] 548 | 549 | [[package]] 550 | name = "base64" 551 | version = "0.22.1" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 554 | 555 | [[package]] 556 | name = "base64ct" 557 | version = "1.7.3" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" 560 | 561 | [[package]] 562 | name = "bevy_app" 563 | version = "0.16.0" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "a2b6267ac23a9947d5b2725ff047a1e1add70076d85fa9fb73d044ab9bea1f3c" 566 | dependencies = [ 567 | "bevy_derive", 568 | "bevy_ecs", 569 | "bevy_platform", 570 | "bevy_reflect", 571 | "bevy_tasks", 572 | "bevy_utils", 573 | "cfg-if", 574 | "console_error_panic_hook", 575 | "ctrlc", 576 | "downcast-rs", 577 | "log", 578 | "thiserror 2.0.12", 579 | "variadics_please", 580 | "wasm-bindgen", 581 | "web-sys", 582 | ] 583 | 584 | [[package]] 585 | name = "bevy_derive" 586 | version = "0.16.0" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "f626531b9c05c25a758ede228727bd11c2c2c8498ecbed9925044386d525a2a3" 589 | dependencies = [ 590 | "bevy_macro_utils", 591 | "quote", 592 | "syn", 593 | ] 594 | 595 | [[package]] 596 | name = "bevy_ecs" 597 | version = "0.16.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "d9e807b5d9aab3bb8dfe47e7a44c9ff088bad2ceefe299b80ac77609a87fe9d4" 600 | dependencies = [ 601 | "arrayvec", 602 | "bevy_ecs_macros", 603 | "bevy_platform", 604 | "bevy_ptr", 605 | "bevy_reflect", 606 | "bevy_tasks", 607 | "bevy_utils", 608 | "bitflags", 609 | "bumpalo", 610 | "concurrent-queue", 611 | "derive_more 1.0.0", 612 | "disqualified", 613 | "fixedbitset", 614 | "indexmap", 615 | "log", 616 | "nonmax", 617 | "serde", 618 | "smallvec", 619 | "thiserror 2.0.12", 620 | "variadics_please", 621 | ] 622 | 623 | [[package]] 624 | name = "bevy_ecs_macros" 625 | version = "0.16.0" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "467d7bb98aeb8dd30f36e6a773000c12a891d4f1bee2adc3841ec89cc8eaf54e" 628 | dependencies = [ 629 | "bevy_macro_utils", 630 | "proc-macro2", 631 | "quote", 632 | "syn", 633 | ] 634 | 635 | [[package]] 636 | name = "bevy_log" 637 | version = "0.16.0" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "7156df8d2f11135cf71c03eb4c11132b65201fd4f51648571e59e39c9c9ee2f6" 640 | dependencies = [ 641 | "android_log-sys", 642 | "bevy_app", 643 | "bevy_ecs", 644 | "bevy_utils", 645 | "tracing", 646 | "tracing-log", 647 | "tracing-oslog", 648 | "tracing-subscriber", 649 | "tracing-wasm", 650 | ] 651 | 652 | [[package]] 653 | name = "bevy_macro_utils" 654 | version = "0.16.0" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "7a2473db70d8785b5c75d6dd951a2e51e9be2c2311122db9692c79c9d887517b" 657 | dependencies = [ 658 | "parking_lot", 659 | "proc-macro2", 660 | "quote", 661 | "syn", 662 | "toml_edit", 663 | ] 664 | 665 | [[package]] 666 | name = "bevy_platform" 667 | version = "0.16.0" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "704db2c11b7bc31093df4fbbdd3769f9606a6a5287149f4b51f2680f25834ebc" 670 | dependencies = [ 671 | "cfg-if", 672 | "critical-section", 673 | "foldhash", 674 | "getrandom 0.2.16", 675 | "hashbrown", 676 | "portable-atomic", 677 | "portable-atomic-util", 678 | "serde", 679 | "spin", 680 | "web-time", 681 | ] 682 | 683 | [[package]] 684 | name = "bevy_ptr" 685 | version = "0.16.0" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4" 688 | 689 | [[package]] 690 | name = "bevy_reflect" 691 | version = "0.16.0" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "607ebacc31029cf2f39ac330eabf1d4bc411b159528ec08dbe6b0593eaccfd41" 694 | dependencies = [ 695 | "assert_type_match", 696 | "bevy_platform", 697 | "bevy_ptr", 698 | "bevy_reflect_derive", 699 | "bevy_utils", 700 | "derive_more 1.0.0", 701 | "disqualified", 702 | "downcast-rs", 703 | "erased-serde", 704 | "foldhash", 705 | "glam", 706 | "serde", 707 | "smallvec", 708 | "smol_str", 709 | "thiserror 2.0.12", 710 | "uuid", 711 | "variadics_please", 712 | "wgpu-types", 713 | ] 714 | 715 | [[package]] 716 | name = "bevy_reflect_derive" 717 | version = "0.16.0" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "cf35e45e4eb239018369f63f2adc2107a54c329f9276d020e01eee1625b0238b" 720 | dependencies = [ 721 | "bevy_macro_utils", 722 | "proc-macro2", 723 | "quote", 724 | "syn", 725 | "uuid", 726 | ] 727 | 728 | [[package]] 729 | name = "bevy_tasks" 730 | version = "0.16.0" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "444c450b65e108855f42ecb6db0c041a56ea7d7f10cc6222f0ca95e9536a7d19" 733 | dependencies = [ 734 | "async-channel", 735 | "async-executor", 736 | "async-task", 737 | "atomic-waker", 738 | "bevy_platform", 739 | "cfg-if", 740 | "concurrent-queue", 741 | "crossbeam-queue", 742 | "derive_more 1.0.0", 743 | "futures-channel", 744 | "futures-lite", 745 | "heapless", 746 | "pin-project", 747 | "wasm-bindgen-futures", 748 | ] 749 | 750 | [[package]] 751 | name = "bevy_time" 752 | version = "0.16.0" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "456369ca10f8e039aaf273332744674844827854833ee29e28f9e161702f2f55" 755 | dependencies = [ 756 | "bevy_app", 757 | "bevy_ecs", 758 | "bevy_platform", 759 | "bevy_reflect", 760 | "crossbeam-channel", 761 | "log", 762 | "serde", 763 | ] 764 | 765 | [[package]] 766 | name = "bevy_utils" 767 | version = "0.16.0" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "ac2da3b3c1f94dadefcbe837aaa4aa119fcea37f7bdc5307eb05b4ede1921e24" 770 | dependencies = [ 771 | "bevy_platform", 772 | "thread_local", 773 | ] 774 | 775 | [[package]] 776 | name = "bindgen" 777 | version = "0.70.1" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" 780 | dependencies = [ 781 | "bitflags", 782 | "cexpr", 783 | "clang-sys", 784 | "itertools", 785 | "log", 786 | "prettyplease", 787 | "proc-macro2", 788 | "quote", 789 | "regex", 790 | "rustc-hash 1.1.0", 791 | "shlex", 792 | "syn", 793 | ] 794 | 795 | [[package]] 796 | name = "bitflags" 797 | version = "2.9.0" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 800 | dependencies = [ 801 | "serde", 802 | ] 803 | 804 | [[package]] 805 | name = "block-buffer" 806 | version = "0.10.4" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 809 | dependencies = [ 810 | "generic-array", 811 | ] 812 | 813 | [[package]] 814 | name = "bumpalo" 815 | version = "3.17.0" 816 | source = "registry+https://github.com/rust-lang/crates.io-index" 817 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 818 | 819 | [[package]] 820 | name = "byteorder" 821 | version = "1.5.0" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 824 | 825 | [[package]] 826 | name = "bytes" 827 | version = "1.10.1" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 830 | 831 | [[package]] 832 | name = "castaway" 833 | version = "0.2.3" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" 836 | dependencies = [ 837 | "rustversion", 838 | ] 839 | 840 | [[package]] 841 | name = "cc" 842 | version = "1.2.21" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" 845 | dependencies = [ 846 | "shlex", 847 | ] 848 | 849 | [[package]] 850 | name = "cexpr" 851 | version = "0.6.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 854 | dependencies = [ 855 | "nom", 856 | ] 857 | 858 | [[package]] 859 | name = "cfb8" 860 | version = "0.8.1" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "014c0a0e1ad0dae6a86c082db2f9bd7fe8c2c734227047d0d8b4d4a3a094a1e1" 863 | dependencies = [ 864 | "cipher", 865 | ] 866 | 867 | [[package]] 868 | name = "cfg-if" 869 | version = "1.0.0" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 872 | 873 | [[package]] 874 | name = "cfg_aliases" 875 | version = "0.2.1" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 878 | 879 | [[package]] 880 | name = "chrono" 881 | version = "0.4.41" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 884 | dependencies = [ 885 | "num-traits", 886 | "serde", 887 | ] 888 | 889 | [[package]] 890 | name = "cipher" 891 | version = "0.4.4" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 894 | dependencies = [ 895 | "crypto-common", 896 | "inout", 897 | ] 898 | 899 | [[package]] 900 | name = "clang-sys" 901 | version = "1.8.1" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 904 | dependencies = [ 905 | "glob", 906 | "libc", 907 | "libloading", 908 | ] 909 | 910 | [[package]] 911 | name = "compact_str" 912 | version = "0.9.0" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" 915 | dependencies = [ 916 | "castaway", 917 | "cfg-if", 918 | "itoa", 919 | "rustversion", 920 | "ryu", 921 | "serde", 922 | "static_assertions", 923 | ] 924 | 925 | [[package]] 926 | name = "concurrent-queue" 927 | version = "2.5.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 930 | dependencies = [ 931 | "crossbeam-utils", 932 | "portable-atomic", 933 | ] 934 | 935 | [[package]] 936 | name = "console_error_panic_hook" 937 | version = "0.1.7" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 940 | dependencies = [ 941 | "cfg-if", 942 | "wasm-bindgen", 943 | ] 944 | 945 | [[package]] 946 | name = "const-oid" 947 | version = "0.9.6" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 950 | 951 | [[package]] 952 | name = "cpufeatures" 953 | version = "0.2.17" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 956 | dependencies = [ 957 | "libc", 958 | ] 959 | 960 | [[package]] 961 | name = "crc32fast" 962 | version = "1.4.2" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 965 | dependencies = [ 966 | "cfg-if", 967 | ] 968 | 969 | [[package]] 970 | name = "critical-section" 971 | version = "1.2.0" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 974 | 975 | [[package]] 976 | name = "crossbeam-channel" 977 | version = "0.5.15" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 980 | dependencies = [ 981 | "crossbeam-utils", 982 | ] 983 | 984 | [[package]] 985 | name = "crossbeam-epoch" 986 | version = "0.9.18" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 989 | dependencies = [ 990 | "crossbeam-utils", 991 | ] 992 | 993 | [[package]] 994 | name = "crossbeam-queue" 995 | version = "0.3.12" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 998 | dependencies = [ 999 | "crossbeam-utils", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "crossbeam-utils" 1004 | version = "0.8.21" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 1007 | 1008 | [[package]] 1009 | name = "crypto-common" 1010 | version = "0.1.6" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 1013 | dependencies = [ 1014 | "generic-array", 1015 | "typenum", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "ctrlc" 1020 | version = "3.4.6" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "697b5419f348fd5ae2478e8018cb016c00a5881c7f46c717de98ffd135a5651c" 1023 | dependencies = [ 1024 | "nix", 1025 | "windows-sys 0.59.0", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "data-encoding" 1030 | version = "2.9.0" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 1033 | 1034 | [[package]] 1035 | name = "der" 1036 | version = "0.7.10" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 1039 | dependencies = [ 1040 | "const-oid", 1041 | "pem-rfc7468", 1042 | "zeroize", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "derive_more" 1047 | version = "1.0.0" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 1050 | dependencies = [ 1051 | "derive_more-impl 1.0.0", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "derive_more" 1056 | version = "2.0.1" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 1059 | dependencies = [ 1060 | "derive_more-impl 2.0.1", 1061 | ] 1062 | 1063 | [[package]] 1064 | name = "derive_more-impl" 1065 | version = "1.0.0" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 1068 | dependencies = [ 1069 | "proc-macro2", 1070 | "quote", 1071 | "syn", 1072 | "unicode-xid", 1073 | ] 1074 | 1075 | [[package]] 1076 | name = "derive_more-impl" 1077 | version = "2.0.1" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 1080 | dependencies = [ 1081 | "proc-macro2", 1082 | "quote", 1083 | "syn", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "digest" 1088 | version = "0.10.7" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 1091 | dependencies = [ 1092 | "block-buffer", 1093 | "const-oid", 1094 | "crypto-common", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "displaydoc" 1099 | version = "0.2.5" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 1102 | dependencies = [ 1103 | "proc-macro2", 1104 | "quote", 1105 | "syn", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "disqualified" 1110 | version = "1.0.0" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" 1113 | 1114 | [[package]] 1115 | name = "downcast-rs" 1116 | version = "2.0.1" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" 1119 | 1120 | [[package]] 1121 | name = "either" 1122 | version = "1.15.0" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 1125 | 1126 | [[package]] 1127 | name = "enum-as-inner" 1128 | version = "0.6.1" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 1131 | dependencies = [ 1132 | "heck", 1133 | "proc-macro2", 1134 | "quote", 1135 | "syn", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "equivalent" 1140 | version = "1.0.2" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 1143 | 1144 | [[package]] 1145 | name = "erased-serde" 1146 | version = "0.4.6" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" 1149 | dependencies = [ 1150 | "serde", 1151 | "typeid", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "errno" 1156 | version = "0.3.11" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" 1159 | dependencies = [ 1160 | "libc", 1161 | "windows-sys 0.59.0", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "event-listener" 1166 | version = "5.4.0" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 1169 | dependencies = [ 1170 | "concurrent-queue", 1171 | "parking", 1172 | "pin-project-lite", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "event-listener-strategy" 1177 | version = "0.5.4" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 1180 | dependencies = [ 1181 | "event-listener", 1182 | "pin-project-lite", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "fastrand" 1187 | version = "2.3.0" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1190 | 1191 | [[package]] 1192 | name = "fixedbitset" 1193 | version = "0.5.7" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" 1196 | 1197 | [[package]] 1198 | name = "flate2" 1199 | version = "1.1.1" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" 1202 | dependencies = [ 1203 | "crc32fast", 1204 | "libz-rs-sys", 1205 | "miniz_oxide", 1206 | ] 1207 | 1208 | [[package]] 1209 | name = "fnv" 1210 | version = "1.0.7" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1213 | 1214 | [[package]] 1215 | name = "foldhash" 1216 | version = "0.1.5" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1219 | 1220 | [[package]] 1221 | name = "form_urlencoded" 1222 | version = "1.2.1" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1225 | dependencies = [ 1226 | "percent-encoding", 1227 | ] 1228 | 1229 | [[package]] 1230 | name = "futures" 1231 | version = "0.3.31" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 1234 | dependencies = [ 1235 | "futures-channel", 1236 | "futures-core", 1237 | "futures-executor", 1238 | "futures-io", 1239 | "futures-sink", 1240 | "futures-task", 1241 | "futures-util", 1242 | ] 1243 | 1244 | [[package]] 1245 | name = "futures-channel" 1246 | version = "0.3.31" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 1249 | dependencies = [ 1250 | "futures-core", 1251 | "futures-sink", 1252 | ] 1253 | 1254 | [[package]] 1255 | name = "futures-core" 1256 | version = "0.3.31" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1259 | 1260 | [[package]] 1261 | name = "futures-executor" 1262 | version = "0.3.31" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 1265 | dependencies = [ 1266 | "futures-core", 1267 | "futures-task", 1268 | "futures-util", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "futures-io" 1273 | version = "0.3.31" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1276 | 1277 | [[package]] 1278 | name = "futures-lite" 1279 | version = "2.6.0" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" 1282 | dependencies = [ 1283 | "fastrand", 1284 | "futures-core", 1285 | "futures-io", 1286 | "parking", 1287 | "pin-project-lite", 1288 | ] 1289 | 1290 | [[package]] 1291 | name = "futures-macro" 1292 | version = "0.3.31" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1295 | dependencies = [ 1296 | "proc-macro2", 1297 | "quote", 1298 | "syn", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "futures-sink" 1303 | version = "0.3.31" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 1306 | 1307 | [[package]] 1308 | name = "futures-task" 1309 | version = "0.3.31" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1312 | 1313 | [[package]] 1314 | name = "futures-util" 1315 | version = "0.3.31" 1316 | source = "registry+https://github.com/rust-lang/crates.io-index" 1317 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1318 | dependencies = [ 1319 | "futures-channel", 1320 | "futures-core", 1321 | "futures-io", 1322 | "futures-macro", 1323 | "futures-sink", 1324 | "futures-task", 1325 | "memchr", 1326 | "pin-project-lite", 1327 | "pin-utils", 1328 | "slab", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "generator" 1333 | version = "0.8.4" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" 1336 | dependencies = [ 1337 | "cfg-if", 1338 | "libc", 1339 | "log", 1340 | "rustversion", 1341 | "windows", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "generic-array" 1346 | version = "0.14.7" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1349 | dependencies = [ 1350 | "typenum", 1351 | "version_check", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "getrandom" 1356 | version = "0.2.16" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1359 | dependencies = [ 1360 | "cfg-if", 1361 | "js-sys", 1362 | "libc", 1363 | "wasi 0.11.0+wasi-snapshot-preview1", 1364 | "wasm-bindgen", 1365 | ] 1366 | 1367 | [[package]] 1368 | name = "getrandom" 1369 | version = "0.3.2" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" 1372 | dependencies = [ 1373 | "cfg-if", 1374 | "js-sys", 1375 | "libc", 1376 | "r-efi", 1377 | "wasi 0.14.2+wasi-0.2.4", 1378 | "wasm-bindgen", 1379 | ] 1380 | 1381 | [[package]] 1382 | name = "gimli" 1383 | version = "0.31.1" 1384 | source = "registry+https://github.com/rust-lang/crates.io-index" 1385 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1386 | 1387 | [[package]] 1388 | name = "glam" 1389 | version = "0.29.3" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" 1392 | dependencies = [ 1393 | "serde", 1394 | ] 1395 | 1396 | [[package]] 1397 | name = "glob" 1398 | version = "0.3.2" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 1401 | 1402 | [[package]] 1403 | name = "hash32" 1404 | version = "0.3.1" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" 1407 | dependencies = [ 1408 | "byteorder", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "hashbrown" 1413 | version = "0.15.3" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" 1416 | dependencies = [ 1417 | "equivalent", 1418 | "serde", 1419 | ] 1420 | 1421 | [[package]] 1422 | name = "heapless" 1423 | version = "0.8.0" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" 1426 | dependencies = [ 1427 | "hash32", 1428 | "portable-atomic", 1429 | "stable_deref_trait", 1430 | ] 1431 | 1432 | [[package]] 1433 | name = "heck" 1434 | version = "0.5.0" 1435 | source = "registry+https://github.com/rust-lang/crates.io-index" 1436 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1437 | 1438 | [[package]] 1439 | name = "hickory-proto" 1440 | version = "0.25.2" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" 1443 | dependencies = [ 1444 | "async-trait", 1445 | "cfg-if", 1446 | "data-encoding", 1447 | "enum-as-inner", 1448 | "futures-channel", 1449 | "futures-io", 1450 | "futures-util", 1451 | "idna", 1452 | "ipnet", 1453 | "once_cell", 1454 | "rand 0.9.1", 1455 | "ring", 1456 | "thiserror 2.0.12", 1457 | "tinyvec", 1458 | "tokio", 1459 | "tracing", 1460 | "url", 1461 | ] 1462 | 1463 | [[package]] 1464 | name = "hickory-resolver" 1465 | version = "0.25.2" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" 1468 | dependencies = [ 1469 | "cfg-if", 1470 | "futures-util", 1471 | "hickory-proto", 1472 | "ipconfig", 1473 | "moka", 1474 | "once_cell", 1475 | "parking_lot", 1476 | "rand 0.9.1", 1477 | "resolv-conf", 1478 | "smallvec", 1479 | "thiserror 2.0.12", 1480 | "tokio", 1481 | "tracing", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "http" 1486 | version = "1.3.1" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1489 | dependencies = [ 1490 | "bytes", 1491 | "fnv", 1492 | "itoa", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "http-body" 1497 | version = "1.0.1" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1500 | dependencies = [ 1501 | "bytes", 1502 | "http", 1503 | ] 1504 | 1505 | [[package]] 1506 | name = "http-body-util" 1507 | version = "0.1.3" 1508 | source = "registry+https://github.com/rust-lang/crates.io-index" 1509 | checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1510 | dependencies = [ 1511 | "bytes", 1512 | "futures-core", 1513 | "http", 1514 | "http-body", 1515 | "pin-project-lite", 1516 | ] 1517 | 1518 | [[package]] 1519 | name = "httparse" 1520 | version = "1.10.1" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1523 | 1524 | [[package]] 1525 | name = "hyper" 1526 | version = "1.6.0" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1529 | dependencies = [ 1530 | "bytes", 1531 | "futures-channel", 1532 | "futures-util", 1533 | "http", 1534 | "http-body", 1535 | "httparse", 1536 | "itoa", 1537 | "pin-project-lite", 1538 | "smallvec", 1539 | "tokio", 1540 | "want", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "hyper-rustls" 1545 | version = "0.27.5" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 1548 | dependencies = [ 1549 | "futures-util", 1550 | "http", 1551 | "hyper", 1552 | "hyper-util", 1553 | "rustls", 1554 | "rustls-pki-types", 1555 | "tokio", 1556 | "tokio-rustls", 1557 | "tower-service", 1558 | "webpki-roots 0.26.11", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "hyper-util" 1563 | version = "0.1.11" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" 1566 | dependencies = [ 1567 | "bytes", 1568 | "futures-channel", 1569 | "futures-util", 1570 | "http", 1571 | "http-body", 1572 | "hyper", 1573 | "libc", 1574 | "pin-project-lite", 1575 | "socket2", 1576 | "tokio", 1577 | "tower-service", 1578 | "tracing", 1579 | ] 1580 | 1581 | [[package]] 1582 | name = "icu_collections" 1583 | version = "1.5.0" 1584 | source = "registry+https://github.com/rust-lang/crates.io-index" 1585 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1586 | dependencies = [ 1587 | "displaydoc", 1588 | "yoke", 1589 | "zerofrom", 1590 | "zerovec", 1591 | ] 1592 | 1593 | [[package]] 1594 | name = "icu_locid" 1595 | version = "1.5.0" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1598 | dependencies = [ 1599 | "displaydoc", 1600 | "litemap", 1601 | "tinystr", 1602 | "writeable", 1603 | "zerovec", 1604 | ] 1605 | 1606 | [[package]] 1607 | name = "icu_locid_transform" 1608 | version = "1.5.0" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1611 | dependencies = [ 1612 | "displaydoc", 1613 | "icu_locid", 1614 | "icu_locid_transform_data", 1615 | "icu_provider", 1616 | "tinystr", 1617 | "zerovec", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "icu_locid_transform_data" 1622 | version = "1.5.1" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" 1625 | 1626 | [[package]] 1627 | name = "icu_normalizer" 1628 | version = "1.5.0" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1631 | dependencies = [ 1632 | "displaydoc", 1633 | "icu_collections", 1634 | "icu_normalizer_data", 1635 | "icu_properties", 1636 | "icu_provider", 1637 | "smallvec", 1638 | "utf16_iter", 1639 | "utf8_iter", 1640 | "write16", 1641 | "zerovec", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "icu_normalizer_data" 1646 | version = "1.5.1" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" 1649 | 1650 | [[package]] 1651 | name = "icu_properties" 1652 | version = "1.5.1" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1655 | dependencies = [ 1656 | "displaydoc", 1657 | "icu_collections", 1658 | "icu_locid_transform", 1659 | "icu_properties_data", 1660 | "icu_provider", 1661 | "tinystr", 1662 | "zerovec", 1663 | ] 1664 | 1665 | [[package]] 1666 | name = "icu_properties_data" 1667 | version = "1.5.1" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" 1670 | 1671 | [[package]] 1672 | name = "icu_provider" 1673 | version = "1.5.0" 1674 | source = "registry+https://github.com/rust-lang/crates.io-index" 1675 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1676 | dependencies = [ 1677 | "displaydoc", 1678 | "icu_locid", 1679 | "icu_provider_macros", 1680 | "stable_deref_trait", 1681 | "tinystr", 1682 | "writeable", 1683 | "yoke", 1684 | "zerofrom", 1685 | "zerovec", 1686 | ] 1687 | 1688 | [[package]] 1689 | name = "icu_provider_macros" 1690 | version = "1.5.0" 1691 | source = "registry+https://github.com/rust-lang/crates.io-index" 1692 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1693 | dependencies = [ 1694 | "proc-macro2", 1695 | "quote", 1696 | "syn", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "idna" 1701 | version = "1.0.3" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1704 | dependencies = [ 1705 | "idna_adapter", 1706 | "smallvec", 1707 | "utf8_iter", 1708 | ] 1709 | 1710 | [[package]] 1711 | name = "idna_adapter" 1712 | version = "1.2.0" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1715 | dependencies = [ 1716 | "icu_normalizer", 1717 | "icu_properties", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "indexmap" 1722 | version = "2.9.0" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 1725 | dependencies = [ 1726 | "equivalent", 1727 | "hashbrown", 1728 | ] 1729 | 1730 | [[package]] 1731 | name = "inout" 1732 | version = "0.1.4" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 1735 | dependencies = [ 1736 | "generic-array", 1737 | ] 1738 | 1739 | [[package]] 1740 | name = "ipconfig" 1741 | version = "0.3.2" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1744 | dependencies = [ 1745 | "socket2", 1746 | "widestring", 1747 | "windows-sys 0.48.0", 1748 | "winreg", 1749 | ] 1750 | 1751 | [[package]] 1752 | name = "ipnet" 1753 | version = "2.11.0" 1754 | source = "registry+https://github.com/rust-lang/crates.io-index" 1755 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1756 | 1757 | [[package]] 1758 | name = "itertools" 1759 | version = "0.13.0" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 1762 | dependencies = [ 1763 | "either", 1764 | ] 1765 | 1766 | [[package]] 1767 | name = "itoa" 1768 | version = "1.0.15" 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" 1770 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1771 | 1772 | [[package]] 1773 | name = "js-sys" 1774 | version = "0.3.77" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1777 | dependencies = [ 1778 | "once_cell", 1779 | "wasm-bindgen", 1780 | ] 1781 | 1782 | [[package]] 1783 | name = "kdam" 1784 | version = "0.6.2" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "7ed2186610f797a95b55e61c420a81d3b9079ac9776d382f41cf35ce0643a90a" 1787 | dependencies = [ 1788 | "terminal_size", 1789 | "windows-sys 0.59.0", 1790 | ] 1791 | 1792 | [[package]] 1793 | name = "lazy-regex" 1794 | version = "3.4.1" 1795 | source = "registry+https://github.com/rust-lang/crates.io-index" 1796 | checksum = "60c7310b93682b36b98fa7ea4de998d3463ccbebd94d935d6b48ba5b6ffa7126" 1797 | dependencies = [ 1798 | "lazy-regex-proc_macros", 1799 | "once_cell", 1800 | "regex", 1801 | ] 1802 | 1803 | [[package]] 1804 | name = "lazy-regex-proc_macros" 1805 | version = "3.4.1" 1806 | source = "registry+https://github.com/rust-lang/crates.io-index" 1807 | checksum = "4ba01db5ef81e17eb10a5e0f2109d1b3a3e29bac3070fdbd7d156bf7dbd206a1" 1808 | dependencies = [ 1809 | "proc-macro2", 1810 | "quote", 1811 | "regex", 1812 | "syn", 1813 | ] 1814 | 1815 | [[package]] 1816 | name = "lazy_static" 1817 | version = "1.5.0" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1820 | dependencies = [ 1821 | "spin", 1822 | ] 1823 | 1824 | [[package]] 1825 | name = "libc" 1826 | version = "0.2.172" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 1829 | 1830 | [[package]] 1831 | name = "libloading" 1832 | version = "0.8.6" 1833 | source = "registry+https://github.com/rust-lang/crates.io-index" 1834 | checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" 1835 | dependencies = [ 1836 | "cfg-if", 1837 | "windows-targets 0.52.6", 1838 | ] 1839 | 1840 | [[package]] 1841 | name = "libm" 1842 | version = "0.2.15" 1843 | source = "registry+https://github.com/rust-lang/crates.io-index" 1844 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1845 | 1846 | [[package]] 1847 | name = "libz-rs-sys" 1848 | version = "0.5.0" 1849 | source = "registry+https://github.com/rust-lang/crates.io-index" 1850 | checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a" 1851 | dependencies = [ 1852 | "zlib-rs", 1853 | ] 1854 | 1855 | [[package]] 1856 | name = "linux-raw-sys" 1857 | version = "0.9.4" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1860 | 1861 | [[package]] 1862 | name = "litemap" 1863 | version = "0.7.5" 1864 | source = "registry+https://github.com/rust-lang/crates.io-index" 1865 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 1866 | 1867 | [[package]] 1868 | name = "lock_api" 1869 | version = "0.4.12" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1872 | dependencies = [ 1873 | "autocfg", 1874 | "scopeguard", 1875 | ] 1876 | 1877 | [[package]] 1878 | name = "log" 1879 | version = "0.4.27" 1880 | source = "registry+https://github.com/rust-lang/crates.io-index" 1881 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1882 | 1883 | [[package]] 1884 | name = "loom" 1885 | version = "0.7.2" 1886 | source = "registry+https://github.com/rust-lang/crates.io-index" 1887 | checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 1888 | dependencies = [ 1889 | "cfg-if", 1890 | "generator", 1891 | "scoped-tls", 1892 | "tracing", 1893 | "tracing-subscriber", 1894 | ] 1895 | 1896 | [[package]] 1897 | name = "matchers" 1898 | version = "0.1.0" 1899 | source = "registry+https://github.com/rust-lang/crates.io-index" 1900 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1901 | dependencies = [ 1902 | "regex-automata 0.1.10", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "md-5" 1907 | version = "0.10.6" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 1910 | dependencies = [ 1911 | "cfg-if", 1912 | "digest", 1913 | ] 1914 | 1915 | [[package]] 1916 | name = "memchr" 1917 | version = "2.7.4" 1918 | source = "registry+https://github.com/rust-lang/crates.io-index" 1919 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1920 | 1921 | [[package]] 1922 | name = "mime" 1923 | version = "0.3.17" 1924 | source = "registry+https://github.com/rust-lang/crates.io-index" 1925 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1926 | 1927 | [[package]] 1928 | name = "minecraft_folder_path" 1929 | version = "0.1.2" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "d60a6352e005f1f86008644a9fe336a66f74c94428182162cc69eb8c6fff458d" 1932 | 1933 | [[package]] 1934 | name = "minimal-lexical" 1935 | version = "0.2.1" 1936 | source = "registry+https://github.com/rust-lang/crates.io-index" 1937 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1938 | 1939 | [[package]] 1940 | name = "miniz_oxide" 1941 | version = "0.8.8" 1942 | source = "registry+https://github.com/rust-lang/crates.io-index" 1943 | checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 1944 | dependencies = [ 1945 | "adler2", 1946 | ] 1947 | 1948 | [[package]] 1949 | name = "mio" 1950 | version = "1.0.3" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1953 | dependencies = [ 1954 | "libc", 1955 | "wasi 0.11.0+wasi-snapshot-preview1", 1956 | "windows-sys 0.52.0", 1957 | ] 1958 | 1959 | [[package]] 1960 | name = "moka" 1961 | version = "0.12.10" 1962 | source = "registry+https://github.com/rust-lang/crates.io-index" 1963 | checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" 1964 | dependencies = [ 1965 | "crossbeam-channel", 1966 | "crossbeam-epoch", 1967 | "crossbeam-utils", 1968 | "loom", 1969 | "parking_lot", 1970 | "portable-atomic", 1971 | "rustc_version", 1972 | "smallvec", 1973 | "tagptr", 1974 | "thiserror 1.0.69", 1975 | "uuid", 1976 | ] 1977 | 1978 | [[package]] 1979 | name = "nix" 1980 | version = "0.29.0" 1981 | source = "registry+https://github.com/rust-lang/crates.io-index" 1982 | checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 1983 | dependencies = [ 1984 | "bitflags", 1985 | "cfg-if", 1986 | "cfg_aliases", 1987 | "libc", 1988 | ] 1989 | 1990 | [[package]] 1991 | name = "nohash-hasher" 1992 | version = "0.2.0" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" 1995 | 1996 | [[package]] 1997 | name = "nom" 1998 | version = "7.1.3" 1999 | source = "registry+https://github.com/rust-lang/crates.io-index" 2000 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2001 | dependencies = [ 2002 | "memchr", 2003 | "minimal-lexical", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "nonmax" 2008 | version = "0.5.5" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" 2011 | 2012 | [[package]] 2013 | name = "nu-ansi-term" 2014 | version = "0.46.0" 2015 | source = "registry+https://github.com/rust-lang/crates.io-index" 2016 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 2017 | dependencies = [ 2018 | "overload", 2019 | "winapi", 2020 | ] 2021 | 2022 | [[package]] 2023 | name = "num" 2024 | version = "0.4.3" 2025 | source = "registry+https://github.com/rust-lang/crates.io-index" 2026 | checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" 2027 | dependencies = [ 2028 | "num-bigint", 2029 | "num-complex", 2030 | "num-integer", 2031 | "num-iter", 2032 | "num-rational", 2033 | "num-traits", 2034 | ] 2035 | 2036 | [[package]] 2037 | name = "num-bigint" 2038 | version = "0.4.6" 2039 | source = "registry+https://github.com/rust-lang/crates.io-index" 2040 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 2041 | dependencies = [ 2042 | "num-integer", 2043 | "num-traits", 2044 | ] 2045 | 2046 | [[package]] 2047 | name = "num-bigint-dig" 2048 | version = "0.8.4" 2049 | source = "registry+https://github.com/rust-lang/crates.io-index" 2050 | checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 2051 | dependencies = [ 2052 | "byteorder", 2053 | "lazy_static", 2054 | "libm", 2055 | "num-integer", 2056 | "num-iter", 2057 | "num-traits", 2058 | "rand 0.8.5", 2059 | "smallvec", 2060 | "zeroize", 2061 | ] 2062 | 2063 | [[package]] 2064 | name = "num-complex" 2065 | version = "0.4.6" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" 2068 | dependencies = [ 2069 | "num-traits", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "num-format" 2074 | version = "0.4.4" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" 2077 | dependencies = [ 2078 | "arrayvec", 2079 | "itoa", 2080 | ] 2081 | 2082 | [[package]] 2083 | name = "num-integer" 2084 | version = "0.1.46" 2085 | source = "registry+https://github.com/rust-lang/crates.io-index" 2086 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2087 | dependencies = [ 2088 | "num-traits", 2089 | ] 2090 | 2091 | [[package]] 2092 | name = "num-iter" 2093 | version = "0.1.45" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 2096 | dependencies = [ 2097 | "autocfg", 2098 | "num-integer", 2099 | "num-traits", 2100 | ] 2101 | 2102 | [[package]] 2103 | name = "num-rational" 2104 | version = "0.4.2" 2105 | source = "registry+https://github.com/rust-lang/crates.io-index" 2106 | checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 2107 | dependencies = [ 2108 | "num-bigint", 2109 | "num-integer", 2110 | "num-traits", 2111 | ] 2112 | 2113 | [[package]] 2114 | name = "num-traits" 2115 | version = "0.2.19" 2116 | source = "registry+https://github.com/rust-lang/crates.io-index" 2117 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2118 | dependencies = [ 2119 | "autocfg", 2120 | "libm", 2121 | ] 2122 | 2123 | [[package]] 2124 | name = "object" 2125 | version = "0.36.7" 2126 | source = "registry+https://github.com/rust-lang/crates.io-index" 2127 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 2128 | dependencies = [ 2129 | "memchr", 2130 | ] 2131 | 2132 | [[package]] 2133 | name = "once_cell" 2134 | version = "1.21.3" 2135 | source = "registry+https://github.com/rust-lang/crates.io-index" 2136 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2137 | dependencies = [ 2138 | "critical-section", 2139 | "portable-atomic", 2140 | ] 2141 | 2142 | [[package]] 2143 | name = "overload" 2144 | version = "0.1.1" 2145 | source = "registry+https://github.com/rust-lang/crates.io-index" 2146 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 2147 | 2148 | [[package]] 2149 | name = "parking" 2150 | version = "2.2.1" 2151 | source = "registry+https://github.com/rust-lang/crates.io-index" 2152 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2153 | 2154 | [[package]] 2155 | name = "parking_lot" 2156 | version = "0.12.3" 2157 | source = "registry+https://github.com/rust-lang/crates.io-index" 2158 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 2159 | dependencies = [ 2160 | "lock_api", 2161 | "parking_lot_core", 2162 | ] 2163 | 2164 | [[package]] 2165 | name = "parking_lot_core" 2166 | version = "0.9.10" 2167 | source = "registry+https://github.com/rust-lang/crates.io-index" 2168 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 2169 | dependencies = [ 2170 | "cfg-if", 2171 | "libc", 2172 | "redox_syscall", 2173 | "smallvec", 2174 | "windows-targets 0.52.6", 2175 | ] 2176 | 2177 | [[package]] 2178 | name = "paste" 2179 | version = "1.0.15" 2180 | source = "registry+https://github.com/rust-lang/crates.io-index" 2181 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2182 | 2183 | [[package]] 2184 | name = "pem-rfc7468" 2185 | version = "0.7.0" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 2188 | dependencies = [ 2189 | "base64ct", 2190 | ] 2191 | 2192 | [[package]] 2193 | name = "percent-encoding" 2194 | version = "2.3.1" 2195 | source = "registry+https://github.com/rust-lang/crates.io-index" 2196 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 2197 | 2198 | [[package]] 2199 | name = "pin-project" 2200 | version = "1.1.10" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2203 | dependencies = [ 2204 | "pin-project-internal", 2205 | ] 2206 | 2207 | [[package]] 2208 | name = "pin-project-internal" 2209 | version = "1.1.10" 2210 | source = "registry+https://github.com/rust-lang/crates.io-index" 2211 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2212 | dependencies = [ 2213 | "proc-macro2", 2214 | "quote", 2215 | "syn", 2216 | ] 2217 | 2218 | [[package]] 2219 | name = "pin-project-lite" 2220 | version = "0.2.16" 2221 | source = "registry+https://github.com/rust-lang/crates.io-index" 2222 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2223 | 2224 | [[package]] 2225 | name = "pin-utils" 2226 | version = "0.1.0" 2227 | source = "registry+https://github.com/rust-lang/crates.io-index" 2228 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2229 | 2230 | [[package]] 2231 | name = "pkcs1" 2232 | version = "0.7.5" 2233 | source = "registry+https://github.com/rust-lang/crates.io-index" 2234 | checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 2235 | dependencies = [ 2236 | "der", 2237 | "pkcs8", 2238 | "spki", 2239 | ] 2240 | 2241 | [[package]] 2242 | name = "pkcs8" 2243 | version = "0.10.2" 2244 | source = "registry+https://github.com/rust-lang/crates.io-index" 2245 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2246 | dependencies = [ 2247 | "der", 2248 | "spki", 2249 | ] 2250 | 2251 | [[package]] 2252 | name = "portable-atomic" 2253 | version = "1.11.0" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 2256 | 2257 | [[package]] 2258 | name = "portable-atomic-util" 2259 | version = "0.2.4" 2260 | source = "registry+https://github.com/rust-lang/crates.io-index" 2261 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2262 | dependencies = [ 2263 | "portable-atomic", 2264 | ] 2265 | 2266 | [[package]] 2267 | name = "ppv-lite86" 2268 | version = "0.2.21" 2269 | source = "registry+https://github.com/rust-lang/crates.io-index" 2270 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2271 | dependencies = [ 2272 | "zerocopy", 2273 | ] 2274 | 2275 | [[package]] 2276 | name = "prettyplease" 2277 | version = "0.2.32" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" 2280 | dependencies = [ 2281 | "proc-macro2", 2282 | "syn", 2283 | ] 2284 | 2285 | [[package]] 2286 | name = "proc-macro2" 2287 | version = "1.0.95" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 2290 | dependencies = [ 2291 | "unicode-ident", 2292 | ] 2293 | 2294 | [[package]] 2295 | name = "quinn" 2296 | version = "0.11.7" 2297 | source = "registry+https://github.com/rust-lang/crates.io-index" 2298 | checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" 2299 | dependencies = [ 2300 | "bytes", 2301 | "cfg_aliases", 2302 | "pin-project-lite", 2303 | "quinn-proto", 2304 | "quinn-udp", 2305 | "rustc-hash 2.1.1", 2306 | "rustls", 2307 | "socket2", 2308 | "thiserror 2.0.12", 2309 | "tokio", 2310 | "tracing", 2311 | "web-time", 2312 | ] 2313 | 2314 | [[package]] 2315 | name = "quinn-proto" 2316 | version = "0.11.11" 2317 | source = "registry+https://github.com/rust-lang/crates.io-index" 2318 | checksum = "bcbafbbdbb0f638fe3f35f3c56739f77a8a1d070cb25603226c83339b391472b" 2319 | dependencies = [ 2320 | "bytes", 2321 | "getrandom 0.3.2", 2322 | "rand 0.9.1", 2323 | "ring", 2324 | "rustc-hash 2.1.1", 2325 | "rustls", 2326 | "rustls-pki-types", 2327 | "slab", 2328 | "thiserror 2.0.12", 2329 | "tinyvec", 2330 | "tracing", 2331 | "web-time", 2332 | ] 2333 | 2334 | [[package]] 2335 | name = "quinn-udp" 2336 | version = "0.5.12" 2337 | source = "registry+https://github.com/rust-lang/crates.io-index" 2338 | checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" 2339 | dependencies = [ 2340 | "cfg_aliases", 2341 | "libc", 2342 | "once_cell", 2343 | "socket2", 2344 | "tracing", 2345 | "windows-sys 0.59.0", 2346 | ] 2347 | 2348 | [[package]] 2349 | name = "quote" 2350 | version = "1.0.40" 2351 | source = "registry+https://github.com/rust-lang/crates.io-index" 2352 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 2353 | dependencies = [ 2354 | "proc-macro2", 2355 | ] 2356 | 2357 | [[package]] 2358 | name = "r-efi" 2359 | version = "5.2.0" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 2362 | 2363 | [[package]] 2364 | name = "rand" 2365 | version = "0.8.5" 2366 | source = "registry+https://github.com/rust-lang/crates.io-index" 2367 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2368 | dependencies = [ 2369 | "libc", 2370 | "rand_chacha 0.3.1", 2371 | "rand_core 0.6.4", 2372 | ] 2373 | 2374 | [[package]] 2375 | name = "rand" 2376 | version = "0.9.1" 2377 | source = "registry+https://github.com/rust-lang/crates.io-index" 2378 | checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" 2379 | dependencies = [ 2380 | "rand_chacha 0.9.0", 2381 | "rand_core 0.9.3", 2382 | ] 2383 | 2384 | [[package]] 2385 | name = "rand_chacha" 2386 | version = "0.3.1" 2387 | source = "registry+https://github.com/rust-lang/crates.io-index" 2388 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2389 | dependencies = [ 2390 | "ppv-lite86", 2391 | "rand_core 0.6.4", 2392 | ] 2393 | 2394 | [[package]] 2395 | name = "rand_chacha" 2396 | version = "0.9.0" 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" 2398 | checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2399 | dependencies = [ 2400 | "ppv-lite86", 2401 | "rand_core 0.9.3", 2402 | ] 2403 | 2404 | [[package]] 2405 | name = "rand_core" 2406 | version = "0.6.4" 2407 | source = "registry+https://github.com/rust-lang/crates.io-index" 2408 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2409 | dependencies = [ 2410 | "getrandom 0.2.16", 2411 | ] 2412 | 2413 | [[package]] 2414 | name = "rand_core" 2415 | version = "0.9.3" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 2418 | dependencies = [ 2419 | "getrandom 0.3.2", 2420 | ] 2421 | 2422 | [[package]] 2423 | name = "redox_syscall" 2424 | version = "0.5.12" 2425 | source = "registry+https://github.com/rust-lang/crates.io-index" 2426 | checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" 2427 | dependencies = [ 2428 | "bitflags", 2429 | ] 2430 | 2431 | [[package]] 2432 | name = "regex" 2433 | version = "1.11.1" 2434 | source = "registry+https://github.com/rust-lang/crates.io-index" 2435 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 2436 | dependencies = [ 2437 | "aho-corasick", 2438 | "memchr", 2439 | "regex-automata 0.4.9", 2440 | "regex-syntax 0.8.5", 2441 | ] 2442 | 2443 | [[package]] 2444 | name = "regex-automata" 2445 | version = "0.1.10" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2448 | dependencies = [ 2449 | "regex-syntax 0.6.29", 2450 | ] 2451 | 2452 | [[package]] 2453 | name = "regex-automata" 2454 | version = "0.4.9" 2455 | source = "registry+https://github.com/rust-lang/crates.io-index" 2456 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 2457 | dependencies = [ 2458 | "aho-corasick", 2459 | "memchr", 2460 | "regex-syntax 0.8.5", 2461 | ] 2462 | 2463 | [[package]] 2464 | name = "regex-syntax" 2465 | version = "0.6.29" 2466 | source = "registry+https://github.com/rust-lang/crates.io-index" 2467 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 2468 | 2469 | [[package]] 2470 | name = "regex-syntax" 2471 | version = "0.8.5" 2472 | source = "registry+https://github.com/rust-lang/crates.io-index" 2473 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 2474 | 2475 | [[package]] 2476 | name = "reqwest" 2477 | version = "0.12.15" 2478 | source = "registry+https://github.com/rust-lang/crates.io-index" 2479 | checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" 2480 | dependencies = [ 2481 | "base64", 2482 | "bytes", 2483 | "futures-core", 2484 | "futures-util", 2485 | "http", 2486 | "http-body", 2487 | "http-body-util", 2488 | "hyper", 2489 | "hyper-rustls", 2490 | "hyper-util", 2491 | "ipnet", 2492 | "js-sys", 2493 | "log", 2494 | "mime", 2495 | "once_cell", 2496 | "percent-encoding", 2497 | "pin-project-lite", 2498 | "quinn", 2499 | "rustls", 2500 | "rustls-pemfile", 2501 | "rustls-pki-types", 2502 | "serde", 2503 | "serde_json", 2504 | "serde_urlencoded", 2505 | "sync_wrapper", 2506 | "tokio", 2507 | "tokio-rustls", 2508 | "tokio-util", 2509 | "tower", 2510 | "tower-service", 2511 | "url", 2512 | "wasm-bindgen", 2513 | "wasm-bindgen-futures", 2514 | "wasm-streams", 2515 | "web-sys", 2516 | "webpki-roots 0.26.11", 2517 | "windows-registry", 2518 | ] 2519 | 2520 | [[package]] 2521 | name = "resolv-conf" 2522 | version = "0.7.3" 2523 | source = "registry+https://github.com/rust-lang/crates.io-index" 2524 | checksum = "fc7c8f7f733062b66dc1c63f9db168ac0b97a9210e247fa90fdc9ad08f51b302" 2525 | 2526 | [[package]] 2527 | name = "ring" 2528 | version = "0.17.14" 2529 | source = "registry+https://github.com/rust-lang/crates.io-index" 2530 | checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2531 | dependencies = [ 2532 | "cc", 2533 | "cfg-if", 2534 | "getrandom 0.2.16", 2535 | "libc", 2536 | "untrusted", 2537 | "windows-sys 0.52.0", 2538 | ] 2539 | 2540 | [[package]] 2541 | name = "rsa" 2542 | version = "0.9.8" 2543 | source = "registry+https://github.com/rust-lang/crates.io-index" 2544 | checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" 2545 | dependencies = [ 2546 | "const-oid", 2547 | "digest", 2548 | "num-bigint-dig", 2549 | "num-integer", 2550 | "num-traits", 2551 | "pkcs1", 2552 | "pkcs8", 2553 | "rand_core 0.6.4", 2554 | "sha2", 2555 | "signature", 2556 | "spki", 2557 | "subtle", 2558 | "zeroize", 2559 | ] 2560 | 2561 | [[package]] 2562 | name = "rsa_public_encrypt_pkcs1" 2563 | version = "0.4.0" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "b3e9243a1f8b312c5535c09de102cc061416515201b194ee4f0a9a76da20ebf4" 2566 | dependencies = [ 2567 | "num", 2568 | "rand 0.8.5", 2569 | "simple_asn1", 2570 | ] 2571 | 2572 | [[package]] 2573 | name = "rustc-demangle" 2574 | version = "0.1.24" 2575 | source = "registry+https://github.com/rust-lang/crates.io-index" 2576 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2577 | 2578 | [[package]] 2579 | name = "rustc-hash" 2580 | version = "1.1.0" 2581 | source = "registry+https://github.com/rust-lang/crates.io-index" 2582 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2583 | 2584 | [[package]] 2585 | name = "rustc-hash" 2586 | version = "2.1.1" 2587 | source = "registry+https://github.com/rust-lang/crates.io-index" 2588 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2589 | 2590 | [[package]] 2591 | name = "rustc_version" 2592 | version = "0.4.1" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2595 | dependencies = [ 2596 | "semver", 2597 | ] 2598 | 2599 | [[package]] 2600 | name = "rustix" 2601 | version = "1.0.7" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" 2604 | dependencies = [ 2605 | "bitflags", 2606 | "errno", 2607 | "libc", 2608 | "linux-raw-sys", 2609 | "windows-sys 0.59.0", 2610 | ] 2611 | 2612 | [[package]] 2613 | name = "rustls" 2614 | version = "0.23.27" 2615 | source = "registry+https://github.com/rust-lang/crates.io-index" 2616 | checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" 2617 | dependencies = [ 2618 | "once_cell", 2619 | "ring", 2620 | "rustls-pki-types", 2621 | "rustls-webpki", 2622 | "subtle", 2623 | "zeroize", 2624 | ] 2625 | 2626 | [[package]] 2627 | name = "rustls-pemfile" 2628 | version = "2.2.0" 2629 | source = "registry+https://github.com/rust-lang/crates.io-index" 2630 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 2631 | dependencies = [ 2632 | "rustls-pki-types", 2633 | ] 2634 | 2635 | [[package]] 2636 | name = "rustls-pki-types" 2637 | version = "1.12.0" 2638 | source = "registry+https://github.com/rust-lang/crates.io-index" 2639 | checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 2640 | dependencies = [ 2641 | "web-time", 2642 | "zeroize", 2643 | ] 2644 | 2645 | [[package]] 2646 | name = "rustls-webpki" 2647 | version = "0.103.2" 2648 | source = "registry+https://github.com/rust-lang/crates.io-index" 2649 | checksum = "7149975849f1abb3832b246010ef62ccc80d3a76169517ada7188252b9cfb437" 2650 | dependencies = [ 2651 | "ring", 2652 | "rustls-pki-types", 2653 | "untrusted", 2654 | ] 2655 | 2656 | [[package]] 2657 | name = "rustversion" 2658 | version = "1.0.20" 2659 | source = "registry+https://github.com/rust-lang/crates.io-index" 2660 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 2661 | 2662 | [[package]] 2663 | name = "ryu" 2664 | version = "1.0.20" 2665 | source = "registry+https://github.com/rust-lang/crates.io-index" 2666 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 2667 | 2668 | [[package]] 2669 | name = "scoped-tls" 2670 | version = "1.0.1" 2671 | source = "registry+https://github.com/rust-lang/crates.io-index" 2672 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2673 | 2674 | [[package]] 2675 | name = "scopeguard" 2676 | version = "1.2.0" 2677 | source = "registry+https://github.com/rust-lang/crates.io-index" 2678 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2679 | 2680 | [[package]] 2681 | name = "semver" 2682 | version = "1.0.26" 2683 | source = "registry+https://github.com/rust-lang/crates.io-index" 2684 | checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 2685 | 2686 | [[package]] 2687 | name = "serde" 2688 | version = "1.0.219" 2689 | source = "registry+https://github.com/rust-lang/crates.io-index" 2690 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 2691 | dependencies = [ 2692 | "serde_derive", 2693 | ] 2694 | 2695 | [[package]] 2696 | name = "serde_derive" 2697 | version = "1.0.219" 2698 | source = "registry+https://github.com/rust-lang/crates.io-index" 2699 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 2700 | dependencies = [ 2701 | "proc-macro2", 2702 | "quote", 2703 | "syn", 2704 | ] 2705 | 2706 | [[package]] 2707 | name = "serde_json" 2708 | version = "1.0.140" 2709 | source = "registry+https://github.com/rust-lang/crates.io-index" 2710 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 2711 | dependencies = [ 2712 | "itoa", 2713 | "memchr", 2714 | "ryu", 2715 | "serde", 2716 | ] 2717 | 2718 | [[package]] 2719 | name = "serde_urlencoded" 2720 | version = "0.7.1" 2721 | source = "registry+https://github.com/rust-lang/crates.io-index" 2722 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2723 | dependencies = [ 2724 | "form_urlencoded", 2725 | "itoa", 2726 | "ryu", 2727 | "serde", 2728 | ] 2729 | 2730 | [[package]] 2731 | name = "sha-1" 2732 | version = "0.10.1" 2733 | source = "registry+https://github.com/rust-lang/crates.io-index" 2734 | checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" 2735 | dependencies = [ 2736 | "cfg-if", 2737 | "cpufeatures", 2738 | "digest", 2739 | ] 2740 | 2741 | [[package]] 2742 | name = "sha2" 2743 | version = "0.10.9" 2744 | source = "registry+https://github.com/rust-lang/crates.io-index" 2745 | checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 2746 | dependencies = [ 2747 | "cfg-if", 2748 | "cpufeatures", 2749 | "digest", 2750 | ] 2751 | 2752 | [[package]] 2753 | name = "sharded-slab" 2754 | version = "0.1.7" 2755 | source = "registry+https://github.com/rust-lang/crates.io-index" 2756 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2757 | dependencies = [ 2758 | "lazy_static", 2759 | ] 2760 | 2761 | [[package]] 2762 | name = "shlex" 2763 | version = "1.3.0" 2764 | source = "registry+https://github.com/rust-lang/crates.io-index" 2765 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2766 | 2767 | [[package]] 2768 | name = "signal-hook-registry" 2769 | version = "1.4.5" 2770 | source = "registry+https://github.com/rust-lang/crates.io-index" 2771 | checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" 2772 | dependencies = [ 2773 | "libc", 2774 | ] 2775 | 2776 | [[package]] 2777 | name = "signature" 2778 | version = "2.2.0" 2779 | source = "registry+https://github.com/rust-lang/crates.io-index" 2780 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 2781 | dependencies = [ 2782 | "digest", 2783 | "rand_core 0.6.4", 2784 | ] 2785 | 2786 | [[package]] 2787 | name = "simd_cesu8" 2788 | version = "1.0.1" 2789 | source = "registry+https://github.com/rust-lang/crates.io-index" 2790 | checksum = "7c14f02c32cc4ef5068b0e15bee4513942f59165add7778a518b4d507b3b97ab" 2791 | dependencies = [ 2792 | "rustc_version", 2793 | "simdutf8", 2794 | ] 2795 | 2796 | [[package]] 2797 | name = "simdnbt" 2798 | version = "0.7.1" 2799 | source = "registry+https://github.com/rust-lang/crates.io-index" 2800 | checksum = "960b88bb7ea0984fbba94e53f1a2181ba6654e68a0eb53e45843e0eed402f10e" 2801 | dependencies = [ 2802 | "byteorder", 2803 | "flate2", 2804 | "simd_cesu8", 2805 | "simdnbt-derive", 2806 | "thiserror 2.0.12", 2807 | ] 2808 | 2809 | [[package]] 2810 | name = "simdnbt-derive" 2811 | version = "0.7.0" 2812 | source = "registry+https://github.com/rust-lang/crates.io-index" 2813 | checksum = "dd1fe91ba0e4ee5cd6e565153b363fe06b19357ce9af07cc54371c450275d26e" 2814 | dependencies = [ 2815 | "proc-macro2", 2816 | "quote", 2817 | "syn", 2818 | ] 2819 | 2820 | [[package]] 2821 | name = "simdutf8" 2822 | version = "0.1.5" 2823 | source = "registry+https://github.com/rust-lang/crates.io-index" 2824 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 2825 | 2826 | [[package]] 2827 | name = "simple_asn1" 2828 | version = "0.5.4" 2829 | source = "registry+https://github.com/rust-lang/crates.io-index" 2830 | checksum = "8eb4ea60fb301dc81dfc113df680571045d375ab7345d171c5dc7d7e13107a80" 2831 | dependencies = [ 2832 | "chrono", 2833 | "num-bigint", 2834 | "num-traits", 2835 | "thiserror 1.0.69", 2836 | ] 2837 | 2838 | [[package]] 2839 | name = "slab" 2840 | version = "0.4.9" 2841 | source = "registry+https://github.com/rust-lang/crates.io-index" 2842 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2843 | dependencies = [ 2844 | "autocfg", 2845 | ] 2846 | 2847 | [[package]] 2848 | name = "smallvec" 2849 | version = "1.15.0" 2850 | source = "registry+https://github.com/rust-lang/crates.io-index" 2851 | checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 2852 | 2853 | [[package]] 2854 | name = "smol_str" 2855 | version = "0.2.2" 2856 | source = "registry+https://github.com/rust-lang/crates.io-index" 2857 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 2858 | dependencies = [ 2859 | "serde", 2860 | ] 2861 | 2862 | [[package]] 2863 | name = "socket2" 2864 | version = "0.5.9" 2865 | source = "registry+https://github.com/rust-lang/crates.io-index" 2866 | checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" 2867 | dependencies = [ 2868 | "libc", 2869 | "windows-sys 0.52.0", 2870 | ] 2871 | 2872 | [[package]] 2873 | name = "socks5-impl" 2874 | version = "0.6.2" 2875 | source = "registry+https://github.com/rust-lang/crates.io-index" 2876 | checksum = "4b7bef5922371adf8b6f1dd0b9fe3d86c77c22686e8f4236b778ed0215cdcd9b" 2877 | dependencies = [ 2878 | "as-any", 2879 | "async-trait", 2880 | "byteorder", 2881 | "bytes", 2882 | "percent-encoding", 2883 | "thiserror 2.0.12", 2884 | "tokio", 2885 | ] 2886 | 2887 | [[package]] 2888 | name = "spin" 2889 | version = "0.9.8" 2890 | source = "registry+https://github.com/rust-lang/crates.io-index" 2891 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2892 | dependencies = [ 2893 | "portable-atomic", 2894 | ] 2895 | 2896 | [[package]] 2897 | name = "spki" 2898 | version = "0.7.3" 2899 | source = "registry+https://github.com/rust-lang/crates.io-index" 2900 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 2901 | dependencies = [ 2902 | "base64ct", 2903 | "der", 2904 | ] 2905 | 2906 | [[package]] 2907 | name = "stable_deref_trait" 2908 | version = "1.2.0" 2909 | source = "registry+https://github.com/rust-lang/crates.io-index" 2910 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2911 | 2912 | [[package]] 2913 | name = "static_assertions" 2914 | version = "1.1.0" 2915 | source = "registry+https://github.com/rust-lang/crates.io-index" 2916 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2917 | 2918 | [[package]] 2919 | name = "subtle" 2920 | version = "2.6.1" 2921 | source = "registry+https://github.com/rust-lang/crates.io-index" 2922 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2923 | 2924 | [[package]] 2925 | name = "syn" 2926 | version = "2.0.101" 2927 | source = "registry+https://github.com/rust-lang/crates.io-index" 2928 | checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 2929 | dependencies = [ 2930 | "proc-macro2", 2931 | "quote", 2932 | "unicode-ident", 2933 | ] 2934 | 2935 | [[package]] 2936 | name = "sync_wrapper" 2937 | version = "1.0.2" 2938 | source = "registry+https://github.com/rust-lang/crates.io-index" 2939 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 2940 | dependencies = [ 2941 | "futures-core", 2942 | ] 2943 | 2944 | [[package]] 2945 | name = "synstructure" 2946 | version = "0.13.2" 2947 | source = "registry+https://github.com/rust-lang/crates.io-index" 2948 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2949 | dependencies = [ 2950 | "proc-macro2", 2951 | "quote", 2952 | "syn", 2953 | ] 2954 | 2955 | [[package]] 2956 | name = "tagptr" 2957 | version = "0.2.0" 2958 | source = "registry+https://github.com/rust-lang/crates.io-index" 2959 | checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 2960 | 2961 | [[package]] 2962 | name = "terminal_size" 2963 | version = "0.4.2" 2964 | source = "registry+https://github.com/rust-lang/crates.io-index" 2965 | checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" 2966 | dependencies = [ 2967 | "rustix", 2968 | "windows-sys 0.59.0", 2969 | ] 2970 | 2971 | [[package]] 2972 | name = "thiserror" 2973 | version = "1.0.69" 2974 | source = "registry+https://github.com/rust-lang/crates.io-index" 2975 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2976 | dependencies = [ 2977 | "thiserror-impl 1.0.69", 2978 | ] 2979 | 2980 | [[package]] 2981 | name = "thiserror" 2982 | version = "2.0.12" 2983 | source = "registry+https://github.com/rust-lang/crates.io-index" 2984 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 2985 | dependencies = [ 2986 | "thiserror-impl 2.0.12", 2987 | ] 2988 | 2989 | [[package]] 2990 | name = "thiserror-impl" 2991 | version = "1.0.69" 2992 | source = "registry+https://github.com/rust-lang/crates.io-index" 2993 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2994 | dependencies = [ 2995 | "proc-macro2", 2996 | "quote", 2997 | "syn", 2998 | ] 2999 | 3000 | [[package]] 3001 | name = "thiserror-impl" 3002 | version = "2.0.12" 3003 | source = "registry+https://github.com/rust-lang/crates.io-index" 3004 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 3005 | dependencies = [ 3006 | "proc-macro2", 3007 | "quote", 3008 | "syn", 3009 | ] 3010 | 3011 | [[package]] 3012 | name = "thread_local" 3013 | version = "1.1.8" 3014 | source = "registry+https://github.com/rust-lang/crates.io-index" 3015 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 3016 | dependencies = [ 3017 | "cfg-if", 3018 | "once_cell", 3019 | ] 3020 | 3021 | [[package]] 3022 | name = "tinystr" 3023 | version = "0.7.6" 3024 | source = "registry+https://github.com/rust-lang/crates.io-index" 3025 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 3026 | dependencies = [ 3027 | "displaydoc", 3028 | "zerovec", 3029 | ] 3030 | 3031 | [[package]] 3032 | name = "tinyvec" 3033 | version = "1.9.0" 3034 | source = "registry+https://github.com/rust-lang/crates.io-index" 3035 | checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 3036 | dependencies = [ 3037 | "tinyvec_macros", 3038 | ] 3039 | 3040 | [[package]] 3041 | name = "tinyvec_macros" 3042 | version = "0.1.1" 3043 | source = "registry+https://github.com/rust-lang/crates.io-index" 3044 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3045 | 3046 | [[package]] 3047 | name = "tokio" 3048 | version = "1.45.0" 3049 | source = "registry+https://github.com/rust-lang/crates.io-index" 3050 | checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" 3051 | dependencies = [ 3052 | "backtrace", 3053 | "bytes", 3054 | "libc", 3055 | "mio", 3056 | "pin-project-lite", 3057 | "signal-hook-registry", 3058 | "socket2", 3059 | "tokio-macros", 3060 | "windows-sys 0.52.0", 3061 | ] 3062 | 3063 | [[package]] 3064 | name = "tokio-macros" 3065 | version = "2.5.0" 3066 | source = "registry+https://github.com/rust-lang/crates.io-index" 3067 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 3068 | dependencies = [ 3069 | "proc-macro2", 3070 | "quote", 3071 | "syn", 3072 | ] 3073 | 3074 | [[package]] 3075 | name = "tokio-rustls" 3076 | version = "0.26.2" 3077 | source = "registry+https://github.com/rust-lang/crates.io-index" 3078 | checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 3079 | dependencies = [ 3080 | "rustls", 3081 | "tokio", 3082 | ] 3083 | 3084 | [[package]] 3085 | name = "tokio-util" 3086 | version = "0.7.15" 3087 | source = "registry+https://github.com/rust-lang/crates.io-index" 3088 | checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 3089 | dependencies = [ 3090 | "bytes", 3091 | "futures-core", 3092 | "futures-sink", 3093 | "pin-project-lite", 3094 | "tokio", 3095 | ] 3096 | 3097 | [[package]] 3098 | name = "toml_datetime" 3099 | version = "0.6.9" 3100 | source = "registry+https://github.com/rust-lang/crates.io-index" 3101 | checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" 3102 | 3103 | [[package]] 3104 | name = "toml_edit" 3105 | version = "0.22.26" 3106 | source = "registry+https://github.com/rust-lang/crates.io-index" 3107 | checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" 3108 | dependencies = [ 3109 | "indexmap", 3110 | "toml_datetime", 3111 | "winnow", 3112 | ] 3113 | 3114 | [[package]] 3115 | name = "tower" 3116 | version = "0.5.2" 3117 | source = "registry+https://github.com/rust-lang/crates.io-index" 3118 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 3119 | dependencies = [ 3120 | "futures-core", 3121 | "futures-util", 3122 | "pin-project-lite", 3123 | "sync_wrapper", 3124 | "tokio", 3125 | "tower-layer", 3126 | "tower-service", 3127 | ] 3128 | 3129 | [[package]] 3130 | name = "tower-layer" 3131 | version = "0.3.3" 3132 | source = "registry+https://github.com/rust-lang/crates.io-index" 3133 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3134 | 3135 | [[package]] 3136 | name = "tower-service" 3137 | version = "0.3.3" 3138 | source = "registry+https://github.com/rust-lang/crates.io-index" 3139 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3140 | 3141 | [[package]] 3142 | name = "tracing" 3143 | version = "0.1.41" 3144 | source = "registry+https://github.com/rust-lang/crates.io-index" 3145 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3146 | dependencies = [ 3147 | "pin-project-lite", 3148 | "tracing-attributes", 3149 | "tracing-core", 3150 | ] 3151 | 3152 | [[package]] 3153 | name = "tracing-attributes" 3154 | version = "0.1.28" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 3157 | dependencies = [ 3158 | "proc-macro2", 3159 | "quote", 3160 | "syn", 3161 | ] 3162 | 3163 | [[package]] 3164 | name = "tracing-core" 3165 | version = "0.1.33" 3166 | source = "registry+https://github.com/rust-lang/crates.io-index" 3167 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 3168 | dependencies = [ 3169 | "once_cell", 3170 | "valuable", 3171 | ] 3172 | 3173 | [[package]] 3174 | name = "tracing-log" 3175 | version = "0.2.0" 3176 | source = "registry+https://github.com/rust-lang/crates.io-index" 3177 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3178 | dependencies = [ 3179 | "log", 3180 | "once_cell", 3181 | "tracing-core", 3182 | ] 3183 | 3184 | [[package]] 3185 | name = "tracing-oslog" 3186 | version = "0.2.0" 3187 | source = "registry+https://github.com/rust-lang/crates.io-index" 3188 | checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e" 3189 | dependencies = [ 3190 | "bindgen", 3191 | "cc", 3192 | "cfg-if", 3193 | "once_cell", 3194 | "parking_lot", 3195 | "tracing-core", 3196 | "tracing-subscriber", 3197 | ] 3198 | 3199 | [[package]] 3200 | name = "tracing-subscriber" 3201 | version = "0.3.19" 3202 | source = "registry+https://github.com/rust-lang/crates.io-index" 3203 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 3204 | dependencies = [ 3205 | "matchers", 3206 | "nu-ansi-term", 3207 | "once_cell", 3208 | "regex", 3209 | "sharded-slab", 3210 | "smallvec", 3211 | "thread_local", 3212 | "tracing", 3213 | "tracing-core", 3214 | "tracing-log", 3215 | ] 3216 | 3217 | [[package]] 3218 | name = "tracing-wasm" 3219 | version = "0.2.1" 3220 | source = "registry+https://github.com/rust-lang/crates.io-index" 3221 | checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" 3222 | dependencies = [ 3223 | "tracing", 3224 | "tracing-subscriber", 3225 | "wasm-bindgen", 3226 | ] 3227 | 3228 | [[package]] 3229 | name = "try-lock" 3230 | version = "0.2.5" 3231 | source = "registry+https://github.com/rust-lang/crates.io-index" 3232 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3233 | 3234 | [[package]] 3235 | name = "typeid" 3236 | version = "1.0.3" 3237 | source = "registry+https://github.com/rust-lang/crates.io-index" 3238 | checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" 3239 | 3240 | [[package]] 3241 | name = "typenum" 3242 | version = "1.18.0" 3243 | source = "registry+https://github.com/rust-lang/crates.io-index" 3244 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 3245 | 3246 | [[package]] 3247 | name = "unicode-ident" 3248 | version = "1.0.18" 3249 | source = "registry+https://github.com/rust-lang/crates.io-index" 3250 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 3251 | 3252 | [[package]] 3253 | name = "unicode-xid" 3254 | version = "0.2.6" 3255 | source = "registry+https://github.com/rust-lang/crates.io-index" 3256 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3257 | 3258 | [[package]] 3259 | name = "untrusted" 3260 | version = "0.9.0" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3263 | 3264 | [[package]] 3265 | name = "url" 3266 | version = "2.5.4" 3267 | source = "registry+https://github.com/rust-lang/crates.io-index" 3268 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 3269 | dependencies = [ 3270 | "form_urlencoded", 3271 | "idna", 3272 | "percent-encoding", 3273 | ] 3274 | 3275 | [[package]] 3276 | name = "utf16_iter" 3277 | version = "1.0.5" 3278 | source = "registry+https://github.com/rust-lang/crates.io-index" 3279 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 3280 | 3281 | [[package]] 3282 | name = "utf8_iter" 3283 | version = "1.0.4" 3284 | source = "registry+https://github.com/rust-lang/crates.io-index" 3285 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3286 | 3287 | [[package]] 3288 | name = "uuid" 3289 | version = "1.16.0" 3290 | source = "registry+https://github.com/rust-lang/crates.io-index" 3291 | checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" 3292 | dependencies = [ 3293 | "getrandom 0.3.2", 3294 | "js-sys", 3295 | "md-5", 3296 | "serde", 3297 | "wasm-bindgen", 3298 | ] 3299 | 3300 | [[package]] 3301 | name = "valuable" 3302 | version = "0.1.1" 3303 | source = "registry+https://github.com/rust-lang/crates.io-index" 3304 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3305 | 3306 | [[package]] 3307 | name = "variadics_please" 3308 | version = "1.1.0" 3309 | source = "registry+https://github.com/rust-lang/crates.io-index" 3310 | checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" 3311 | dependencies = [ 3312 | "proc-macro2", 3313 | "quote", 3314 | "syn", 3315 | ] 3316 | 3317 | [[package]] 3318 | name = "version_check" 3319 | version = "0.9.5" 3320 | source = "registry+https://github.com/rust-lang/crates.io-index" 3321 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3322 | 3323 | [[package]] 3324 | name = "want" 3325 | version = "0.3.1" 3326 | source = "registry+https://github.com/rust-lang/crates.io-index" 3327 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3328 | dependencies = [ 3329 | "try-lock", 3330 | ] 3331 | 3332 | [[package]] 3333 | name = "wasi" 3334 | version = "0.11.0+wasi-snapshot-preview1" 3335 | source = "registry+https://github.com/rust-lang/crates.io-index" 3336 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3337 | 3338 | [[package]] 3339 | name = "wasi" 3340 | version = "0.14.2+wasi-0.2.4" 3341 | source = "registry+https://github.com/rust-lang/crates.io-index" 3342 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 3343 | dependencies = [ 3344 | "wit-bindgen-rt", 3345 | ] 3346 | 3347 | [[package]] 3348 | name = "wasm-bindgen" 3349 | version = "0.2.100" 3350 | source = "registry+https://github.com/rust-lang/crates.io-index" 3351 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 3352 | dependencies = [ 3353 | "cfg-if", 3354 | "once_cell", 3355 | "rustversion", 3356 | "wasm-bindgen-macro", 3357 | ] 3358 | 3359 | [[package]] 3360 | name = "wasm-bindgen-backend" 3361 | version = "0.2.100" 3362 | source = "registry+https://github.com/rust-lang/crates.io-index" 3363 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 3364 | dependencies = [ 3365 | "bumpalo", 3366 | "log", 3367 | "proc-macro2", 3368 | "quote", 3369 | "syn", 3370 | "wasm-bindgen-shared", 3371 | ] 3372 | 3373 | [[package]] 3374 | name = "wasm-bindgen-futures" 3375 | version = "0.4.50" 3376 | source = "registry+https://github.com/rust-lang/crates.io-index" 3377 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 3378 | dependencies = [ 3379 | "cfg-if", 3380 | "js-sys", 3381 | "once_cell", 3382 | "wasm-bindgen", 3383 | "web-sys", 3384 | ] 3385 | 3386 | [[package]] 3387 | name = "wasm-bindgen-macro" 3388 | version = "0.2.100" 3389 | source = "registry+https://github.com/rust-lang/crates.io-index" 3390 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 3391 | dependencies = [ 3392 | "quote", 3393 | "wasm-bindgen-macro-support", 3394 | ] 3395 | 3396 | [[package]] 3397 | name = "wasm-bindgen-macro-support" 3398 | version = "0.2.100" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 3401 | dependencies = [ 3402 | "proc-macro2", 3403 | "quote", 3404 | "syn", 3405 | "wasm-bindgen-backend", 3406 | "wasm-bindgen-shared", 3407 | ] 3408 | 3409 | [[package]] 3410 | name = "wasm-bindgen-shared" 3411 | version = "0.2.100" 3412 | source = "registry+https://github.com/rust-lang/crates.io-index" 3413 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 3414 | dependencies = [ 3415 | "unicode-ident", 3416 | ] 3417 | 3418 | [[package]] 3419 | name = "wasm-streams" 3420 | version = "0.4.2" 3421 | source = "registry+https://github.com/rust-lang/crates.io-index" 3422 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 3423 | dependencies = [ 3424 | "futures-util", 3425 | "js-sys", 3426 | "wasm-bindgen", 3427 | "wasm-bindgen-futures", 3428 | "web-sys", 3429 | ] 3430 | 3431 | [[package]] 3432 | name = "web-sys" 3433 | version = "0.3.77" 3434 | source = "registry+https://github.com/rust-lang/crates.io-index" 3435 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3436 | dependencies = [ 3437 | "js-sys", 3438 | "wasm-bindgen", 3439 | ] 3440 | 3441 | [[package]] 3442 | name = "web-time" 3443 | version = "1.1.0" 3444 | source = "registry+https://github.com/rust-lang/crates.io-index" 3445 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3446 | dependencies = [ 3447 | "js-sys", 3448 | "wasm-bindgen", 3449 | ] 3450 | 3451 | [[package]] 3452 | name = "webpki-roots" 3453 | version = "0.26.11" 3454 | source = "registry+https://github.com/rust-lang/crates.io-index" 3455 | checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" 3456 | dependencies = [ 3457 | "webpki-roots 1.0.0", 3458 | ] 3459 | 3460 | [[package]] 3461 | name = "webpki-roots" 3462 | version = "1.0.0" 3463 | source = "registry+https://github.com/rust-lang/crates.io-index" 3464 | checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" 3465 | dependencies = [ 3466 | "rustls-pki-types", 3467 | ] 3468 | 3469 | [[package]] 3470 | name = "wgpu-types" 3471 | version = "24.0.0" 3472 | source = "registry+https://github.com/rust-lang/crates.io-index" 3473 | checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" 3474 | dependencies = [ 3475 | "bitflags", 3476 | "js-sys", 3477 | "log", 3478 | "serde", 3479 | "web-sys", 3480 | ] 3481 | 3482 | [[package]] 3483 | name = "widestring" 3484 | version = "1.2.0" 3485 | source = "registry+https://github.com/rust-lang/crates.io-index" 3486 | checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" 3487 | 3488 | [[package]] 3489 | name = "winapi" 3490 | version = "0.3.9" 3491 | source = "registry+https://github.com/rust-lang/crates.io-index" 3492 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3493 | dependencies = [ 3494 | "winapi-i686-pc-windows-gnu", 3495 | "winapi-x86_64-pc-windows-gnu", 3496 | ] 3497 | 3498 | [[package]] 3499 | name = "winapi-i686-pc-windows-gnu" 3500 | version = "0.4.0" 3501 | source = "registry+https://github.com/rust-lang/crates.io-index" 3502 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3503 | 3504 | [[package]] 3505 | name = "winapi-x86_64-pc-windows-gnu" 3506 | version = "0.4.0" 3507 | source = "registry+https://github.com/rust-lang/crates.io-index" 3508 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3509 | 3510 | [[package]] 3511 | name = "windows" 3512 | version = "0.58.0" 3513 | source = "registry+https://github.com/rust-lang/crates.io-index" 3514 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3515 | dependencies = [ 3516 | "windows-core", 3517 | "windows-targets 0.52.6", 3518 | ] 3519 | 3520 | [[package]] 3521 | name = "windows-core" 3522 | version = "0.58.0" 3523 | source = "registry+https://github.com/rust-lang/crates.io-index" 3524 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3525 | dependencies = [ 3526 | "windows-implement", 3527 | "windows-interface", 3528 | "windows-result 0.2.0", 3529 | "windows-strings 0.1.0", 3530 | "windows-targets 0.52.6", 3531 | ] 3532 | 3533 | [[package]] 3534 | name = "windows-implement" 3535 | version = "0.58.0" 3536 | source = "registry+https://github.com/rust-lang/crates.io-index" 3537 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3538 | dependencies = [ 3539 | "proc-macro2", 3540 | "quote", 3541 | "syn", 3542 | ] 3543 | 3544 | [[package]] 3545 | name = "windows-interface" 3546 | version = "0.58.0" 3547 | source = "registry+https://github.com/rust-lang/crates.io-index" 3548 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3549 | dependencies = [ 3550 | "proc-macro2", 3551 | "quote", 3552 | "syn", 3553 | ] 3554 | 3555 | [[package]] 3556 | name = "windows-link" 3557 | version = "0.1.1" 3558 | source = "registry+https://github.com/rust-lang/crates.io-index" 3559 | checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 3560 | 3561 | [[package]] 3562 | name = "windows-registry" 3563 | version = "0.4.0" 3564 | source = "registry+https://github.com/rust-lang/crates.io-index" 3565 | checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" 3566 | dependencies = [ 3567 | "windows-result 0.3.2", 3568 | "windows-strings 0.3.1", 3569 | "windows-targets 0.53.0", 3570 | ] 3571 | 3572 | [[package]] 3573 | name = "windows-result" 3574 | version = "0.2.0" 3575 | source = "registry+https://github.com/rust-lang/crates.io-index" 3576 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3577 | dependencies = [ 3578 | "windows-targets 0.52.6", 3579 | ] 3580 | 3581 | [[package]] 3582 | name = "windows-result" 3583 | version = "0.3.2" 3584 | source = "registry+https://github.com/rust-lang/crates.io-index" 3585 | checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" 3586 | dependencies = [ 3587 | "windows-link", 3588 | ] 3589 | 3590 | [[package]] 3591 | name = "windows-strings" 3592 | version = "0.1.0" 3593 | source = "registry+https://github.com/rust-lang/crates.io-index" 3594 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3595 | dependencies = [ 3596 | "windows-result 0.2.0", 3597 | "windows-targets 0.52.6", 3598 | ] 3599 | 3600 | [[package]] 3601 | name = "windows-strings" 3602 | version = "0.3.1" 3603 | source = "registry+https://github.com/rust-lang/crates.io-index" 3604 | checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" 3605 | dependencies = [ 3606 | "windows-link", 3607 | ] 3608 | 3609 | [[package]] 3610 | name = "windows-sys" 3611 | version = "0.48.0" 3612 | source = "registry+https://github.com/rust-lang/crates.io-index" 3613 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3614 | dependencies = [ 3615 | "windows-targets 0.48.5", 3616 | ] 3617 | 3618 | [[package]] 3619 | name = "windows-sys" 3620 | version = "0.52.0" 3621 | source = "registry+https://github.com/rust-lang/crates.io-index" 3622 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3623 | dependencies = [ 3624 | "windows-targets 0.52.6", 3625 | ] 3626 | 3627 | [[package]] 3628 | name = "windows-sys" 3629 | version = "0.59.0" 3630 | source = "registry+https://github.com/rust-lang/crates.io-index" 3631 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3632 | dependencies = [ 3633 | "windows-targets 0.52.6", 3634 | ] 3635 | 3636 | [[package]] 3637 | name = "windows-targets" 3638 | version = "0.48.5" 3639 | source = "registry+https://github.com/rust-lang/crates.io-index" 3640 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3641 | dependencies = [ 3642 | "windows_aarch64_gnullvm 0.48.5", 3643 | "windows_aarch64_msvc 0.48.5", 3644 | "windows_i686_gnu 0.48.5", 3645 | "windows_i686_msvc 0.48.5", 3646 | "windows_x86_64_gnu 0.48.5", 3647 | "windows_x86_64_gnullvm 0.48.5", 3648 | "windows_x86_64_msvc 0.48.5", 3649 | ] 3650 | 3651 | [[package]] 3652 | name = "windows-targets" 3653 | version = "0.52.6" 3654 | source = "registry+https://github.com/rust-lang/crates.io-index" 3655 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3656 | dependencies = [ 3657 | "windows_aarch64_gnullvm 0.52.6", 3658 | "windows_aarch64_msvc 0.52.6", 3659 | "windows_i686_gnu 0.52.6", 3660 | "windows_i686_gnullvm 0.52.6", 3661 | "windows_i686_msvc 0.52.6", 3662 | "windows_x86_64_gnu 0.52.6", 3663 | "windows_x86_64_gnullvm 0.52.6", 3664 | "windows_x86_64_msvc 0.52.6", 3665 | ] 3666 | 3667 | [[package]] 3668 | name = "windows-targets" 3669 | version = "0.53.0" 3670 | source = "registry+https://github.com/rust-lang/crates.io-index" 3671 | checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 3672 | dependencies = [ 3673 | "windows_aarch64_gnullvm 0.53.0", 3674 | "windows_aarch64_msvc 0.53.0", 3675 | "windows_i686_gnu 0.53.0", 3676 | "windows_i686_gnullvm 0.53.0", 3677 | "windows_i686_msvc 0.53.0", 3678 | "windows_x86_64_gnu 0.53.0", 3679 | "windows_x86_64_gnullvm 0.53.0", 3680 | "windows_x86_64_msvc 0.53.0", 3681 | ] 3682 | 3683 | [[package]] 3684 | name = "windows_aarch64_gnullvm" 3685 | version = "0.48.5" 3686 | source = "registry+https://github.com/rust-lang/crates.io-index" 3687 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3688 | 3689 | [[package]] 3690 | name = "windows_aarch64_gnullvm" 3691 | version = "0.52.6" 3692 | source = "registry+https://github.com/rust-lang/crates.io-index" 3693 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3694 | 3695 | [[package]] 3696 | name = "windows_aarch64_gnullvm" 3697 | version = "0.53.0" 3698 | source = "registry+https://github.com/rust-lang/crates.io-index" 3699 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 3700 | 3701 | [[package]] 3702 | name = "windows_aarch64_msvc" 3703 | version = "0.48.5" 3704 | source = "registry+https://github.com/rust-lang/crates.io-index" 3705 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3706 | 3707 | [[package]] 3708 | name = "windows_aarch64_msvc" 3709 | version = "0.52.6" 3710 | source = "registry+https://github.com/rust-lang/crates.io-index" 3711 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3712 | 3713 | [[package]] 3714 | name = "windows_aarch64_msvc" 3715 | version = "0.53.0" 3716 | source = "registry+https://github.com/rust-lang/crates.io-index" 3717 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 3718 | 3719 | [[package]] 3720 | name = "windows_i686_gnu" 3721 | version = "0.48.5" 3722 | source = "registry+https://github.com/rust-lang/crates.io-index" 3723 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3724 | 3725 | [[package]] 3726 | name = "windows_i686_gnu" 3727 | version = "0.52.6" 3728 | source = "registry+https://github.com/rust-lang/crates.io-index" 3729 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3730 | 3731 | [[package]] 3732 | name = "windows_i686_gnu" 3733 | version = "0.53.0" 3734 | source = "registry+https://github.com/rust-lang/crates.io-index" 3735 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 3736 | 3737 | [[package]] 3738 | name = "windows_i686_gnullvm" 3739 | version = "0.52.6" 3740 | source = "registry+https://github.com/rust-lang/crates.io-index" 3741 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3742 | 3743 | [[package]] 3744 | name = "windows_i686_gnullvm" 3745 | version = "0.53.0" 3746 | source = "registry+https://github.com/rust-lang/crates.io-index" 3747 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 3748 | 3749 | [[package]] 3750 | name = "windows_i686_msvc" 3751 | version = "0.48.5" 3752 | source = "registry+https://github.com/rust-lang/crates.io-index" 3753 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3754 | 3755 | [[package]] 3756 | name = "windows_i686_msvc" 3757 | version = "0.52.6" 3758 | source = "registry+https://github.com/rust-lang/crates.io-index" 3759 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3760 | 3761 | [[package]] 3762 | name = "windows_i686_msvc" 3763 | version = "0.53.0" 3764 | source = "registry+https://github.com/rust-lang/crates.io-index" 3765 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 3766 | 3767 | [[package]] 3768 | name = "windows_x86_64_gnu" 3769 | version = "0.48.5" 3770 | source = "registry+https://github.com/rust-lang/crates.io-index" 3771 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3772 | 3773 | [[package]] 3774 | name = "windows_x86_64_gnu" 3775 | version = "0.52.6" 3776 | source = "registry+https://github.com/rust-lang/crates.io-index" 3777 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3778 | 3779 | [[package]] 3780 | name = "windows_x86_64_gnu" 3781 | version = "0.53.0" 3782 | source = "registry+https://github.com/rust-lang/crates.io-index" 3783 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 3784 | 3785 | [[package]] 3786 | name = "windows_x86_64_gnullvm" 3787 | version = "0.48.5" 3788 | source = "registry+https://github.com/rust-lang/crates.io-index" 3789 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3790 | 3791 | [[package]] 3792 | name = "windows_x86_64_gnullvm" 3793 | version = "0.52.6" 3794 | source = "registry+https://github.com/rust-lang/crates.io-index" 3795 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3796 | 3797 | [[package]] 3798 | name = "windows_x86_64_gnullvm" 3799 | version = "0.53.0" 3800 | source = "registry+https://github.com/rust-lang/crates.io-index" 3801 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 3802 | 3803 | [[package]] 3804 | name = "windows_x86_64_msvc" 3805 | version = "0.48.5" 3806 | source = "registry+https://github.com/rust-lang/crates.io-index" 3807 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3808 | 3809 | [[package]] 3810 | name = "windows_x86_64_msvc" 3811 | version = "0.52.6" 3812 | source = "registry+https://github.com/rust-lang/crates.io-index" 3813 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3814 | 3815 | [[package]] 3816 | name = "windows_x86_64_msvc" 3817 | version = "0.53.0" 3818 | source = "registry+https://github.com/rust-lang/crates.io-index" 3819 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3820 | 3821 | [[package]] 3822 | name = "winnow" 3823 | version = "0.7.10" 3824 | source = "registry+https://github.com/rust-lang/crates.io-index" 3825 | checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" 3826 | dependencies = [ 3827 | "memchr", 3828 | ] 3829 | 3830 | [[package]] 3831 | name = "winreg" 3832 | version = "0.50.0" 3833 | source = "registry+https://github.com/rust-lang/crates.io-index" 3834 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 3835 | dependencies = [ 3836 | "cfg-if", 3837 | "windows-sys 0.48.0", 3838 | ] 3839 | 3840 | [[package]] 3841 | name = "wit-bindgen-rt" 3842 | version = "0.39.0" 3843 | source = "registry+https://github.com/rust-lang/crates.io-index" 3844 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 3845 | dependencies = [ 3846 | "bitflags", 3847 | ] 3848 | 3849 | [[package]] 3850 | name = "write16" 3851 | version = "1.0.0" 3852 | source = "registry+https://github.com/rust-lang/crates.io-index" 3853 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 3854 | 3855 | [[package]] 3856 | name = "writeable" 3857 | version = "0.5.5" 3858 | source = "registry+https://github.com/rust-lang/crates.io-index" 3859 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 3860 | 3861 | [[package]] 3862 | name = "yoke" 3863 | version = "0.7.5" 3864 | source = "registry+https://github.com/rust-lang/crates.io-index" 3865 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 3866 | dependencies = [ 3867 | "serde", 3868 | "stable_deref_trait", 3869 | "yoke-derive", 3870 | "zerofrom", 3871 | ] 3872 | 3873 | [[package]] 3874 | name = "yoke-derive" 3875 | version = "0.7.5" 3876 | source = "registry+https://github.com/rust-lang/crates.io-index" 3877 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 3878 | dependencies = [ 3879 | "proc-macro2", 3880 | "quote", 3881 | "syn", 3882 | "synstructure", 3883 | ] 3884 | 3885 | [[package]] 3886 | name = "zerocopy" 3887 | version = "0.8.25" 3888 | source = "registry+https://github.com/rust-lang/crates.io-index" 3889 | checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" 3890 | dependencies = [ 3891 | "zerocopy-derive", 3892 | ] 3893 | 3894 | [[package]] 3895 | name = "zerocopy-derive" 3896 | version = "0.8.25" 3897 | source = "registry+https://github.com/rust-lang/crates.io-index" 3898 | checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" 3899 | dependencies = [ 3900 | "proc-macro2", 3901 | "quote", 3902 | "syn", 3903 | ] 3904 | 3905 | [[package]] 3906 | name = "zerofrom" 3907 | version = "0.1.6" 3908 | source = "registry+https://github.com/rust-lang/crates.io-index" 3909 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3910 | dependencies = [ 3911 | "zerofrom-derive", 3912 | ] 3913 | 3914 | [[package]] 3915 | name = "zerofrom-derive" 3916 | version = "0.1.6" 3917 | source = "registry+https://github.com/rust-lang/crates.io-index" 3918 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3919 | dependencies = [ 3920 | "proc-macro2", 3921 | "quote", 3922 | "syn", 3923 | "synstructure", 3924 | ] 3925 | 3926 | [[package]] 3927 | name = "zeroize" 3928 | version = "1.8.1" 3929 | source = "registry+https://github.com/rust-lang/crates.io-index" 3930 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3931 | 3932 | [[package]] 3933 | name = "zerovec" 3934 | version = "0.10.4" 3935 | source = "registry+https://github.com/rust-lang/crates.io-index" 3936 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 3937 | dependencies = [ 3938 | "yoke", 3939 | "zerofrom", 3940 | "zerovec-derive", 3941 | ] 3942 | 3943 | [[package]] 3944 | name = "zerovec-derive" 3945 | version = "0.10.3" 3946 | source = "registry+https://github.com/rust-lang/crates.io-index" 3947 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 3948 | dependencies = [ 3949 | "proc-macro2", 3950 | "quote", 3951 | "syn", 3952 | ] 3953 | 3954 | [[package]] 3955 | name = "zlib-rs" 3956 | version = "0.5.0" 3957 | source = "registry+https://github.com/rust-lang/crates.io-index" 3958 | checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8" 3959 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "azalea-viaversion" 3 | version = "0.1.0" 4 | edition = "2024" 5 | repository = "https://github.com/azalea-rs/azalea-viaversion" 6 | 7 | [profile.dev] 8 | opt-level = 1 9 | 10 | [profile.dev.package."*"] 11 | opt-level = 3 12 | 13 | [dev-dependencies] 14 | tracing-subscriber = { version = "0.3", features = ["env-filter"] } 15 | 16 | [dependencies] 17 | anyhow = "1.0" 18 | async-compat = "0.2.4" 19 | azalea = { git = "https://github.com/azalea-rs/azalea", default-features = false } 20 | futures-util = "0.3" 21 | kdam = "0.6" 22 | lazy-regex = "3.4" 23 | minecraft_folder_path = "0.1" 24 | reqwest = { version = "0.12", default-features = false, features = [ 25 | "rustls-tls", 26 | "stream", 27 | ] } 28 | semver = "1.0" 29 | tokio = { version = "1.44.2", features = ["process"] } 30 | tracing = "0.1" 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Azalea ViaVersion 2 | 3 | An [Azalea] plugin using [ViaProxy] to support connecting to every Minecraft server version. 4 | 5 | ## Usage 6 | 7 | Add the `ViaVersionPlugin` to your `ClientBuilder` or `SwarmBuilder`. 8 | 9 | ```rust 10 | use azalea::prelude::*; 11 | use azalea_viaversion::ViaVersionPlugin; 12 | 13 | #[tokio::main] 14 | async fn main() { 15 | ClientBuilder::new() 16 | .add_plugins(ViaVersionPlugin::start("1.21.4").await) 17 | .start(Account::offline("Azalea"), "localhost") 18 | .await 19 | .unwrap(); 20 | } 21 | ``` 22 | 23 | ## Compatibility 24 | 25 | This plugin depends on the `main` branch of [Azalea]. 26 | 27 | > [!IMPORTANT] 28 | > If you want use a different branch or fork you **_must_** patch your project's `Cargo.toml` file! 29 | 30 | ```toml 31 | [dependencies] 32 | azalea = { git = "https://github.com/azalea-rs/azalea" } 33 | azalea-viaversion = { git = "https://github.com/azalea-rs/azalea-viaversion" } 34 | 35 | # Note: You can also use this to pin Azalea to a specific commit. 36 | # [patch.'https://github.com/azalea-rs/azalea'] 37 | # azalea = { git = "https://github.com/azalea-rs/azalea", branch = "1.21.4" } 38 | ``` 39 | 40 | ## Matrix/Discord 41 | 42 | If you'd like to chat about Azalea, you can join the Matrix space at [#azalea:matdoes.dev](https://matrix.to/#/#azalea:matdoes.dev) (recommended) or the Discord server at [discord.gg/FaRey6ytmC](https://discord.gg/FaRey6ytmC) (they're bridged so you don't need to join both). 43 | 44 | ## How it works 45 | 46 | The plugin will automatically download ViaProxy to `~/.minecraft/azalea-viaversion`. It then starts up ViaProxy in the 47 | background and changes the connection address for the bots to the proxy. It also implements OpenAuthMod so it can keep 48 | using Azalea's normal auth mechanisms. 49 | 50 | [Azalea]: https://github.com/azalea-rs/azalea 51 | [ViaProxy]: https://github.com/ViaVersion/ViaProxy 52 | -------------------------------------------------------------------------------- /examples/cli.rs: -------------------------------------------------------------------------------- 1 | //! A swarm bot that allows you to modify the accounts being used and the target 2 | //! version and the server address from the CLI. 3 | //! 4 | //! Example usage: 5 | //! ```sh 6 | //! cargo r -r --example cli -- --account bot --server localhost --version 1.21.5 7 | //! ``` 8 | 9 | use std::{env, process, time::Duration}; 10 | 11 | use azalea::{prelude::*, swarm::SwarmBuilder}; 12 | use azalea_viaversion::ViaVersionPlugin; 13 | 14 | #[tokio::main] 15 | async fn main() { 16 | let args = parse_args(); 17 | 18 | tracing_subscriber::fmt::init(); 19 | 20 | let mut builder = SwarmBuilder::new(); 21 | 22 | for username_or_email in &args.accounts { 23 | let account = if username_or_email.contains('@') { 24 | Account::microsoft(username_or_email).await.unwrap() 25 | } else { 26 | Account::offline(username_or_email) 27 | }; 28 | 29 | builder = builder.add_account(account); 30 | } 31 | 32 | let plugin = ViaVersionPlugin::start(args.version).await; 33 | 34 | builder 35 | .add_plugins(plugin) 36 | .join_delay(Duration::from_millis(100)) 37 | .start(args.server) 38 | .await 39 | .unwrap(); 40 | } 41 | 42 | #[derive(Debug, Clone, Default)] 43 | pub struct Args { 44 | pub accounts: Vec, 45 | pub server: String, 46 | pub version: String, 47 | } 48 | 49 | fn parse_args() -> Args { 50 | let mut accounts = Vec::new(); 51 | let mut server = "localhost".to_string(); 52 | // default to the latest version 53 | let mut version = azalea::protocol::packets::VERSION_NAME.to_string(); 54 | 55 | let mut args = env::args().skip(1); 56 | while let Some(arg) = args.next() { 57 | match arg.as_str() { 58 | "--account" | "-A" => { 59 | for account in args.next().expect("Missing account").split(',') { 60 | accounts.push(account.to_string()); 61 | } 62 | } 63 | "--server" | "-S" => { 64 | server = args.next().expect("Missing server address"); 65 | } 66 | "--version" | "-V" => { 67 | version = args.next().expect("Missing version"); 68 | } 69 | _ => { 70 | eprintln!("Unknown argument: {}", arg); 71 | process::exit(1); 72 | } 73 | } 74 | } 75 | 76 | if accounts.is_empty() { 77 | accounts.push("azalea".to_string()); 78 | } 79 | 80 | Args { 81 | accounts, 82 | server, 83 | version, 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /examples/client.rs: -------------------------------------------------------------------------------- 1 | //! A super basic example of adding a `ViaVersionPlugin` to a `ClientBuilder` 2 | //! and connecting to a localhost server. 3 | //! 4 | //! # Note 5 | //! The `never_type` feature is completely optional, see how the `swarm` example 6 | //! does not use it. 7 | #![feature(never_type)] 8 | 9 | use azalea::{StartError, prelude::*}; 10 | use azalea_viaversion::ViaVersionPlugin; 11 | 12 | #[tokio::main] 13 | async fn main() -> Result { 14 | tracing_subscriber::fmt::init(); 15 | 16 | // Initialize a 1.21.4 ViaProxy instance 17 | let plugin = ViaVersionPlugin::start("1.21.4").await; 18 | // Create a ClientBuilder and add the ViaVersion plugin 19 | let builder = ClientBuilder::new().add_plugins(plugin); 20 | 21 | // Start the client and connect to a localhost server 22 | builder.start(Account::offline("Azalea"), "localhost").await 23 | } 24 | -------------------------------------------------------------------------------- /examples/echo.rs: -------------------------------------------------------------------------------- 1 | //! An [`azalea`] bot that repeats chat messages sent by other players. 2 | //! 3 | //! # Note 4 | //! The `never_type` feature is completely optional, see how the `swarm` example 5 | //! does not use it. 6 | #![feature(never_type)] 7 | 8 | use azalea::{NoState, StartError, prelude::*}; 9 | use azalea_viaversion::ViaVersionPlugin; 10 | 11 | #[tokio::main] 12 | async fn main() -> Result { 13 | tracing_subscriber::fmt::init(); 14 | 15 | // Initialize a 1.21.4 ViaProxy instance 16 | let plugin = ViaVersionPlugin::start("1.21.4").await; 17 | let builder = ClientBuilder::new().add_plugins(plugin); 18 | 19 | // Start the client and connect to a localhost server 20 | let acc = Account::offline("Azalea"); 21 | builder.set_handler(handle).start(acc, "localhost").await 22 | } 23 | 24 | /// A simple event handler that repeats chat messages sent by other players. 25 | async fn handle(bot: Client, event: Event, _: NoState) -> anyhow::Result<()> { 26 | match event { 27 | Event::Chat(message) => { 28 | // Split the message into the sender and message content 29 | let (sender, message) = message.split_sender_and_content(); 30 | // If the sender is not the bot, repeat the message 31 | if sender.is_none_or(|sender| sender != bot.username()) { 32 | bot.chat(&message); 33 | } 34 | } 35 | // Log disconnect reasons 36 | Event::Disconnect(Some(reason)) => eprintln!("Disconnected: {}", reason.to_ansi()), 37 | Event::Disconnect(None) => eprintln!("Disconnected: No reason provided"), 38 | _ => {} 39 | } 40 | 41 | Ok(()) 42 | } 43 | -------------------------------------------------------------------------------- /examples/swarm.rs: -------------------------------------------------------------------------------- 1 | //! A super basic example of adding a `ViaVersionPlugin` to a `SwarmBuilder` and 2 | //! connecting to a localhost server. 3 | 4 | use azalea::{prelude::*, swarm::SwarmBuilder}; 5 | use azalea_viaversion::ViaVersionPlugin; 6 | 7 | #[tokio::main] 8 | async fn main() { 9 | tracing_subscriber::fmt::init(); 10 | 11 | // Initialize a 1.21.4 ViaProxy instance 12 | let plugin = ViaVersionPlugin::start("1.21.4").await; 13 | // Create a SwarmBuilder and add the ViaVersion plugin 14 | let builder = SwarmBuilder::new().add_plugins(plugin); 15 | 16 | // Start the client and connect to a localhost server 17 | let acc = Account::offline("Azalea"); 18 | builder.add_account(acc).start("localhost").await.unwrap() 19 | } 20 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly" -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | wrap_comments = true 2 | group_imports = "StdExternalCrate" 3 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | use std::{io::Cursor, net::SocketAddr, path::Path, process::Stdio}; 2 | 3 | use anyhow::{Context, Result}; 4 | use azalea::{ 5 | app::{App, Plugin, Startup, prelude::*}, 6 | auth::sessionserver::{ 7 | ClientSessionServerError::{ForbiddenOperation, InvalidSession}, 8 | join_with_server_id_hash, 9 | }, 10 | bevy_tasks::{IoTaskPool, Task, futures_lite::future}, 11 | buf::AzaleaRead, 12 | ecs::prelude::*, 13 | join::StartJoinServerEvent, 14 | packet::login::{ReceiveCustomQueryEvent, SendLoginPacketEvent}, 15 | prelude::*, 16 | protocol::{ServerAddress, connect::Proxy, packets::login::ServerboundCustomQueryAnswer}, 17 | swarm::Swarm, 18 | }; 19 | use futures_util::StreamExt; 20 | use kdam::{BarExt, tqdm}; 21 | use lazy_regex::regex_captures; 22 | use reqwest::IntoUrl; 23 | use semver::Version; 24 | use tokio::{ 25 | fs::File, 26 | io::{AsyncBufReadExt, AsyncWriteExt, BufReader}, 27 | net::TcpListener, 28 | process::Command, 29 | }; 30 | use tracing::{error, trace, warn}; 31 | 32 | const JAVA_DOWNLOAD_URL: &str = "https://adoptium.net/installation"; 33 | const VIA_OAUTH_VERSION: Version = Version::new(1, 0, 2); 34 | const VIA_PROXY_VERSION: Version = Version::new(3, 4, 1); 35 | 36 | #[derive(Clone, Resource)] 37 | pub struct ViaVersionPlugin { 38 | bind_addr: SocketAddr, 39 | mc_version: String, 40 | proxy: Option, 41 | } 42 | 43 | impl Plugin for ViaVersionPlugin { 44 | fn build(&self, app: &mut App) { 45 | app.insert_resource(self.clone()) 46 | .add_systems(Startup, Self::handle_change_address) 47 | .add_systems( 48 | Update, 49 | ( 50 | Self::handle_oauth.before(azalea::login::reply_to_custom_queries), 51 | Self::poll_all_oam_join_tasks, 52 | Self::warn_about_proxy.after(azalea::auto_reconnect::rejoin_after_delay), 53 | ), 54 | ); 55 | } 56 | } 57 | 58 | impl ViaVersionPlugin { 59 | /// Download and start a ViaProxy instance. 60 | /// 61 | /// # Panics 62 | /// 63 | /// Will panic if Java fails to parse, files fail to download, or ViaProxy 64 | /// fails to start. 65 | pub async fn start(mc_version: impl ToString) -> Self { 66 | let bind_addr = try_find_free_addr().await.expect("Failed to bind"); 67 | let mc_version = mc_version.to_string(); 68 | 69 | let plugin = Self { 70 | bind_addr, 71 | mc_version, 72 | proxy: None, 73 | }; 74 | plugin.start_with_self().await 75 | } 76 | 77 | /// Same as [`Self::start`], but allows you to pass a Socks5 proxy. 78 | /// 79 | /// This is necessary if you want to use Azalea with a proxy and ViaVersion 80 | /// at the same time. This is incompatible with `JoinOpts::proxy`. 81 | /// 82 | /// ```no_run 83 | /// # use azalea::{prelude::*, protocol::connect::Proxy}; 84 | /// # use azalea_viaversion::ViaVersionPlugin;; 85 | /// #[tokio::main] 86 | /// async fn main() { 87 | /// let account = Account::offline("bot"); 88 | /// 89 | /// ClientBuilder::new() 90 | /// .set_handler(handle) 91 | /// .add_plugins( 92 | /// ViaVersionPlugin::start_with_proxy( 93 | /// "1.21.5", 94 | /// Proxy::new("10.124.1.186:1080".parse().unwrap(), None), 95 | /// ) 96 | /// .await, 97 | /// ) 98 | /// .start(account, "6.tcp.ngrok.io:14910") 99 | /// .await 100 | /// .unwrap(); 101 | /// } 102 | /// # async fn handle(mut bot: Client, event: Event, state: azalea::NoState) { } 103 | /// ``` 104 | pub async fn start_with_proxy(mc_version: impl ToString, proxy: Proxy) -> Self { 105 | let bind_addr = try_find_free_addr().await.expect("Failed to bind"); 106 | let mc_version = mc_version.to_string(); 107 | 108 | let plugin = Self { 109 | bind_addr, 110 | mc_version, 111 | proxy: Some(proxy), 112 | }; 113 | plugin.start_with_self().await 114 | } 115 | 116 | async fn start_with_self(self) -> Self { 117 | let Some(java_version) = try_find_java_version().await.expect("Failed to parse") else { 118 | panic!( 119 | "Java installation not found! Please download Java from {JAVA_DOWNLOAD_URL} or use your system's package manager." 120 | ); 121 | }; 122 | 123 | let mc_path = minecraft_folder_path::minecraft_dir().expect("Unsupported Platform"); 124 | 125 | #[rustfmt::skip] 126 | let via_proxy_ext = if java_version.major < 17 { "+java8.jar" } else { ".jar" }; 127 | let via_proxy_name = format!("ViaProxy-{VIA_PROXY_VERSION}{via_proxy_ext}"); 128 | let via_proxy_path = mc_path.join("azalea-viaversion"); 129 | let via_proxy_url = format!( 130 | "https://github.com/ViaVersion/ViaProxy/releases/download/v{VIA_PROXY_VERSION}/{via_proxy_name}" 131 | ); 132 | try_download_file(via_proxy_url, &via_proxy_path, &via_proxy_name) 133 | .await 134 | .expect("Failed to download ViaProxy"); 135 | 136 | let via_oauth_name = format!("ViaProxyOpenAuthMod-{VIA_OAUTH_VERSION}.jar"); 137 | let via_oauth_path = via_proxy_path.join("plugins"); 138 | let via_oauth_url = format!( 139 | "https://github.com/ViaVersionAddons/ViaProxyOpenAuthMod/releases/download/v{VIA_OAUTH_VERSION}/{via_oauth_name}" 140 | ); 141 | try_download_file(via_oauth_url, &via_oauth_path, &via_oauth_name) 142 | .await 143 | .expect("Failed to download ViaProxyOpenAuthMod"); 144 | 145 | let mut command = Command::new("java"); 146 | command 147 | /* Java Args */ 148 | .args(["-jar", &via_proxy_name]) 149 | /* ViaProxy Args */ 150 | .arg("cli") 151 | .args(["--auth-method", "OPENAUTHMOD"]) 152 | .args(["--bind-address", &self.bind_addr.to_string()]) 153 | .args(["--target-address", "127.0.0.1:0"]) 154 | .args(["--target-version", &self.mc_version]) 155 | .args(["--wildcard-domain-handling", "INTERNAL"]); 156 | 157 | if let Some(proxy) = &self.proxy { 158 | trace!("Starting ViaProxy with proxy: {proxy}"); 159 | command.args(["--backend-proxy-url", &proxy.to_string()]); 160 | } 161 | 162 | let mut child = command 163 | .current_dir(via_proxy_path) 164 | .stdout(Stdio::piped()) 165 | .spawn() 166 | .expect("Failed to spawn"); 167 | 168 | let (tx, mut rx) = tokio::sync::watch::channel(()); 169 | tokio::spawn(async move { 170 | let mut stdout = child.stdout.as_mut().expect("Failed to get stdout"); 171 | let mut reader = BufReader::new(&mut stdout); 172 | let mut line = String::new(); 173 | 174 | loop { 175 | line.clear(); 176 | reader.read_line(&mut line).await.expect("Failed to read"); 177 | 178 | trace!("{}", line.trim()); 179 | if line.contains("Finished mapping loading") { 180 | let _ = tx.send(()); 181 | } 182 | } 183 | }); 184 | 185 | /* Wait until ViaProxy is ready */ 186 | let _ = rx.changed().await; 187 | 188 | self 189 | } 190 | 191 | #[allow(clippy::needless_pass_by_value)] 192 | pub fn handle_change_address(plugin: Res, swarm: Res) { 193 | let ServerAddress { host, port } = swarm.address.read().clone(); 194 | 195 | // sadly, the first part of the resolved address is unused as viaproxy will 196 | // resolve it on its own more info: https://github.com/ViaVersion/ViaProxy/issues/338 197 | let data_after_null_byte = host.split_once('\x07').map(|(_, data)| data); 198 | 199 | let mut connection_host = format!( 200 | "localhost\x07{host}:{port}\x07{version}", 201 | version = plugin.mc_version 202 | ); 203 | if let Some(data) = data_after_null_byte { 204 | connection_host.push('\0'); 205 | connection_host.push_str(data); 206 | } 207 | 208 | *swarm.address.write() = ServerAddress { 209 | port, 210 | host: connection_host, 211 | }; 212 | 213 | /* Must wait to be written until after reading above */ 214 | *swarm.resolved_address.write() = plugin.bind_addr; 215 | } 216 | 217 | pub fn handle_oauth( 218 | mut commands: Commands, 219 | mut events: EventMutator, 220 | mut query: Query<&Account>, 221 | ) { 222 | for event in events.read() { 223 | if event.packet.identifier.to_string().as_str() != "oam:join" { 224 | continue; 225 | } 226 | 227 | let mut buf = Cursor::new(&*event.packet.data); 228 | let Ok(hash) = String::azalea_read(&mut buf) else { 229 | error!("Failed to read server id hash from oam:join packet"); 230 | continue; 231 | }; 232 | 233 | let Ok(account) = query.get_mut(event.entity) else { 234 | continue; 235 | }; 236 | 237 | // this makes it so azalea doesn't reply to the query so we can handle it 238 | // ourselves 239 | event.disabled = true; 240 | 241 | let Some(access_token) = &account.access_token else { 242 | warn!("The server tried to make us authenticate, but our account is offline-mode"); 243 | commands.trigger(SendLoginPacketEvent::new( 244 | event.entity, 245 | build_custom_query_answer(event.packet.transaction_id, true), 246 | )); 247 | continue; 248 | }; 249 | 250 | let client = reqwest::Client::new(); 251 | let token = access_token.lock().clone(); 252 | let uuid = account.uuid_or_offline(); 253 | let account = account.clone(); 254 | let transaction_id = event.packet.transaction_id; 255 | 256 | let task_pool = IoTaskPool::get(); 257 | let task = task_pool.spawn(async move { 258 | // joining servers uses tokio, but we poll the task with `futures` 259 | let res = async_compat::Compat::new(async { 260 | Some( 261 | match join_with_server_id_hash(&client, &token, &uuid, &hash).await { 262 | Ok(()) => Ok(()), /* Successfully Authenticated */ 263 | Err(InvalidSession | ForbiddenOperation) => { 264 | if let Err(error) = account.refresh().await { 265 | error!("Failed to refresh account: {error}"); 266 | return None; 267 | } 268 | 269 | /* Retry after refreshing */ 270 | join_with_server_id_hash(&client, &token, &uuid, &hash).await 271 | } 272 | Err(error) => Err(error), 273 | }, 274 | ) 275 | }) 276 | .await?; 277 | 278 | Some(build_custom_query_answer(transaction_id, res.is_ok())) 279 | }); 280 | commands 281 | .entity(event.entity) 282 | .insert(OpenAuthModJoinTask(task)); 283 | } 284 | } 285 | 286 | fn poll_all_oam_join_tasks( 287 | mut commands: Commands, 288 | mut tasks: Query<(Entity, &mut OpenAuthModJoinTask)>, 289 | ) { 290 | for (entity, mut task) in tasks.iter_mut() { 291 | let Some(res) = future::block_on(future::poll_once(&mut task.0)) else { 292 | continue; 293 | }; 294 | 295 | commands.entity(entity).remove::(); 296 | 297 | let Some(packet) = res else { 298 | error!("Failed to do Mojang auth for openauthmod, not sending response"); 299 | continue; 300 | }; 301 | 302 | commands.trigger(SendLoginPacketEvent::new(entity, packet)) 303 | } 304 | } 305 | 306 | fn warn_about_proxy(mut events: EventReader) { 307 | for event in events.read() { 308 | if event.connect_opts.proxy.is_some() { 309 | warn!( 310 | "You are using JoinOpts::proxy and ViaVersionPlugin at the same time, which is not a supported configuration. \ 311 | Please set your proxy with `ViaVersionPlugin::start_with_proxy` instead." 312 | ); 313 | } 314 | } 315 | } 316 | } 317 | 318 | #[derive(Component)] 319 | pub struct OpenAuthModJoinTask(Task>); 320 | 321 | fn build_custom_query_answer(transaction_id: u32, success: bool) -> ServerboundCustomQueryAnswer { 322 | ServerboundCustomQueryAnswer { 323 | transaction_id, 324 | data: Some(vec![u8::from(success)].into()), 325 | } 326 | } 327 | 328 | /// Try to find the system's Java version. 329 | /// 330 | /// This uses `-version` and `stderr`, because it's backwards compatible. 331 | /// 332 | /// # Errors 333 | /// Will return `Err` if `Version::parse` fails. 334 | /// 335 | /// # Options 336 | /// Will return `None` if java is not found. 337 | pub async fn try_find_java_version() -> Result> { 338 | Ok(match Command::new("java").arg("-version").output().await { 339 | Err(_) => None, /* Java not found */ 340 | Ok(output) => { 341 | let stderr = String::from_utf8(output.stderr).context("UTF-8")?; 342 | Some(parse_java_version(&stderr)?) 343 | } 344 | }) 345 | } 346 | 347 | fn parse_java_version(stderr: &str) -> Result { 348 | // whole, first group, second group 349 | let (_, major, mut minor_patch) = 350 | regex_captures!(r"(\d+)(\.\d+\.\d+)?", stderr).context("Regex")?; 351 | if minor_patch.is_empty() { 352 | minor_patch = ".0.0"; 353 | } 354 | 355 | let text = format!("{major}{minor_patch}"); 356 | Ok(Version::parse(&text)?) 357 | } 358 | 359 | /// Try to find a free port and return the socket address 360 | /// 361 | /// This uses `TcpListener` to ask the system for a free port. 362 | /// 363 | /// # Errors 364 | /// Will return `Err` if `TcpListener::bind` or `TcpListener::local_addr` fails. 365 | pub async fn try_find_free_addr() -> Result { 366 | Ok(TcpListener::bind("127.0.0.1:0").await?.local_addr()?) 367 | } 368 | 369 | /// Try to download and save a file if it doesn't exist. 370 | /// 371 | /// # Errors 372 | /// Will return `Err` if the file fails to download or save. 373 | pub async fn try_download_file(url: U, dir: P, file: &str) -> Result<()> 374 | where 375 | U: IntoUrl + Send + Sync, 376 | P: AsRef + Send + Sync, 377 | { 378 | tokio::fs::create_dir_all(&dir).await?; 379 | let path = dir.as_ref().join(file); 380 | if path.exists() { 381 | return Ok(()); 382 | } 383 | 384 | let response = reqwest::get(url).await?; 385 | let mut pb = tqdm!( 386 | total = usize::try_from(response.content_length().unwrap_or(0))?, 387 | unit_scale = true, 388 | unit_divisor = 1024, 389 | unit = "B", 390 | force_refresh = true 391 | ); 392 | 393 | pb.write(format!("Downloading {file}"))?; 394 | 395 | let mut file = File::create(path).await?; 396 | let mut stream = response.bytes_stream(); 397 | 398 | while let Some(item) = stream.next().await { 399 | let chunk = item?; 400 | file.write_all(&chunk).await?; 401 | pb.update(chunk.len())?; 402 | } 403 | 404 | pb.refresh()?; 405 | 406 | Ok(()) 407 | } 408 | 409 | #[cfg(test)] 410 | mod tests { 411 | use super::*; 412 | 413 | #[test] 414 | fn test_parse_openjdk_ea() { 415 | let stderr = "openjdk version \"24-ea\" 2025-03-18 416 | OpenJDK Runtime Environment (build 24-ea+29-3578) 417 | OpenJDK 64-Bit Server VM (build 24-ea+29-3578, mixed mode, sharing)" 418 | .to_string(); 419 | let version = parse_java_version(&stderr).unwrap(); 420 | assert_eq!(version, Version::new(24, 0, 0)); 421 | } 422 | 423 | #[test] 424 | fn test_parse_openjdk_8() { 425 | let stderr = "openjdk version \"1.8.0_432\" 426 | OpenJDK Runtime Environment (build 1.8.0_432-b05) 427 | OpenJDK 64-Bit Server VM (build 25.432-b05, mixed mode)" 428 | .to_string(); 429 | let version = parse_java_version(&stderr).unwrap(); 430 | assert_eq!(version, Version::new(1, 8, 0)); 431 | } 432 | 433 | #[test] 434 | fn test_parse_openjdk_11() { 435 | let stderr = "openjdk version \"11.0.25\" 2024-10-15 436 | OpenJDK Runtime Environment (build 11.0.25+9) 437 | OpenJDK 64-Bit Server VM (build 11.0.25+9, mixed mode)" 438 | .to_string(); 439 | let version = parse_java_version(&stderr).unwrap(); 440 | assert_eq!(version, Version::new(11, 0, 25)); 441 | } 442 | } 443 | --------------------------------------------------------------------------------