this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added APIs, implemented more dispatch events, made an example bot implementation and a slight refactor of the repo

roufpup 861d275c eaef784d

+8360 -433
+17
.devcontainer/devcontainer.json
··· 1 + { 2 + "image": "mcr.microsoft.com/devcontainers/rust:latest", 3 + "features": { 4 + "ghcr.io/devcontainers/features/rust:1": {}, 5 + "ghcr.io/coder/devcontainer-features/code-server:2": { 6 + "auth": "none", 7 + "appName": "RustCode", 8 + "workspace": "/home/vscode/fluxer-rs", 9 + "disableTelemetry": true, 10 + "disableWorkspaceTrust": true 11 + } 12 + }, 13 + "postCreateCommand": "bash .devcontainer/setup.sh", 14 + "mounts": [ 15 + "source=/home/coder,target=/home/vscode,type=bind" 16 + ] 17 + }
+7
.devcontainer/setup.sh
··· 1 + #!/bin/bash 2 + set -e 3 + 4 + sudo apt-get update && sudo apt-get install -y clang 5 + cargo install --locked wild-linker 6 + 7 + code-server --install-extension rust-lang.rust-analyzer
+3 -1
.gitignore
··· 1 1 /target 2 2 .direnv/ 3 - .idea/ 3 + .idea/ 4 + .devcontainer/ 5 + examples/examplebot/target
+2398 -46
Cargo.lock
··· 3 3 version = 4 4 4 5 5 [[package]] 6 + name = "adler2" 7 + version = "2.0.1" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 10 + 11 + [[package]] 12 + name = "aead" 13 + version = "0.5.2" 14 + source = "registry+https://github.com/rust-lang/crates.io-index" 15 + checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" 16 + dependencies = [ 17 + "crypto-common", 18 + "generic-array", 19 + ] 20 + 21 + [[package]] 22 + name = "aegis" 23 + version = "0.9.7" 24 + source = "registry+https://github.com/rust-lang/crates.io-index" 25 + checksum = "8ae1572243695de9c6c8d16c7889899abac907d14c148f1939d837122bbeca79" 26 + dependencies = [ 27 + "cc", 28 + "softaes", 29 + ] 30 + 31 + [[package]] 32 + name = "aes" 33 + version = "0.8.4" 34 + source = "registry+https://github.com/rust-lang/crates.io-index" 35 + checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 36 + dependencies = [ 37 + "cfg-if", 38 + "cipher", 39 + "cpufeatures", 40 + ] 41 + 42 + [[package]] 43 + name = "aes-gcm" 44 + version = "0.10.3" 45 + source = "registry+https://github.com/rust-lang/crates.io-index" 46 + checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" 47 + dependencies = [ 48 + "aead", 49 + "aes", 50 + "cipher", 51 + "ctr", 52 + "ghash", 53 + "subtle", 54 + ] 55 + 56 + [[package]] 6 57 name = "aho-corasick" 7 58 version = "1.1.4" 8 59 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 12 63 ] 13 64 14 65 [[package]] 66 + name = "aligned" 67 + version = "0.4.3" 68 + source = "registry+https://github.com/rust-lang/crates.io-index" 69 + checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" 70 + dependencies = [ 71 + "as-slice", 72 + ] 73 + 74 + [[package]] 75 + name = "aligned-vec" 76 + version = "0.6.4" 77 + source = "registry+https://github.com/rust-lang/crates.io-index" 78 + checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" 79 + dependencies = [ 80 + "equator", 81 + ] 82 + 83 + [[package]] 84 + name = "android_system_properties" 85 + version = "0.1.5" 86 + source = "registry+https://github.com/rust-lang/crates.io-index" 87 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 88 + dependencies = [ 89 + "libc", 90 + ] 91 + 92 + [[package]] 15 93 name = "anstream" 16 94 version = "0.6.21" 17 95 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 62 140 ] 63 141 64 142 [[package]] 143 + name = "anyhow" 144 + version = "1.0.102" 145 + source = "registry+https://github.com/rust-lang/crates.io-index" 146 + checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" 147 + 148 + [[package]] 149 + name = "arbitrary" 150 + version = "1.4.2" 151 + source = "registry+https://github.com/rust-lang/crates.io-index" 152 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 153 + 154 + [[package]] 155 + name = "arc-swap" 156 + version = "1.8.2" 157 + source = "registry+https://github.com/rust-lang/crates.io-index" 158 + checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" 159 + dependencies = [ 160 + "rustversion", 161 + ] 162 + 163 + [[package]] 164 + name = "arg_enum_proc_macro" 165 + version = "0.3.4" 166 + source = "registry+https://github.com/rust-lang/crates.io-index" 167 + checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" 168 + dependencies = [ 169 + "proc-macro2", 170 + "quote", 171 + "syn 2.0.117", 172 + ] 173 + 174 + [[package]] 175 + name = "arrayvec" 176 + version = "0.7.6" 177 + source = "registry+https://github.com/rust-lang/crates.io-index" 178 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 179 + 180 + [[package]] 181 + name = "as-slice" 182 + version = "0.2.1" 183 + source = "registry+https://github.com/rust-lang/crates.io-index" 184 + checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" 185 + dependencies = [ 186 + "stable_deref_trait", 187 + ] 188 + 189 + [[package]] 65 190 name = "async-channel" 66 191 version = "1.9.0" 67 192 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 80 205 dependencies = [ 81 206 "proc-macro2", 82 207 "quote", 83 - "syn 2.0.116", 208 + "syn 2.0.117", 84 209 ] 85 210 86 211 [[package]] ··· 95 220 ] 96 221 97 222 [[package]] 223 + name = "autocfg" 224 + version = "1.5.0" 225 + source = "registry+https://github.com/rust-lang/crates.io-index" 226 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 227 + 228 + [[package]] 229 + name = "av-scenechange" 230 + version = "0.14.1" 231 + source = "registry+https://github.com/rust-lang/crates.io-index" 232 + checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" 233 + dependencies = [ 234 + "aligned", 235 + "anyhow", 236 + "arg_enum_proc_macro", 237 + "arrayvec", 238 + "log", 239 + "num-rational", 240 + "num-traits", 241 + "pastey", 242 + "rayon", 243 + "thiserror", 244 + "v_frame", 245 + "y4m", 246 + ] 247 + 248 + [[package]] 249 + name = "av1-grain" 250 + version = "0.2.5" 251 + source = "registry+https://github.com/rust-lang/crates.io-index" 252 + checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" 253 + dependencies = [ 254 + "anyhow", 255 + "arrayvec", 256 + "log", 257 + "nom 8.0.0", 258 + "num-rational", 259 + "v_frame", 260 + ] 261 + 262 + [[package]] 263 + name = "avif-serialize" 264 + version = "0.8.8" 265 + source = "registry+https://github.com/rust-lang/crates.io-index" 266 + checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" 267 + dependencies = [ 268 + "arrayvec", 269 + ] 270 + 271 + [[package]] 98 272 name = "aws-lc-rs" 99 - version = "1.15.4" 273 + version = "1.16.0" 100 274 source = "registry+https://github.com/rust-lang/crates.io-index" 101 - checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" 275 + checksum = "d9a7b350e3bb1767102698302bc37256cbd48422809984b98d292c40e2579aa9" 102 276 dependencies = [ 103 277 "aws-lc-sys", 104 278 "zeroize", ··· 123 297 checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 124 298 125 299 [[package]] 300 + name = "base64" 301 + version = "0.22.1" 302 + source = "registry+https://github.com/rust-lang/crates.io-index" 303 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 304 + 305 + [[package]] 306 + name = "bindgen" 307 + version = "0.69.5" 308 + source = "registry+https://github.com/rust-lang/crates.io-index" 309 + checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" 310 + dependencies = [ 311 + "bitflags", 312 + "cexpr", 313 + "clang-sys", 314 + "itertools 0.12.1", 315 + "lazy_static", 316 + "lazycell", 317 + "log", 318 + "prettyplease", 319 + "proc-macro2", 320 + "quote", 321 + "regex", 322 + "rustc-hash 1.1.0", 323 + "shlex", 324 + "syn 2.0.117", 325 + "which", 326 + ] 327 + 328 + [[package]] 329 + name = "bit_field" 330 + version = "0.10.3" 331 + source = "registry+https://github.com/rust-lang/crates.io-index" 332 + checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" 333 + 334 + [[package]] 126 335 name = "bitflags" 127 336 version = "2.11.0" 128 337 source = "registry+https://github.com/rust-lang/crates.io-index" 129 338 checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 130 339 131 340 [[package]] 341 + name = "bitstream-io" 342 + version = "4.9.0" 343 + source = "registry+https://github.com/rust-lang/crates.io-index" 344 + checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" 345 + dependencies = [ 346 + "core2", 347 + ] 348 + 349 + [[package]] 132 350 name = "block-buffer" 133 351 version = "0.10.4" 134 352 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 138 356 ] 139 357 140 358 [[package]] 359 + name = "branches" 360 + version = "0.4.4" 361 + source = "registry+https://github.com/rust-lang/crates.io-index" 362 + checksum = "e426eb5cc1900033930ec955317b302e68f19f326cc7bb0c8a86865a826cdf0c" 363 + dependencies = [ 364 + "rustc_version", 365 + ] 366 + 367 + [[package]] 368 + name = "built" 369 + version = "0.7.7" 370 + source = "registry+https://github.com/rust-lang/crates.io-index" 371 + checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" 372 + dependencies = [ 373 + "chrono", 374 + "git2", 375 + ] 376 + 377 + [[package]] 378 + name = "built" 379 + version = "0.8.0" 380 + source = "registry+https://github.com/rust-lang/crates.io-index" 381 + checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" 382 + 383 + [[package]] 141 384 name = "bumpalo" 142 - version = "3.19.1" 385 + version = "3.20.2" 143 386 source = "registry+https://github.com/rust-lang/crates.io-index" 144 - checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" 387 + checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" 388 + 389 + [[package]] 390 + name = "bytemuck" 391 + version = "1.25.0" 392 + source = "registry+https://github.com/rust-lang/crates.io-index" 393 + checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" 394 + dependencies = [ 395 + "bytemuck_derive", 396 + ] 397 + 398 + [[package]] 399 + name = "bytemuck_derive" 400 + version = "1.10.2" 401 + source = "registry+https://github.com/rust-lang/crates.io-index" 402 + checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" 403 + dependencies = [ 404 + "proc-macro2", 405 + "quote", 406 + "syn 2.0.117", 407 + ] 408 + 409 + [[package]] 410 + name = "byteorder" 411 + version = "1.5.0" 412 + source = "registry+https://github.com/rust-lang/crates.io-index" 413 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 414 + 415 + [[package]] 416 + name = "byteorder-lite" 417 + version = "0.1.0" 418 + source = "registry+https://github.com/rust-lang/crates.io-index" 419 + checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 145 420 146 421 [[package]] 147 422 name = "bytes" ··· 162 437 ] 163 438 164 439 [[package]] 440 + name = "cexpr" 441 + version = "0.6.0" 442 + source = "registry+https://github.com/rust-lang/crates.io-index" 443 + checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 444 + dependencies = [ 445 + "nom 7.1.3", 446 + ] 447 + 448 + [[package]] 165 449 name = "cfg-if" 166 450 version = "1.0.4" 167 451 source = "registry+https://github.com/rust-lang/crates.io-index" 168 452 checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 169 453 170 454 [[package]] 455 + name = "cfg_block" 456 + version = "0.1.1" 457 + source = "registry+https://github.com/rust-lang/crates.io-index" 458 + checksum = "18758054972164c3264f7c8386f5fc6da6114cb46b619fd365d4e3b2dc3ae487" 459 + 460 + [[package]] 461 + name = "chrono" 462 + version = "0.4.43" 463 + source = "registry+https://github.com/rust-lang/crates.io-index" 464 + checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" 465 + dependencies = [ 466 + "iana-time-zone", 467 + "js-sys", 468 + "num-traits", 469 + "serde", 470 + "wasm-bindgen", 471 + "windows-link", 472 + ] 473 + 474 + [[package]] 475 + name = "cipher" 476 + version = "0.4.4" 477 + source = "registry+https://github.com/rust-lang/crates.io-index" 478 + checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 479 + dependencies = [ 480 + "crypto-common", 481 + "inout", 482 + ] 483 + 484 + [[package]] 485 + name = "clang-sys" 486 + version = "1.8.1" 487 + source = "registry+https://github.com/rust-lang/crates.io-index" 488 + checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 489 + dependencies = [ 490 + "glob", 491 + "libc", 492 + "libloading", 493 + ] 494 + 495 + [[package]] 171 496 name = "cmake" 172 497 version = "0.1.57" 173 498 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 177 502 ] 178 503 179 504 [[package]] 505 + name = "color_quant" 506 + version = "1.1.0" 507 + source = "registry+https://github.com/rust-lang/crates.io-index" 508 + checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 509 + 510 + [[package]] 180 511 name = "colorbot" 181 512 version = "0.1.0" 182 513 dependencies = [ 183 514 "env_logger", 184 515 "fluxer-rs", 516 + "image", 185 517 "log", 518 + "minreq", 186 519 "tokio", 520 + "turso", 187 521 ] 188 522 189 523 [[package]] ··· 202 536 ] 203 537 204 538 [[package]] 539 + name = "core-foundation-sys" 540 + version = "0.8.7" 541 + source = "registry+https://github.com/rust-lang/crates.io-index" 542 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 543 + 544 + [[package]] 545 + name = "core2" 546 + version = "0.4.0" 547 + source = "registry+https://github.com/rust-lang/crates.io-index" 548 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 549 + dependencies = [ 550 + "memchr", 551 + ] 552 + 553 + [[package]] 205 554 name = "cpufeatures" 206 555 version = "0.2.17" 207 556 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 211 560 ] 212 561 213 562 [[package]] 563 + name = "crc32fast" 564 + version = "1.5.0" 565 + source = "registry+https://github.com/rust-lang/crates.io-index" 566 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 567 + dependencies = [ 568 + "cfg-if", 569 + ] 570 + 571 + [[package]] 572 + name = "crossbeam-channel" 573 + version = "0.5.15" 574 + source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 576 + dependencies = [ 577 + "crossbeam-utils", 578 + ] 579 + 580 + [[package]] 581 + name = "crossbeam-deque" 582 + version = "0.8.6" 583 + source = "registry+https://github.com/rust-lang/crates.io-index" 584 + checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 585 + dependencies = [ 586 + "crossbeam-epoch", 587 + "crossbeam-utils", 588 + ] 589 + 590 + [[package]] 591 + name = "crossbeam-epoch" 592 + version = "0.9.18" 593 + source = "registry+https://github.com/rust-lang/crates.io-index" 594 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 595 + dependencies = [ 596 + "crossbeam-utils", 597 + ] 598 + 599 + [[package]] 600 + name = "crossbeam-skiplist" 601 + version = "0.1.3" 602 + source = "registry+https://github.com/rust-lang/crates.io-index" 603 + checksum = "df29de440c58ca2cc6e587ec3d22347551a32435fbde9d2bff64e78a9ffa151b" 604 + dependencies = [ 605 + "crossbeam-epoch", 606 + "crossbeam-utils", 607 + ] 608 + 609 + [[package]] 214 610 name = "crossbeam-utils" 215 611 version = "0.8.21" 216 612 source = "registry+https://github.com/rust-lang/crates.io-index" 217 613 checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 614 + 615 + [[package]] 616 + name = "crunchy" 617 + version = "0.2.4" 618 + source = "registry+https://github.com/rust-lang/crates.io-index" 619 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 218 620 219 621 [[package]] 220 622 name = "crypto-common" ··· 223 625 checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" 224 626 dependencies = [ 225 627 "generic-array", 628 + "rand_core 0.6.4", 226 629 "typenum", 227 630 ] 228 631 229 632 [[package]] 633 + name = "ctr" 634 + version = "0.9.2" 635 + source = "registry+https://github.com/rust-lang/crates.io-index" 636 + checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" 637 + dependencies = [ 638 + "cipher", 639 + ] 640 + 641 + [[package]] 642 + name = "darling" 643 + version = "0.20.11" 644 + source = "registry+https://github.com/rust-lang/crates.io-index" 645 + checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 646 + dependencies = [ 647 + "darling_core 0.20.11", 648 + "darling_macro 0.20.11", 649 + ] 650 + 651 + [[package]] 652 + name = "darling" 653 + version = "0.21.3" 654 + source = "registry+https://github.com/rust-lang/crates.io-index" 655 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 656 + dependencies = [ 657 + "darling_core 0.21.3", 658 + "darling_macro 0.21.3", 659 + ] 660 + 661 + [[package]] 662 + name = "darling_core" 663 + version = "0.20.11" 664 + source = "registry+https://github.com/rust-lang/crates.io-index" 665 + checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 666 + dependencies = [ 667 + "fnv", 668 + "ident_case", 669 + "proc-macro2", 670 + "quote", 671 + "strsim", 672 + "syn 2.0.117", 673 + ] 674 + 675 + [[package]] 676 + name = "darling_core" 677 + version = "0.21.3" 678 + source = "registry+https://github.com/rust-lang/crates.io-index" 679 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 680 + dependencies = [ 681 + "fnv", 682 + "ident_case", 683 + "proc-macro2", 684 + "quote", 685 + "strsim", 686 + "syn 2.0.117", 687 + ] 688 + 689 + [[package]] 690 + name = "darling_macro" 691 + version = "0.20.11" 692 + source = "registry+https://github.com/rust-lang/crates.io-index" 693 + checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 694 + dependencies = [ 695 + "darling_core 0.20.11", 696 + "quote", 697 + "syn 2.0.117", 698 + ] 699 + 700 + [[package]] 701 + name = "darling_macro" 702 + version = "0.21.3" 703 + source = "registry+https://github.com/rust-lang/crates.io-index" 704 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 705 + dependencies = [ 706 + "darling_core 0.21.3", 707 + "quote", 708 + "syn 2.0.117", 709 + ] 710 + 711 + [[package]] 230 712 name = "data-encoding" 231 713 version = "2.10.0" 232 714 source = "registry+https://github.com/rust-lang/crates.io-index" 233 715 checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" 234 716 235 717 [[package]] 718 + name = "deranged" 719 + version = "0.5.8" 720 + source = "registry+https://github.com/rust-lang/crates.io-index" 721 + checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" 722 + dependencies = [ 723 + "powerfmt", 724 + "serde_core", 725 + ] 726 + 727 + [[package]] 728 + name = "derive_builder" 729 + version = "0.20.2" 730 + source = "registry+https://github.com/rust-lang/crates.io-index" 731 + checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" 732 + dependencies = [ 733 + "derive_builder_macro", 734 + ] 735 + 736 + [[package]] 737 + name = "derive_builder_core" 738 + version = "0.20.2" 739 + source = "registry+https://github.com/rust-lang/crates.io-index" 740 + checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" 741 + dependencies = [ 742 + "darling 0.20.11", 743 + "proc-macro2", 744 + "quote", 745 + "syn 2.0.117", 746 + ] 747 + 748 + [[package]] 749 + name = "derive_builder_macro" 750 + version = "0.20.2" 751 + source = "registry+https://github.com/rust-lang/crates.io-index" 752 + checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" 753 + dependencies = [ 754 + "derive_builder_core", 755 + "syn 2.0.117", 756 + ] 757 + 758 + [[package]] 236 759 name = "digest" 237 760 version = "0.10.7" 238 761 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 250 773 dependencies = [ 251 774 "proc-macro2", 252 775 "quote", 253 - "syn 2.0.116", 776 + "syn 2.0.117", 254 777 ] 255 778 256 779 [[package]] ··· 260 783 checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 261 784 262 785 [[package]] 786 + name = "dyn-clone" 787 + version = "1.0.20" 788 + source = "registry+https://github.com/rust-lang/crates.io-index" 789 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 790 + 791 + [[package]] 792 + name = "either" 793 + version = "1.15.0" 794 + source = "registry+https://github.com/rust-lang/crates.io-index" 795 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 796 + 797 + [[package]] 263 798 name = "enfync" 264 799 version = "0.1.6" 265 800 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 297 832 ] 298 833 299 834 [[package]] 835 + name = "equator" 836 + version = "0.4.2" 837 + source = "registry+https://github.com/rust-lang/crates.io-index" 838 + checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" 839 + dependencies = [ 840 + "equator-macro", 841 + ] 842 + 843 + [[package]] 844 + name = "equator-macro" 845 + version = "0.4.2" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" 848 + dependencies = [ 849 + "proc-macro2", 850 + "quote", 851 + "syn 2.0.117", 852 + ] 853 + 854 + [[package]] 855 + name = "equivalent" 856 + version = "1.0.2" 857 + source = "registry+https://github.com/rust-lang/crates.io-index" 858 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 859 + 860 + [[package]] 861 + name = "errno" 862 + version = "0.3.14" 863 + source = "registry+https://github.com/rust-lang/crates.io-index" 864 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 865 + dependencies = [ 866 + "libc", 867 + "windows-sys 0.61.2", 868 + ] 869 + 870 + [[package]] 300 871 name = "event-listener" 301 872 version = "2.5.3" 302 873 source = "registry+https://github.com/rust-lang/crates.io-index" 303 874 checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 304 875 305 876 [[package]] 877 + name = "exr" 878 + version = "1.74.0" 879 + source = "registry+https://github.com/rust-lang/crates.io-index" 880 + checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" 881 + dependencies = [ 882 + "bit_field", 883 + "half", 884 + "lebe", 885 + "miniz_oxide", 886 + "rayon-core", 887 + "smallvec", 888 + "zune-inflate", 889 + ] 890 + 891 + [[package]] 306 892 name = "ezsockets" 307 893 version = "0.7.1" 308 894 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 311 897 "async-channel", 312 898 "async-trait", 313 899 "atomic_enum", 314 - "base64", 900 + "base64 0.21.7", 315 901 "bytes", 316 902 "cfg-if", 317 903 "enfync", ··· 331 917 ] 332 918 333 919 [[package]] 920 + name = "fallible-iterator" 921 + version = "0.3.0" 922 + source = "registry+https://github.com/rust-lang/crates.io-index" 923 + checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 924 + 925 + [[package]] 926 + name = "fastbloom" 927 + version = "0.14.1" 928 + source = "registry+https://github.com/rust-lang/crates.io-index" 929 + checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" 930 + dependencies = [ 931 + "getrandom 0.3.4", 932 + "libm", 933 + "rand", 934 + "siphasher", 935 + ] 936 + 937 + [[package]] 938 + name = "fastrand" 939 + version = "2.3.0" 940 + source = "registry+https://github.com/rust-lang/crates.io-index" 941 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 942 + 943 + [[package]] 944 + name = "fax" 945 + version = "0.2.6" 946 + source = "registry+https://github.com/rust-lang/crates.io-index" 947 + checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" 948 + dependencies = [ 949 + "fax_derive", 950 + ] 951 + 952 + [[package]] 953 + name = "fax_derive" 954 + version = "0.2.0" 955 + source = "registry+https://github.com/rust-lang/crates.io-index" 956 + checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" 957 + dependencies = [ 958 + "proc-macro2", 959 + "quote", 960 + "syn 2.0.117", 961 + ] 962 + 963 + [[package]] 964 + name = "fdeflate" 965 + version = "0.3.7" 966 + source = "registry+https://github.com/rust-lang/crates.io-index" 967 + checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 968 + dependencies = [ 969 + "simd-adler32", 970 + ] 971 + 972 + [[package]] 334 973 name = "find-msvc-tools" 335 974 version = "0.1.9" 336 975 source = "registry+https://github.com/rust-lang/crates.io-index" 337 976 checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" 338 977 339 978 [[package]] 979 + name = "flate2" 980 + version = "1.1.9" 981 + source = "registry+https://github.com/rust-lang/crates.io-index" 982 + checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" 983 + dependencies = [ 984 + "crc32fast", 985 + "miniz_oxide", 986 + ] 987 + 988 + [[package]] 340 989 name = "fluxer-rs" 341 - version = "0.1.1" 990 + version = "0.1.2" 342 991 dependencies = [ 343 992 "async-trait", 993 + "derive_builder", 344 994 "ezsockets", 995 + "image", 345 996 "log", 997 + "minreq", 346 998 "serde", 347 999 "serde_json", 1000 + "serde_with", 348 1001 "tokio", 349 1002 ] 350 1003 351 1004 [[package]] 1005 + name = "fnv" 1006 + version = "1.0.7" 1007 + source = "registry+https://github.com/rust-lang/crates.io-index" 1008 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1009 + 1010 + [[package]] 1011 + name = "foldhash" 1012 + version = "0.1.5" 1013 + source = "registry+https://github.com/rust-lang/crates.io-index" 1014 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1015 + 1016 + [[package]] 352 1017 name = "form_urlencoded" 353 1018 version = "1.2.2" 354 1019 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 419 1084 dependencies = [ 420 1085 "proc-macro2", 421 1086 "quote", 422 - "syn 2.0.116", 1087 + "syn 2.0.117", 423 1088 ] 424 1089 425 1090 [[package]] ··· 452 1117 ] 453 1118 454 1119 [[package]] 1120 + name = "genawaiter" 1121 + version = "0.99.1" 1122 + source = "registry+https://github.com/rust-lang/crates.io-index" 1123 + checksum = "c86bd0361bcbde39b13475e6e36cb24c329964aa2611be285289d1e4b751c1a0" 1124 + dependencies = [ 1125 + "genawaiter-macro", 1126 + ] 1127 + 1128 + [[package]] 1129 + name = "genawaiter-macro" 1130 + version = "0.99.1" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "0b32dfe1fdfc0bbde1f22a5da25355514b5e450c33a6af6770884c8750aedfbc" 1133 + 1134 + [[package]] 455 1135 name = "generic-array" 456 1136 version = "0.14.7" 457 1137 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 487 1167 ] 488 1168 489 1169 [[package]] 1170 + name = "getrandom" 1171 + version = "0.4.1" 1172 + source = "registry+https://github.com/rust-lang/crates.io-index" 1173 + checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" 1174 + dependencies = [ 1175 + "cfg-if", 1176 + "libc", 1177 + "r-efi", 1178 + "wasip2", 1179 + "wasip3", 1180 + ] 1181 + 1182 + [[package]] 1183 + name = "ghash" 1184 + version = "0.5.1" 1185 + source = "registry+https://github.com/rust-lang/crates.io-index" 1186 + checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" 1187 + dependencies = [ 1188 + "opaque-debug", 1189 + "polyval", 1190 + ] 1191 + 1192 + [[package]] 1193 + name = "gif" 1194 + version = "0.14.1" 1195 + source = "registry+https://github.com/rust-lang/crates.io-index" 1196 + checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" 1197 + dependencies = [ 1198 + "color_quant", 1199 + "weezl", 1200 + ] 1201 + 1202 + [[package]] 1203 + name = "git2" 1204 + version = "0.20.4" 1205 + source = "registry+https://github.com/rust-lang/crates.io-index" 1206 + checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" 1207 + dependencies = [ 1208 + "bitflags", 1209 + "libc", 1210 + "libgit2-sys", 1211 + "log", 1212 + "url", 1213 + ] 1214 + 1215 + [[package]] 1216 + name = "glob" 1217 + version = "0.3.3" 1218 + source = "registry+https://github.com/rust-lang/crates.io-index" 1219 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1220 + 1221 + [[package]] 1222 + name = "half" 1223 + version = "2.7.1" 1224 + source = "registry+https://github.com/rust-lang/crates.io-index" 1225 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1226 + dependencies = [ 1227 + "cfg-if", 1228 + "crunchy", 1229 + "zerocopy", 1230 + ] 1231 + 1232 + [[package]] 1233 + name = "hashbrown" 1234 + version = "0.12.3" 1235 + source = "registry+https://github.com/rust-lang/crates.io-index" 1236 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1237 + 1238 + [[package]] 1239 + name = "hashbrown" 1240 + version = "0.15.5" 1241 + source = "registry+https://github.com/rust-lang/crates.io-index" 1242 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1243 + dependencies = [ 1244 + "foldhash", 1245 + ] 1246 + 1247 + [[package]] 1248 + name = "hashbrown" 1249 + version = "0.16.1" 1250 + source = "registry+https://github.com/rust-lang/crates.io-index" 1251 + checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1252 + 1253 + [[package]] 1254 + name = "heck" 1255 + version = "0.5.0" 1256 + source = "registry+https://github.com/rust-lang/crates.io-index" 1257 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1258 + 1259 + [[package]] 1260 + name = "hermit-abi" 1261 + version = "0.5.2" 1262 + source = "registry+https://github.com/rust-lang/crates.io-index" 1263 + checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1264 + 1265 + [[package]] 1266 + name = "hex" 1267 + version = "0.4.3" 1268 + source = "registry+https://github.com/rust-lang/crates.io-index" 1269 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1270 + 1271 + [[package]] 1272 + name = "home" 1273 + version = "0.5.12" 1274 + source = "registry+https://github.com/rust-lang/crates.io-index" 1275 + checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" 1276 + dependencies = [ 1277 + "windows-sys 0.61.2", 1278 + ] 1279 + 1280 + [[package]] 490 1281 name = "http" 491 1282 version = "1.4.0" 492 1283 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 501 1292 version = "1.10.1" 502 1293 source = "registry+https://github.com/rust-lang/crates.io-index" 503 1294 checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1295 + 1296 + [[package]] 1297 + name = "iana-time-zone" 1298 + version = "0.1.65" 1299 + source = "registry+https://github.com/rust-lang/crates.io-index" 1300 + checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" 1301 + dependencies = [ 1302 + "android_system_properties", 1303 + "core-foundation-sys", 1304 + "iana-time-zone-haiku", 1305 + "js-sys", 1306 + "log", 1307 + "wasm-bindgen", 1308 + "windows-core", 1309 + ] 1310 + 1311 + [[package]] 1312 + name = "iana-time-zone-haiku" 1313 + version = "0.1.2" 1314 + source = "registry+https://github.com/rust-lang/crates.io-index" 1315 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1316 + dependencies = [ 1317 + "cc", 1318 + ] 504 1319 505 1320 [[package]] 506 1321 name = "icu_collections" ··· 584 1399 ] 585 1400 586 1401 [[package]] 1402 + name = "id-arena" 1403 + version = "2.3.0" 1404 + source = "registry+https://github.com/rust-lang/crates.io-index" 1405 + checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 1406 + 1407 + [[package]] 1408 + name = "ident_case" 1409 + version = "1.0.1" 1410 + source = "registry+https://github.com/rust-lang/crates.io-index" 1411 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1412 + 1413 + [[package]] 587 1414 name = "idna" 588 1415 version = "1.1.0" 589 1416 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 605 1432 ] 606 1433 607 1434 [[package]] 1435 + name = "image" 1436 + version = "0.25.9" 1437 + source = "registry+https://github.com/rust-lang/crates.io-index" 1438 + checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" 1439 + dependencies = [ 1440 + "bytemuck", 1441 + "byteorder-lite", 1442 + "color_quant", 1443 + "exr", 1444 + "gif", 1445 + "image-webp", 1446 + "moxcms", 1447 + "num-traits", 1448 + "png", 1449 + "qoi", 1450 + "ravif", 1451 + "rayon", 1452 + "rgb", 1453 + "tiff", 1454 + "zune-core 0.5.1", 1455 + "zune-jpeg 0.5.12", 1456 + ] 1457 + 1458 + [[package]] 1459 + name = "image-webp" 1460 + version = "0.2.4" 1461 + source = "registry+https://github.com/rust-lang/crates.io-index" 1462 + checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" 1463 + dependencies = [ 1464 + "byteorder-lite", 1465 + "quick-error", 1466 + ] 1467 + 1468 + [[package]] 1469 + name = "imgref" 1470 + version = "1.12.0" 1471 + source = "registry+https://github.com/rust-lang/crates.io-index" 1472 + checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" 1473 + 1474 + [[package]] 1475 + name = "indexmap" 1476 + version = "1.9.3" 1477 + source = "registry+https://github.com/rust-lang/crates.io-index" 1478 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1479 + dependencies = [ 1480 + "autocfg", 1481 + "hashbrown 0.12.3", 1482 + "serde", 1483 + ] 1484 + 1485 + [[package]] 1486 + name = "indexmap" 1487 + version = "2.13.0" 1488 + source = "registry+https://github.com/rust-lang/crates.io-index" 1489 + checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" 1490 + dependencies = [ 1491 + "equivalent", 1492 + "hashbrown 0.16.1", 1493 + "serde", 1494 + "serde_core", 1495 + ] 1496 + 1497 + [[package]] 1498 + name = "inout" 1499 + version = "0.1.4" 1500 + source = "registry+https://github.com/rust-lang/crates.io-index" 1501 + checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 1502 + dependencies = [ 1503 + "generic-array", 1504 + ] 1505 + 1506 + [[package]] 1507 + name = "interpolate_name" 1508 + version = "0.2.4" 1509 + source = "registry+https://github.com/rust-lang/crates.io-index" 1510 + checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" 1511 + dependencies = [ 1512 + "proc-macro2", 1513 + "quote", 1514 + "syn 2.0.117", 1515 + ] 1516 + 1517 + [[package]] 1518 + name = "intrusive-collections" 1519 + version = "0.9.7" 1520 + source = "registry+https://github.com/rust-lang/crates.io-index" 1521 + checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" 1522 + dependencies = [ 1523 + "memoffset", 1524 + ] 1525 + 1526 + [[package]] 1527 + name = "io-uring" 1528 + version = "0.7.11" 1529 + source = "registry+https://github.com/rust-lang/crates.io-index" 1530 + checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" 1531 + dependencies = [ 1532 + "bitflags", 1533 + "cfg-if", 1534 + "libc", 1535 + ] 1536 + 1537 + [[package]] 608 1538 name = "is_terminal_polyfill" 609 1539 version = "1.70.2" 610 1540 source = "registry+https://github.com/rust-lang/crates.io-index" 611 1541 checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 612 1542 613 1543 [[package]] 1544 + name = "itertools" 1545 + version = "0.12.1" 1546 + source = "registry+https://github.com/rust-lang/crates.io-index" 1547 + checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 1548 + dependencies = [ 1549 + "either", 1550 + ] 1551 + 1552 + [[package]] 1553 + name = "itertools" 1554 + version = "0.14.0" 1555 + source = "registry+https://github.com/rust-lang/crates.io-index" 1556 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 1557 + dependencies = [ 1558 + "either", 1559 + ] 1560 + 1561 + [[package]] 614 1562 name = "itoa" 615 1563 version = "1.0.17" 616 1564 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 618 1566 619 1567 [[package]] 620 1568 name = "jiff" 621 - version = "0.2.20" 1569 + version = "0.2.21" 622 1570 source = "registry+https://github.com/rust-lang/crates.io-index" 623 - checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" 1571 + checksum = "b3e3d65f018c6ae946ab16e80944b97096ed73c35b221d1c478a6c81d8f57940" 624 1572 dependencies = [ 625 1573 "jiff-static", 626 1574 "log", ··· 631 1579 632 1580 [[package]] 633 1581 name = "jiff-static" 634 - version = "0.2.20" 1582 + version = "0.2.21" 635 1583 source = "registry+https://github.com/rust-lang/crates.io-index" 636 - checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" 1584 + checksum = "a17c2b211d863c7fde02cbea8a3c1a439b98e109286554f2860bdded7ff83818" 637 1585 dependencies = [ 638 1586 "proc-macro2", 639 1587 "quote", 640 - "syn 2.0.116", 1588 + "syn 2.0.117", 641 1589 ] 642 1590 643 1591 [[package]] ··· 652 1600 653 1601 [[package]] 654 1602 name = "js-sys" 655 - version = "0.3.85" 1603 + version = "0.3.88" 656 1604 source = "registry+https://github.com/rust-lang/crates.io-index" 657 - checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" 1605 + checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d" 658 1606 dependencies = [ 659 1607 "once_cell", 660 1608 "wasm-bindgen", 661 1609 ] 662 1610 663 1611 [[package]] 1612 + name = "lazy_static" 1613 + version = "1.5.0" 1614 + source = "registry+https://github.com/rust-lang/crates.io-index" 1615 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1616 + 1617 + [[package]] 1618 + name = "lazycell" 1619 + version = "1.3.0" 1620 + source = "registry+https://github.com/rust-lang/crates.io-index" 1621 + checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 1622 + 1623 + [[package]] 1624 + name = "leb128fmt" 1625 + version = "0.1.0" 1626 + source = "registry+https://github.com/rust-lang/crates.io-index" 1627 + checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 1628 + 1629 + [[package]] 1630 + name = "lebe" 1631 + version = "0.5.3" 1632 + source = "registry+https://github.com/rust-lang/crates.io-index" 1633 + checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" 1634 + 1635 + [[package]] 664 1636 name = "libc" 665 1637 version = "0.2.182" 666 1638 source = "registry+https://github.com/rust-lang/crates.io-index" 667 1639 checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" 668 1640 669 1641 [[package]] 1642 + name = "libfuzzer-sys" 1643 + version = "0.4.12" 1644 + source = "registry+https://github.com/rust-lang/crates.io-index" 1645 + checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" 1646 + dependencies = [ 1647 + "arbitrary", 1648 + "cc", 1649 + ] 1650 + 1651 + [[package]] 1652 + name = "libgit2-sys" 1653 + version = "0.18.3+1.9.2" 1654 + source = "registry+https://github.com/rust-lang/crates.io-index" 1655 + checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" 1656 + dependencies = [ 1657 + "cc", 1658 + "libc", 1659 + "libz-sys", 1660 + "pkg-config", 1661 + ] 1662 + 1663 + [[package]] 1664 + name = "libloading" 1665 + version = "0.8.9" 1666 + source = "registry+https://github.com/rust-lang/crates.io-index" 1667 + checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 1668 + dependencies = [ 1669 + "cfg-if", 1670 + "windows-link", 1671 + ] 1672 + 1673 + [[package]] 1674 + name = "libm" 1675 + version = "0.2.16" 1676 + source = "registry+https://github.com/rust-lang/crates.io-index" 1677 + checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" 1678 + 1679 + [[package]] 1680 + name = "libmimalloc-sys" 1681 + version = "0.1.44" 1682 + source = "registry+https://github.com/rust-lang/crates.io-index" 1683 + checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" 1684 + dependencies = [ 1685 + "cc", 1686 + "libc", 1687 + ] 1688 + 1689 + [[package]] 1690 + name = "libz-sys" 1691 + version = "1.1.23" 1692 + source = "registry+https://github.com/rust-lang/crates.io-index" 1693 + checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" 1694 + dependencies = [ 1695 + "cc", 1696 + "libc", 1697 + "pkg-config", 1698 + "vcpkg", 1699 + ] 1700 + 1701 + [[package]] 1702 + name = "linux-raw-sys" 1703 + version = "0.4.15" 1704 + source = "registry+https://github.com/rust-lang/crates.io-index" 1705 + checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1706 + 1707 + [[package]] 1708 + name = "linux-raw-sys" 1709 + version = "0.12.1" 1710 + source = "registry+https://github.com/rust-lang/crates.io-index" 1711 + checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" 1712 + 1713 + [[package]] 670 1714 name = "litemap" 671 1715 version = "0.8.1" 672 1716 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 688 1732 checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 689 1733 690 1734 [[package]] 1735 + name = "loop9" 1736 + version = "0.1.5" 1737 + source = "registry+https://github.com/rust-lang/crates.io-index" 1738 + checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" 1739 + dependencies = [ 1740 + "imgref", 1741 + ] 1742 + 1743 + [[package]] 1744 + name = "matchers" 1745 + version = "0.2.0" 1746 + source = "registry+https://github.com/rust-lang/crates.io-index" 1747 + checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 1748 + dependencies = [ 1749 + "regex-automata", 1750 + ] 1751 + 1752 + [[package]] 1753 + name = "maybe-rayon" 1754 + version = "0.1.1" 1755 + source = "registry+https://github.com/rust-lang/crates.io-index" 1756 + checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" 1757 + dependencies = [ 1758 + "cfg-if", 1759 + "rayon", 1760 + ] 1761 + 1762 + [[package]] 691 1763 name = "memchr" 692 1764 version = "2.8.0" 693 1765 source = "registry+https://github.com/rust-lang/crates.io-index" 694 1766 checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 695 1767 696 1768 [[package]] 1769 + name = "memoffset" 1770 + version = "0.9.1" 1771 + source = "registry+https://github.com/rust-lang/crates.io-index" 1772 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1773 + dependencies = [ 1774 + "autocfg", 1775 + ] 1776 + 1777 + [[package]] 1778 + name = "miette" 1779 + version = "7.6.0" 1780 + source = "registry+https://github.com/rust-lang/crates.io-index" 1781 + checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 1782 + dependencies = [ 1783 + "cfg-if", 1784 + "miette-derive", 1785 + "unicode-width", 1786 + ] 1787 + 1788 + [[package]] 1789 + name = "miette-derive" 1790 + version = "7.6.0" 1791 + source = "registry+https://github.com/rust-lang/crates.io-index" 1792 + checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 1793 + dependencies = [ 1794 + "proc-macro2", 1795 + "quote", 1796 + "syn 2.0.117", 1797 + ] 1798 + 1799 + [[package]] 1800 + name = "mimalloc" 1801 + version = "0.1.48" 1802 + source = "registry+https://github.com/rust-lang/crates.io-index" 1803 + checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" 1804 + dependencies = [ 1805 + "libmimalloc-sys", 1806 + ] 1807 + 1808 + [[package]] 1809 + name = "minimal-lexical" 1810 + version = "0.2.1" 1811 + source = "registry+https://github.com/rust-lang/crates.io-index" 1812 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1813 + 1814 + [[package]] 1815 + name = "miniz_oxide" 1816 + version = "0.8.9" 1817 + source = "registry+https://github.com/rust-lang/crates.io-index" 1818 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1819 + dependencies = [ 1820 + "adler2", 1821 + "simd-adler32", 1822 + ] 1823 + 1824 + [[package]] 1825 + name = "minreq" 1826 + version = "2.14.1" 1827 + source = "registry+https://github.com/rust-lang/crates.io-index" 1828 + checksum = "05015102dad0f7d61691ca347e9d9d9006685a64aefb3d79eecf62665de2153d" 1829 + dependencies = [ 1830 + "rustls 0.21.12", 1831 + "rustls-webpki 0.101.7", 1832 + "webpki-roots 0.25.4", 1833 + ] 1834 + 1835 + [[package]] 697 1836 name = "mio" 698 1837 version = "1.1.1" 699 1838 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 705 1844 ] 706 1845 707 1846 [[package]] 1847 + name = "moxcms" 1848 + version = "0.7.11" 1849 + source = "registry+https://github.com/rust-lang/crates.io-index" 1850 + checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" 1851 + dependencies = [ 1852 + "num-traits", 1853 + "pxfm", 1854 + ] 1855 + 1856 + [[package]] 1857 + name = "new_debug_unreachable" 1858 + version = "1.0.6" 1859 + source = "registry+https://github.com/rust-lang/crates.io-index" 1860 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1861 + 1862 + [[package]] 1863 + name = "nom" 1864 + version = "7.1.3" 1865 + source = "registry+https://github.com/rust-lang/crates.io-index" 1866 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1867 + dependencies = [ 1868 + "memchr", 1869 + "minimal-lexical", 1870 + ] 1871 + 1872 + [[package]] 1873 + name = "nom" 1874 + version = "8.0.0" 1875 + source = "registry+https://github.com/rust-lang/crates.io-index" 1876 + checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" 1877 + dependencies = [ 1878 + "memchr", 1879 + ] 1880 + 1881 + [[package]] 1882 + name = "noop_proc_macro" 1883 + version = "0.3.0" 1884 + source = "registry+https://github.com/rust-lang/crates.io-index" 1885 + checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" 1886 + 1887 + [[package]] 1888 + name = "nu-ansi-term" 1889 + version = "0.50.3" 1890 + source = "registry+https://github.com/rust-lang/crates.io-index" 1891 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 1892 + dependencies = [ 1893 + "windows-sys 0.61.2", 1894 + ] 1895 + 1896 + [[package]] 1897 + name = "num-bigint" 1898 + version = "0.4.6" 1899 + source = "registry+https://github.com/rust-lang/crates.io-index" 1900 + checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 1901 + dependencies = [ 1902 + "num-integer", 1903 + "num-traits", 1904 + ] 1905 + 1906 + [[package]] 1907 + name = "num-conv" 1908 + version = "0.2.0" 1909 + source = "registry+https://github.com/rust-lang/crates.io-index" 1910 + checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" 1911 + 1912 + [[package]] 1913 + name = "num-derive" 1914 + version = "0.4.2" 1915 + source = "registry+https://github.com/rust-lang/crates.io-index" 1916 + checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 1917 + dependencies = [ 1918 + "proc-macro2", 1919 + "quote", 1920 + "syn 2.0.117", 1921 + ] 1922 + 1923 + [[package]] 1924 + name = "num-integer" 1925 + version = "0.1.46" 1926 + source = "registry+https://github.com/rust-lang/crates.io-index" 1927 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1928 + dependencies = [ 1929 + "num-traits", 1930 + ] 1931 + 1932 + [[package]] 1933 + name = "num-rational" 1934 + version = "0.4.2" 1935 + source = "registry+https://github.com/rust-lang/crates.io-index" 1936 + checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 1937 + dependencies = [ 1938 + "num-bigint", 1939 + "num-integer", 1940 + "num-traits", 1941 + ] 1942 + 1943 + [[package]] 1944 + name = "num-traits" 1945 + version = "0.2.19" 1946 + source = "registry+https://github.com/rust-lang/crates.io-index" 1947 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1948 + dependencies = [ 1949 + "autocfg", 1950 + ] 1951 + 1952 + [[package]] 708 1953 name = "once_cell" 709 1954 version = "1.21.3" 710 1955 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 717 1962 checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 718 1963 719 1964 [[package]] 1965 + name = "opaque-debug" 1966 + version = "0.3.1" 1967 + source = "registry+https://github.com/rust-lang/crates.io-index" 1968 + checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 1969 + 1970 + [[package]] 1971 + name = "pack1" 1972 + version = "1.0.0" 1973 + source = "registry+https://github.com/rust-lang/crates.io-index" 1974 + checksum = "d6e7cd9bd638dc2c831519a0caa1c006cab771a92b1303403a8322773c5b72d6" 1975 + dependencies = [ 1976 + "bytemuck", 1977 + ] 1978 + 1979 + [[package]] 720 1980 name = "parking_lot" 721 1981 version = "0.12.5" 722 1982 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 740 2000 ] 741 2001 742 2002 [[package]] 2003 + name = "paste" 2004 + version = "1.0.15" 2005 + source = "registry+https://github.com/rust-lang/crates.io-index" 2006 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2007 + 2008 + [[package]] 2009 + name = "pastey" 2010 + version = "0.1.1" 2011 + source = "registry+https://github.com/rust-lang/crates.io-index" 2012 + checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" 2013 + 2014 + [[package]] 743 2015 name = "percent-encoding" 744 2016 version = "2.3.2" 745 2017 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 758 2030 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 759 2031 760 2032 [[package]] 2033 + name = "pkg-config" 2034 + version = "0.3.32" 2035 + source = "registry+https://github.com/rust-lang/crates.io-index" 2036 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2037 + 2038 + [[package]] 2039 + name = "png" 2040 + version = "0.18.1" 2041 + source = "registry+https://github.com/rust-lang/crates.io-index" 2042 + checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" 2043 + dependencies = [ 2044 + "bitflags", 2045 + "crc32fast", 2046 + "fdeflate", 2047 + "flate2", 2048 + "miniz_oxide", 2049 + ] 2050 + 2051 + [[package]] 2052 + name = "polling" 2053 + version = "3.11.0" 2054 + source = "registry+https://github.com/rust-lang/crates.io-index" 2055 + checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 2056 + dependencies = [ 2057 + "cfg-if", 2058 + "concurrent-queue", 2059 + "hermit-abi", 2060 + "pin-project-lite", 2061 + "rustix 1.1.4", 2062 + "windows-sys 0.61.2", 2063 + ] 2064 + 2065 + [[package]] 2066 + name = "polyval" 2067 + version = "0.6.2" 2068 + source = "registry+https://github.com/rust-lang/crates.io-index" 2069 + checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" 2070 + dependencies = [ 2071 + "cfg-if", 2072 + "cpufeatures", 2073 + "opaque-debug", 2074 + "universal-hash", 2075 + ] 2076 + 2077 + [[package]] 761 2078 name = "portable-atomic" 762 2079 version = "1.13.1" 763 2080 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 782 2099 ] 783 2100 784 2101 [[package]] 2102 + name = "powerfmt" 2103 + version = "0.2.0" 2104 + source = "registry+https://github.com/rust-lang/crates.io-index" 2105 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2106 + 2107 + [[package]] 785 2108 name = "ppv-lite86" 786 2109 version = "0.2.21" 787 2110 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 791 2114 ] 792 2115 793 2116 [[package]] 2117 + name = "prettyplease" 2118 + version = "0.2.37" 2119 + source = "registry+https://github.com/rust-lang/crates.io-index" 2120 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2121 + dependencies = [ 2122 + "proc-macro2", 2123 + "syn 2.0.117", 2124 + ] 2125 + 2126 + [[package]] 794 2127 name = "proc-macro2" 795 2128 version = "1.0.106" 796 2129 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 800 2133 ] 801 2134 802 2135 [[package]] 2136 + name = "profiling" 2137 + version = "1.0.17" 2138 + source = "registry+https://github.com/rust-lang/crates.io-index" 2139 + checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2140 + dependencies = [ 2141 + "profiling-procmacros", 2142 + ] 2143 + 2144 + [[package]] 2145 + name = "profiling-procmacros" 2146 + version = "1.0.17" 2147 + source = "registry+https://github.com/rust-lang/crates.io-index" 2148 + checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 2149 + dependencies = [ 2150 + "quote", 2151 + "syn 2.0.117", 2152 + ] 2153 + 2154 + [[package]] 2155 + name = "prost" 2156 + version = "0.14.3" 2157 + source = "registry+https://github.com/rust-lang/crates.io-index" 2158 + checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" 2159 + dependencies = [ 2160 + "bytes", 2161 + "prost-derive", 2162 + ] 2163 + 2164 + [[package]] 2165 + name = "prost-derive" 2166 + version = "0.14.3" 2167 + source = "registry+https://github.com/rust-lang/crates.io-index" 2168 + checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" 2169 + dependencies = [ 2170 + "anyhow", 2171 + "itertools 0.14.0", 2172 + "proc-macro2", 2173 + "quote", 2174 + "syn 2.0.117", 2175 + ] 2176 + 2177 + [[package]] 2178 + name = "pxfm" 2179 + version = "0.1.27" 2180 + source = "registry+https://github.com/rust-lang/crates.io-index" 2181 + checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" 2182 + dependencies = [ 2183 + "num-traits", 2184 + ] 2185 + 2186 + [[package]] 2187 + name = "qoi" 2188 + version = "0.4.1" 2189 + source = "registry+https://github.com/rust-lang/crates.io-index" 2190 + checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" 2191 + dependencies = [ 2192 + "bytemuck", 2193 + ] 2194 + 2195 + [[package]] 2196 + name = "quick-error" 2197 + version = "2.0.1" 2198 + source = "registry+https://github.com/rust-lang/crates.io-index" 2199 + checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 2200 + 2201 + [[package]] 803 2202 name = "quote" 804 2203 version = "1.0.44" 805 2204 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 821 2220 checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 822 2221 dependencies = [ 823 2222 "rand_chacha", 824 - "rand_core", 2223 + "rand_core 0.9.5", 825 2224 ] 826 2225 827 2226 [[package]] ··· 831 2230 checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 832 2231 dependencies = [ 833 2232 "ppv-lite86", 834 - "rand_core", 2233 + "rand_core 0.9.5", 2234 + ] 2235 + 2236 + [[package]] 2237 + name = "rand_core" 2238 + version = "0.6.4" 2239 + source = "registry+https://github.com/rust-lang/crates.io-index" 2240 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2241 + dependencies = [ 2242 + "getrandom 0.2.17", 835 2243 ] 836 2244 837 2245 [[package]] ··· 844 2252 ] 845 2253 846 2254 [[package]] 2255 + name = "rapidhash" 2256 + version = "4.4.1" 2257 + source = "registry+https://github.com/rust-lang/crates.io-index" 2258 + checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" 2259 + dependencies = [ 2260 + "rustversion", 2261 + ] 2262 + 2263 + [[package]] 2264 + name = "rav1e" 2265 + version = "0.8.1" 2266 + source = "registry+https://github.com/rust-lang/crates.io-index" 2267 + checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" 2268 + dependencies = [ 2269 + "aligned-vec", 2270 + "arbitrary", 2271 + "arg_enum_proc_macro", 2272 + "arrayvec", 2273 + "av-scenechange", 2274 + "av1-grain", 2275 + "bitstream-io", 2276 + "built 0.8.0", 2277 + "cfg-if", 2278 + "interpolate_name", 2279 + "itertools 0.14.0", 2280 + "libc", 2281 + "libfuzzer-sys", 2282 + "log", 2283 + "maybe-rayon", 2284 + "new_debug_unreachable", 2285 + "noop_proc_macro", 2286 + "num-derive", 2287 + "num-traits", 2288 + "paste", 2289 + "profiling", 2290 + "rand", 2291 + "rand_chacha", 2292 + "simd_helpers", 2293 + "thiserror", 2294 + "v_frame", 2295 + "wasm-bindgen", 2296 + ] 2297 + 2298 + [[package]] 2299 + name = "ravif" 2300 + version = "0.12.0" 2301 + source = "registry+https://github.com/rust-lang/crates.io-index" 2302 + checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" 2303 + dependencies = [ 2304 + "avif-serialize", 2305 + "imgref", 2306 + "loop9", 2307 + "quick-error", 2308 + "rav1e", 2309 + "rayon", 2310 + "rgb", 2311 + ] 2312 + 2313 + [[package]] 2314 + name = "rayon" 2315 + version = "1.11.0" 2316 + source = "registry+https://github.com/rust-lang/crates.io-index" 2317 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 2318 + dependencies = [ 2319 + "either", 2320 + "rayon-core", 2321 + ] 2322 + 2323 + [[package]] 2324 + name = "rayon-core" 2325 + version = "1.13.0" 2326 + source = "registry+https://github.com/rust-lang/crates.io-index" 2327 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 2328 + dependencies = [ 2329 + "crossbeam-deque", 2330 + "crossbeam-utils", 2331 + ] 2332 + 2333 + [[package]] 847 2334 name = "redox_syscall" 848 2335 version = "0.5.18" 849 2336 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 853 2340 ] 854 2341 855 2342 [[package]] 2343 + name = "ref-cast" 2344 + version = "1.0.25" 2345 + source = "registry+https://github.com/rust-lang/crates.io-index" 2346 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 2347 + dependencies = [ 2348 + "ref-cast-impl", 2349 + ] 2350 + 2351 + [[package]] 2352 + name = "ref-cast-impl" 2353 + version = "1.0.25" 2354 + source = "registry+https://github.com/rust-lang/crates.io-index" 2355 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 2356 + dependencies = [ 2357 + "proc-macro2", 2358 + "quote", 2359 + "syn 2.0.117", 2360 + ] 2361 + 2362 + [[package]] 856 2363 name = "regex" 857 2364 version = "1.12.3" 858 2365 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 882 2389 checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" 883 2390 884 2391 [[package]] 2392 + name = "rgb" 2393 + version = "0.8.52" 2394 + source = "registry+https://github.com/rust-lang/crates.io-index" 2395 + checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" 2396 + 2397 + [[package]] 885 2398 name = "ring" 886 2399 version = "0.17.14" 887 2400 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 896 2409 ] 897 2410 898 2411 [[package]] 2412 + name = "roaring" 2413 + version = "0.11.3" 2414 + source = "registry+https://github.com/rust-lang/crates.io-index" 2415 + checksum = "8ba9ce64a8f45d7fc86358410bb1a82e8c987504c0d4900e9141d69a9f26c885" 2416 + dependencies = [ 2417 + "bytemuck", 2418 + "byteorder", 2419 + ] 2420 + 2421 + [[package]] 2422 + name = "rustc-hash" 2423 + version = "1.1.0" 2424 + source = "registry+https://github.com/rust-lang/crates.io-index" 2425 + checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2426 + 2427 + [[package]] 2428 + name = "rustc-hash" 2429 + version = "2.1.1" 2430 + source = "registry+https://github.com/rust-lang/crates.io-index" 2431 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2432 + 2433 + [[package]] 2434 + name = "rustc_version" 2435 + version = "0.4.1" 2436 + source = "registry+https://github.com/rust-lang/crates.io-index" 2437 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2438 + dependencies = [ 2439 + "semver", 2440 + ] 2441 + 2442 + [[package]] 2443 + name = "rustix" 2444 + version = "0.38.44" 2445 + source = "registry+https://github.com/rust-lang/crates.io-index" 2446 + checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2447 + dependencies = [ 2448 + "bitflags", 2449 + "errno", 2450 + "libc", 2451 + "linux-raw-sys 0.4.15", 2452 + "windows-sys 0.52.0", 2453 + ] 2454 + 2455 + [[package]] 2456 + name = "rustix" 2457 + version = "1.1.4" 2458 + source = "registry+https://github.com/rust-lang/crates.io-index" 2459 + checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" 2460 + dependencies = [ 2461 + "bitflags", 2462 + "errno", 2463 + "libc", 2464 + "linux-raw-sys 0.12.1", 2465 + "windows-sys 0.61.2", 2466 + ] 2467 + 2468 + [[package]] 2469 + name = "rustls" 2470 + version = "0.21.12" 2471 + source = "registry+https://github.com/rust-lang/crates.io-index" 2472 + checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 2473 + dependencies = [ 2474 + "log", 2475 + "ring", 2476 + "rustls-webpki 0.101.7", 2477 + "sct", 2478 + ] 2479 + 2480 + [[package]] 899 2481 name = "rustls" 900 2482 version = "0.23.36" 901 2483 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 905 2487 "log", 906 2488 "once_cell", 907 2489 "rustls-pki-types", 908 - "rustls-webpki", 2490 + "rustls-webpki 0.103.9", 909 2491 "subtle", 910 2492 "zeroize", 911 2493 ] ··· 921 2503 922 2504 [[package]] 923 2505 name = "rustls-webpki" 2506 + version = "0.101.7" 2507 + source = "registry+https://github.com/rust-lang/crates.io-index" 2508 + checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 2509 + dependencies = [ 2510 + "ring", 2511 + "untrusted", 2512 + ] 2513 + 2514 + [[package]] 2515 + name = "rustls-webpki" 924 2516 version = "0.103.9" 925 2517 source = "registry+https://github.com/rust-lang/crates.io-index" 926 2518 checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" ··· 938 2530 checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 939 2531 940 2532 [[package]] 2533 + name = "ryu" 2534 + version = "1.0.23" 2535 + source = "registry+https://github.com/rust-lang/crates.io-index" 2536 + checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" 2537 + 2538 + [[package]] 2539 + name = "schemars" 2540 + version = "0.9.0" 2541 + source = "registry+https://github.com/rust-lang/crates.io-index" 2542 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 2543 + dependencies = [ 2544 + "dyn-clone", 2545 + "ref-cast", 2546 + "serde", 2547 + "serde_json", 2548 + ] 2549 + 2550 + [[package]] 2551 + name = "schemars" 2552 + version = "1.2.1" 2553 + source = "registry+https://github.com/rust-lang/crates.io-index" 2554 + checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" 2555 + dependencies = [ 2556 + "dyn-clone", 2557 + "ref-cast", 2558 + "serde", 2559 + "serde_json", 2560 + ] 2561 + 2562 + [[package]] 941 2563 name = "scopeguard" 942 2564 version = "1.2.0" 943 2565 source = "registry+https://github.com/rust-lang/crates.io-index" 944 2566 checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 945 2567 946 2568 [[package]] 2569 + name = "sct" 2570 + version = "0.7.1" 2571 + source = "registry+https://github.com/rust-lang/crates.io-index" 2572 + checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 2573 + dependencies = [ 2574 + "ring", 2575 + "untrusted", 2576 + ] 2577 + 2578 + [[package]] 2579 + name = "semver" 2580 + version = "1.0.27" 2581 + source = "registry+https://github.com/rust-lang/crates.io-index" 2582 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 2583 + 2584 + [[package]] 947 2585 name = "serde" 948 2586 version = "1.0.228" 949 2587 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 970 2608 dependencies = [ 971 2609 "proc-macro2", 972 2610 "quote", 973 - "syn 2.0.116", 2611 + "syn 2.0.117", 974 2612 ] 975 2613 976 2614 [[package]] ··· 987 2625 ] 988 2626 989 2627 [[package]] 2628 + name = "serde_with" 2629 + version = "3.16.1" 2630 + source = "registry+https://github.com/rust-lang/crates.io-index" 2631 + checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" 2632 + dependencies = [ 2633 + "base64 0.22.1", 2634 + "chrono", 2635 + "hex", 2636 + "indexmap 1.9.3", 2637 + "indexmap 2.13.0", 2638 + "schemars 0.9.0", 2639 + "schemars 1.2.1", 2640 + "serde_core", 2641 + "serde_json", 2642 + "serde_with_macros", 2643 + "time", 2644 + ] 2645 + 2646 + [[package]] 2647 + name = "serde_with_macros" 2648 + version = "3.16.1" 2649 + source = "registry+https://github.com/rust-lang/crates.io-index" 2650 + checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" 2651 + dependencies = [ 2652 + "darling 0.21.3", 2653 + "proc-macro2", 2654 + "quote", 2655 + "syn 2.0.117", 2656 + ] 2657 + 2658 + [[package]] 990 2659 name = "sha1" 991 2660 version = "0.10.6" 992 2661 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 998 2667 ] 999 2668 1000 2669 [[package]] 2670 + name = "sha1_smol" 2671 + version = "1.0.1" 2672 + source = "registry+https://github.com/rust-lang/crates.io-index" 2673 + checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 2674 + 2675 + [[package]] 2676 + name = "sharded-slab" 2677 + version = "0.1.7" 2678 + source = "registry+https://github.com/rust-lang/crates.io-index" 2679 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2680 + dependencies = [ 2681 + "lazy_static", 2682 + ] 2683 + 2684 + [[package]] 1001 2685 name = "shlex" 1002 2686 version = "1.3.0" 1003 2687 source = "registry+https://github.com/rust-lang/crates.io-index" 1004 2688 checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1005 2689 1006 2690 [[package]] 2691 + name = "simd-adler32" 2692 + version = "0.3.8" 2693 + source = "registry+https://github.com/rust-lang/crates.io-index" 2694 + checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 2695 + 2696 + [[package]] 2697 + name = "simd_helpers" 2698 + version = "0.1.0" 2699 + source = "registry+https://github.com/rust-lang/crates.io-index" 2700 + checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" 2701 + dependencies = [ 2702 + "quote", 2703 + ] 2704 + 2705 + [[package]] 2706 + name = "simsimd" 2707 + version = "6.5.13" 2708 + source = "registry+https://github.com/rust-lang/crates.io-index" 2709 + checksum = "9f81af684ca3dc160907f1478d779bdfd8bae52f55f4c58caba0229670a83a0d" 2710 + dependencies = [ 2711 + "cc", 2712 + ] 2713 + 2714 + [[package]] 2715 + name = "siphasher" 2716 + version = "1.0.2" 2717 + source = "registry+https://github.com/rust-lang/crates.io-index" 2718 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 2719 + 2720 + [[package]] 1007 2721 name = "slab" 1008 2722 version = "0.4.12" 1009 2723 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1026 2740 ] 1027 2741 1028 2742 [[package]] 2743 + name = "softaes" 2744 + version = "0.1.3" 2745 + source = "registry+https://github.com/rust-lang/crates.io-index" 2746 + checksum = "fef461faaeb36c340b6c887167a9054a034f6acfc50a014ead26a02b4356b3de" 2747 + 2748 + [[package]] 1029 2749 name = "stable_deref_trait" 1030 2750 version = "1.2.1" 1031 2751 source = "registry+https://github.com/rust-lang/crates.io-index" 1032 2752 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 1033 2753 1034 2754 [[package]] 2755 + name = "strsim" 2756 + version = "0.11.1" 2757 + source = "registry+https://github.com/rust-lang/crates.io-index" 2758 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2759 + 2760 + [[package]] 2761 + name = "strum" 2762 + version = "0.26.3" 2763 + source = "registry+https://github.com/rust-lang/crates.io-index" 2764 + checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2765 + dependencies = [ 2766 + "strum_macros", 2767 + ] 2768 + 2769 + [[package]] 2770 + name = "strum_macros" 2771 + version = "0.26.4" 2772 + source = "registry+https://github.com/rust-lang/crates.io-index" 2773 + checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2774 + dependencies = [ 2775 + "heck", 2776 + "proc-macro2", 2777 + "quote", 2778 + "rustversion", 2779 + "syn 2.0.117", 2780 + ] 2781 + 2782 + [[package]] 1035 2783 name = "subtle" 1036 2784 version = "2.6.1" 1037 2785 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1050 2798 1051 2799 [[package]] 1052 2800 name = "syn" 1053 - version = "2.0.116" 2801 + version = "2.0.117" 1054 2802 source = "registry+https://github.com/rust-lang/crates.io-index" 1055 - checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" 2803 + checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" 1056 2804 dependencies = [ 1057 2805 "proc-macro2", 1058 2806 "quote", ··· 1067 2815 dependencies = [ 1068 2816 "proc-macro2", 1069 2817 "quote", 1070 - "syn 2.0.116", 2818 + "syn 2.0.117", 2819 + ] 2820 + 2821 + [[package]] 2822 + name = "tempfile" 2823 + version = "3.25.0" 2824 + source = "registry+https://github.com/rust-lang/crates.io-index" 2825 + checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" 2826 + dependencies = [ 2827 + "fastrand", 2828 + "getrandom 0.3.4", 2829 + "once_cell", 2830 + "rustix 1.1.4", 2831 + "windows-sys 0.61.2", 1071 2832 ] 1072 2833 1073 2834 [[package]] ··· 1087 2848 dependencies = [ 1088 2849 "proc-macro2", 1089 2850 "quote", 1090 - "syn 2.0.116", 2851 + "syn 2.0.117", 2852 + ] 2853 + 2854 + [[package]] 2855 + name = "thread_local" 2856 + version = "1.1.9" 2857 + source = "registry+https://github.com/rust-lang/crates.io-index" 2858 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 2859 + dependencies = [ 2860 + "cfg-if", 2861 + ] 2862 + 2863 + [[package]] 2864 + name = "tiff" 2865 + version = "0.10.3" 2866 + source = "registry+https://github.com/rust-lang/crates.io-index" 2867 + checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 2868 + dependencies = [ 2869 + "fax", 2870 + "flate2", 2871 + "half", 2872 + "quick-error", 2873 + "weezl", 2874 + "zune-jpeg 0.4.21", 2875 + ] 2876 + 2877 + [[package]] 2878 + name = "time" 2879 + version = "0.3.47" 2880 + source = "registry+https://github.com/rust-lang/crates.io-index" 2881 + checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" 2882 + dependencies = [ 2883 + "deranged", 2884 + "itoa", 2885 + "num-conv", 2886 + "powerfmt", 2887 + "serde_core", 2888 + "time-core", 2889 + "time-macros", 2890 + ] 2891 + 2892 + [[package]] 2893 + name = "time-core" 2894 + version = "0.1.8" 2895 + source = "registry+https://github.com/rust-lang/crates.io-index" 2896 + checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" 2897 + 2898 + [[package]] 2899 + name = "time-macros" 2900 + version = "0.2.27" 2901 + source = "registry+https://github.com/rust-lang/crates.io-index" 2902 + checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" 2903 + dependencies = [ 2904 + "num-conv", 2905 + "time-core", 1091 2906 ] 1092 2907 1093 2908 [[package]] ··· 1123 2938 dependencies = [ 1124 2939 "proc-macro2", 1125 2940 "quote", 1126 - "syn 2.0.116", 2941 + "syn 2.0.117", 1127 2942 ] 1128 2943 1129 2944 [[package]] ··· 1132 2947 source = "registry+https://github.com/rust-lang/crates.io-index" 1133 2948 checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 1134 2949 dependencies = [ 1135 - "rustls", 2950 + "rustls 0.23.36", 1136 2951 "tokio", 1137 2952 ] 1138 2953 ··· 1144 2959 dependencies = [ 1145 2960 "futures-util", 1146 2961 "log", 1147 - "rustls", 2962 + "rustls 0.23.36", 1148 2963 "rustls-pki-types", 1149 2964 "tokio", 1150 2965 "tokio-rustls", ··· 1183 2998 ] 1184 2999 1185 3000 [[package]] 3001 + name = "tracing-appender" 3002 + version = "0.2.4" 3003 + source = "registry+https://github.com/rust-lang/crates.io-index" 3004 + checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf" 3005 + dependencies = [ 3006 + "crossbeam-channel", 3007 + "thiserror", 3008 + "time", 3009 + "tracing-subscriber", 3010 + ] 3011 + 3012 + [[package]] 1186 3013 name = "tracing-attributes" 1187 3014 version = "0.1.31" 1188 3015 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1190 3017 dependencies = [ 1191 3018 "proc-macro2", 1192 3019 "quote", 1193 - "syn 2.0.116", 3020 + "syn 2.0.117", 1194 3021 ] 1195 3022 1196 3023 [[package]] ··· 1200 3027 checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 1201 3028 dependencies = [ 1202 3029 "once_cell", 3030 + "valuable", 3031 + ] 3032 + 3033 + [[package]] 3034 + name = "tracing-log" 3035 + version = "0.2.0" 3036 + source = "registry+https://github.com/rust-lang/crates.io-index" 3037 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3038 + dependencies = [ 3039 + "log", 3040 + "once_cell", 3041 + "tracing-core", 3042 + ] 3043 + 3044 + [[package]] 3045 + name = "tracing-subscriber" 3046 + version = "0.3.22" 3047 + source = "registry+https://github.com/rust-lang/crates.io-index" 3048 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 3049 + dependencies = [ 3050 + "matchers", 3051 + "nu-ansi-term", 3052 + "once_cell", 3053 + "regex-automata", 3054 + "sharded-slab", 3055 + "smallvec", 3056 + "thread_local", 3057 + "tracing", 3058 + "tracing-core", 3059 + "tracing-log", 1203 3060 ] 1204 3061 1205 3062 [[package]] ··· 1214 3071 "httparse", 1215 3072 "log", 1216 3073 "rand", 1217 - "rustls", 3074 + "rustls 0.23.36", 1218 3075 "rustls-pki-types", 1219 3076 "sha1", 1220 3077 "thiserror", ··· 1222 3079 ] 1223 3080 1224 3081 [[package]] 3082 + name = "turso" 3083 + version = "0.4.4" 3084 + source = "registry+https://github.com/rust-lang/crates.io-index" 3085 + checksum = "1f2fe423c2c954948babb36edda12b737e321d8541d4eae519694f7d512ecab6" 3086 + dependencies = [ 3087 + "mimalloc", 3088 + "thiserror", 3089 + "tracing", 3090 + "tracing-subscriber", 3091 + "turso_sdk_kit", 3092 + "turso_sync_sdk_kit", 3093 + ] 3094 + 3095 + [[package]] 3096 + name = "turso_core" 3097 + version = "0.4.4" 3098 + source = "registry+https://github.com/rust-lang/crates.io-index" 3099 + checksum = "7a8b54994ee025964459322bcdb4f6f78c5dba82643863dabfac680f16c8afa8" 3100 + dependencies = [ 3101 + "aegis", 3102 + "aes", 3103 + "aes-gcm", 3104 + "arc-swap", 3105 + "bitflags", 3106 + "branches", 3107 + "built 0.7.7", 3108 + "bumpalo", 3109 + "bytemuck", 3110 + "cfg_block", 3111 + "chrono", 3112 + "crossbeam-skiplist", 3113 + "either", 3114 + "fallible-iterator", 3115 + "fastbloom", 3116 + "hex", 3117 + "intrusive-collections", 3118 + "io-uring", 3119 + "libc", 3120 + "libloading", 3121 + "libm", 3122 + "miette", 3123 + "pack1", 3124 + "parking_lot", 3125 + "paste", 3126 + "polling", 3127 + "rand", 3128 + "rapidhash", 3129 + "regex", 3130 + "regex-syntax", 3131 + "roaring", 3132 + "rustc-hash 2.1.1", 3133 + "rustix 1.1.4", 3134 + "ryu", 3135 + "simsimd", 3136 + "strum", 3137 + "strum_macros", 3138 + "tempfile", 3139 + "thiserror", 3140 + "tracing", 3141 + "tracing-subscriber", 3142 + "turso_ext", 3143 + "turso_macros", 3144 + "turso_parser", 3145 + "twox-hash", 3146 + "uncased", 3147 + "uuid", 3148 + ] 3149 + 3150 + [[package]] 3151 + name = "turso_ext" 3152 + version = "0.4.4" 3153 + source = "registry+https://github.com/rust-lang/crates.io-index" 3154 + checksum = "2de917b4c5881bfb34ccbb1dcf4992773bc39853eacf248955f2ece7e3cb3049" 3155 + dependencies = [ 3156 + "chrono", 3157 + "getrandom 0.3.4", 3158 + "turso_macros", 3159 + ] 3160 + 3161 + [[package]] 3162 + name = "turso_macros" 3163 + version = "0.4.4" 3164 + source = "registry+https://github.com/rust-lang/crates.io-index" 3165 + checksum = "cc2f62bb271d4cf202bc2acbeb8e2c3f764ec754924f144e704cdcba2e5b0c84" 3166 + dependencies = [ 3167 + "proc-macro2", 3168 + "quote", 3169 + "syn 2.0.117", 3170 + ] 3171 + 3172 + [[package]] 3173 + name = "turso_parser" 3174 + version = "0.4.4" 3175 + source = "registry+https://github.com/rust-lang/crates.io-index" 3176 + checksum = "92ad89caa1c4888756bd027485499d1dc4c8420d15887ab32aa28b707c411221" 3177 + dependencies = [ 3178 + "bitflags", 3179 + "memchr", 3180 + "miette", 3181 + "strum", 3182 + "strum_macros", 3183 + "thiserror", 3184 + "turso_macros", 3185 + ] 3186 + 3187 + [[package]] 3188 + name = "turso_sdk_kit" 3189 + version = "0.4.4" 3190 + source = "registry+https://github.com/rust-lang/crates.io-index" 3191 + checksum = "00ff5b2cadd6c8b749511648d50c95f69bfa52efc5d88cc2e2deedd0beeb6c89" 3192 + dependencies = [ 3193 + "bindgen", 3194 + "env_logger", 3195 + "tracing", 3196 + "tracing-appender", 3197 + "tracing-subscriber", 3198 + "turso_core", 3199 + "turso_sdk_kit_macros", 3200 + ] 3201 + 3202 + [[package]] 3203 + name = "turso_sdk_kit_macros" 3204 + version = "0.4.4" 3205 + source = "registry+https://github.com/rust-lang/crates.io-index" 3206 + checksum = "289f7ea7499419e6670363ca18e954ed53397bb1e03ab7eabbb267d9b05ab836" 3207 + dependencies = [ 3208 + "proc-macro2", 3209 + "quote", 3210 + "syn 2.0.117", 3211 + ] 3212 + 3213 + [[package]] 3214 + name = "turso_sync_engine" 3215 + version = "0.4.4" 3216 + source = "registry+https://github.com/rust-lang/crates.io-index" 3217 + checksum = "ea9860c615a7d8df43fc6ac4293636e9d743c1693513c81be22f0e9388624f58" 3218 + dependencies = [ 3219 + "base64 0.22.1", 3220 + "bytes", 3221 + "genawaiter", 3222 + "http", 3223 + "libc", 3224 + "prost", 3225 + "roaring", 3226 + "serde", 3227 + "serde_json", 3228 + "thiserror", 3229 + "tracing", 3230 + "turso_core", 3231 + "turso_parser", 3232 + "uuid", 3233 + ] 3234 + 3235 + [[package]] 3236 + name = "turso_sync_sdk_kit" 3237 + version = "0.4.4" 3238 + source = "registry+https://github.com/rust-lang/crates.io-index" 3239 + checksum = "2b669b19a5f4bfa7cfdf5045af36ca4a2087431c0d2844ec539ddcf951b5c9d2" 3240 + dependencies = [ 3241 + "bindgen", 3242 + "env_logger", 3243 + "genawaiter", 3244 + "parking_lot", 3245 + "tracing", 3246 + "tracing-appender", 3247 + "tracing-subscriber", 3248 + "turso_core", 3249 + "turso_sdk_kit", 3250 + "turso_sdk_kit_macros", 3251 + "turso_sync_engine", 3252 + ] 3253 + 3254 + [[package]] 3255 + name = "twox-hash" 3256 + version = "2.1.2" 3257 + source = "registry+https://github.com/rust-lang/crates.io-index" 3258 + checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" 3259 + dependencies = [ 3260 + "rand", 3261 + ] 3262 + 3263 + [[package]] 1225 3264 name = "typenum" 1226 3265 version = "1.19.0" 1227 3266 source = "registry+https://github.com/rust-lang/crates.io-index" 1228 3267 checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 1229 3268 1230 3269 [[package]] 3270 + name = "uncased" 3271 + version = "0.9.10" 3272 + source = "registry+https://github.com/rust-lang/crates.io-index" 3273 + checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" 3274 + dependencies = [ 3275 + "version_check", 3276 + ] 3277 + 3278 + [[package]] 1231 3279 name = "unicode-ident" 1232 3280 version = "1.0.24" 1233 3281 source = "registry+https://github.com/rust-lang/crates.io-index" 1234 3282 checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 1235 3283 1236 3284 [[package]] 3285 + name = "unicode-width" 3286 + version = "0.1.14" 3287 + source = "registry+https://github.com/rust-lang/crates.io-index" 3288 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 3289 + 3290 + [[package]] 3291 + name = "unicode-xid" 3292 + version = "0.2.6" 3293 + source = "registry+https://github.com/rust-lang/crates.io-index" 3294 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3295 + 3296 + [[package]] 3297 + name = "universal-hash" 3298 + version = "0.5.1" 3299 + source = "registry+https://github.com/rust-lang/crates.io-index" 3300 + checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" 3301 + dependencies = [ 3302 + "crypto-common", 3303 + "subtle", 3304 + ] 3305 + 3306 + [[package]] 1237 3307 name = "untrusted" 1238 3308 version = "0.9.0" 1239 3309 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1270 3340 checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1271 3341 1272 3342 [[package]] 3343 + name = "uuid" 3344 + version = "1.21.0" 3345 + source = "registry+https://github.com/rust-lang/crates.io-index" 3346 + checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" 3347 + dependencies = [ 3348 + "getrandom 0.4.1", 3349 + "js-sys", 3350 + "sha1_smol", 3351 + "wasm-bindgen", 3352 + ] 3353 + 3354 + [[package]] 3355 + name = "v_frame" 3356 + version = "0.3.9" 3357 + source = "registry+https://github.com/rust-lang/crates.io-index" 3358 + checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" 3359 + dependencies = [ 3360 + "aligned-vec", 3361 + "num-traits", 3362 + "wasm-bindgen", 3363 + ] 3364 + 3365 + [[package]] 3366 + name = "valuable" 3367 + version = "0.1.1" 3368 + source = "registry+https://github.com/rust-lang/crates.io-index" 3369 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3370 + 3371 + [[package]] 3372 + name = "vcpkg" 3373 + version = "0.2.15" 3374 + source = "registry+https://github.com/rust-lang/crates.io-index" 3375 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3376 + 3377 + [[package]] 1273 3378 name = "version_check" 1274 3379 version = "0.9.5" 1275 3380 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1291 3396 ] 1292 3397 1293 3398 [[package]] 3399 + name = "wasip3" 3400 + version = "0.4.0+wasi-0.3.0-rc-2026-01-06" 3401 + source = "registry+https://github.com/rust-lang/crates.io-index" 3402 + checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" 3403 + dependencies = [ 3404 + "wit-bindgen", 3405 + ] 3406 + 3407 + [[package]] 1294 3408 name = "wasm-bindgen" 1295 - version = "0.2.108" 3409 + version = "0.2.111" 1296 3410 source = "registry+https://github.com/rust-lang/crates.io-index" 1297 - checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" 3411 + checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac" 1298 3412 dependencies = [ 1299 3413 "cfg-if", 1300 3414 "once_cell", ··· 1305 3419 1306 3420 [[package]] 1307 3421 name = "wasm-bindgen-futures" 1308 - version = "0.4.58" 3422 + version = "0.4.61" 1309 3423 source = "registry+https://github.com/rust-lang/crates.io-index" 1310 - checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" 3424 + checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b" 1311 3425 dependencies = [ 1312 3426 "cfg-if", 1313 3427 "futures-util", ··· 1319 3433 1320 3434 [[package]] 1321 3435 name = "wasm-bindgen-macro" 1322 - version = "0.2.108" 3436 + version = "0.2.111" 1323 3437 source = "registry+https://github.com/rust-lang/crates.io-index" 1324 - checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" 3438 + checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1" 1325 3439 dependencies = [ 1326 3440 "quote", 1327 3441 "wasm-bindgen-macro-support", ··· 1329 3443 1330 3444 [[package]] 1331 3445 name = "wasm-bindgen-macro-support" 1332 - version = "0.2.108" 3446 + version = "0.2.111" 1333 3447 source = "registry+https://github.com/rust-lang/crates.io-index" 1334 - checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" 3448 + checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af" 1335 3449 dependencies = [ 1336 3450 "bumpalo", 1337 3451 "proc-macro2", 1338 3452 "quote", 1339 - "syn 2.0.116", 3453 + "syn 2.0.117", 1340 3454 "wasm-bindgen-shared", 1341 3455 ] 1342 3456 1343 3457 [[package]] 1344 3458 name = "wasm-bindgen-shared" 1345 - version = "0.2.108" 3459 + version = "0.2.111" 1346 3460 source = "registry+https://github.com/rust-lang/crates.io-index" 1347 - checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" 3461 + checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41" 1348 3462 dependencies = [ 1349 3463 "unicode-ident", 1350 3464 ] 1351 3465 1352 3466 [[package]] 3467 + name = "wasm-encoder" 3468 + version = "0.244.0" 3469 + source = "registry+https://github.com/rust-lang/crates.io-index" 3470 + checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" 3471 + dependencies = [ 3472 + "leb128fmt", 3473 + "wasmparser", 3474 + ] 3475 + 3476 + [[package]] 3477 + name = "wasm-metadata" 3478 + version = "0.244.0" 3479 + source = "registry+https://github.com/rust-lang/crates.io-index" 3480 + checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" 3481 + dependencies = [ 3482 + "anyhow", 3483 + "indexmap 2.13.0", 3484 + "wasm-encoder", 3485 + "wasmparser", 3486 + ] 3487 + 3488 + [[package]] 3489 + name = "wasmparser" 3490 + version = "0.244.0" 3491 + source = "registry+https://github.com/rust-lang/crates.io-index" 3492 + checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 3493 + dependencies = [ 3494 + "bitflags", 3495 + "hashbrown 0.15.5", 3496 + "indexmap 2.13.0", 3497 + "semver", 3498 + ] 3499 + 3500 + [[package]] 1353 3501 name = "wasmtimer" 1354 3502 version = "0.2.1" 1355 3503 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1365 3513 1366 3514 [[package]] 1367 3515 name = "web-sys" 1368 - version = "0.3.85" 3516 + version = "0.3.88" 1369 3517 source = "registry+https://github.com/rust-lang/crates.io-index" 1370 - checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" 3518 + checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" 1371 3519 dependencies = [ 1372 3520 "js-sys", 1373 3521 "wasm-bindgen", ··· 1375 3523 1376 3524 [[package]] 1377 3525 name = "webpki-roots" 3526 + version = "0.25.4" 3527 + source = "registry+https://github.com/rust-lang/crates.io-index" 3528 + checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 3529 + 3530 + [[package]] 3531 + name = "webpki-roots" 1378 3532 version = "0.26.11" 1379 3533 source = "registry+https://github.com/rust-lang/crates.io-index" 1380 3534 checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" ··· 1392 3546 ] 1393 3547 1394 3548 [[package]] 3549 + name = "weezl" 3550 + version = "0.1.12" 3551 + source = "registry+https://github.com/rust-lang/crates.io-index" 3552 + checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" 3553 + 3554 + [[package]] 3555 + name = "which" 3556 + version = "4.4.2" 3557 + source = "registry+https://github.com/rust-lang/crates.io-index" 3558 + checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" 3559 + dependencies = [ 3560 + "either", 3561 + "home", 3562 + "once_cell", 3563 + "rustix 0.38.44", 3564 + ] 3565 + 3566 + [[package]] 3567 + name = "windows-core" 3568 + version = "0.62.2" 3569 + source = "registry+https://github.com/rust-lang/crates.io-index" 3570 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 3571 + dependencies = [ 3572 + "windows-implement", 3573 + "windows-interface", 3574 + "windows-link", 3575 + "windows-result", 3576 + "windows-strings", 3577 + ] 3578 + 3579 + [[package]] 3580 + name = "windows-implement" 3581 + version = "0.60.2" 3582 + source = "registry+https://github.com/rust-lang/crates.io-index" 3583 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3584 + dependencies = [ 3585 + "proc-macro2", 3586 + "quote", 3587 + "syn 2.0.117", 3588 + ] 3589 + 3590 + [[package]] 3591 + name = "windows-interface" 3592 + version = "0.59.3" 3593 + source = "registry+https://github.com/rust-lang/crates.io-index" 3594 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3595 + dependencies = [ 3596 + "proc-macro2", 3597 + "quote", 3598 + "syn 2.0.117", 3599 + ] 3600 + 3601 + [[package]] 1395 3602 name = "windows-link" 1396 3603 version = "0.2.1" 1397 3604 source = "registry+https://github.com/rust-lang/crates.io-index" 1398 3605 checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 1399 3606 1400 3607 [[package]] 3608 + name = "windows-result" 3609 + version = "0.4.1" 3610 + source = "registry+https://github.com/rust-lang/crates.io-index" 3611 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 3612 + dependencies = [ 3613 + "windows-link", 3614 + ] 3615 + 3616 + [[package]] 3617 + name = "windows-strings" 3618 + version = "0.5.1" 3619 + source = "registry+https://github.com/rust-lang/crates.io-index" 3620 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 3621 + dependencies = [ 3622 + "windows-link", 3623 + ] 3624 + 3625 + [[package]] 1401 3626 name = "windows-sys" 1402 3627 version = "0.52.0" 1403 3628 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1558 3783 version = "0.51.0" 1559 3784 source = "registry+https://github.com/rust-lang/crates.io-index" 1560 3785 checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 3786 + dependencies = [ 3787 + "wit-bindgen-rust-macro", 3788 + ] 3789 + 3790 + [[package]] 3791 + name = "wit-bindgen-core" 3792 + version = "0.51.0" 3793 + source = "registry+https://github.com/rust-lang/crates.io-index" 3794 + checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" 3795 + dependencies = [ 3796 + "anyhow", 3797 + "heck", 3798 + "wit-parser", 3799 + ] 3800 + 3801 + [[package]] 3802 + name = "wit-bindgen-rust" 3803 + version = "0.51.0" 3804 + source = "registry+https://github.com/rust-lang/crates.io-index" 3805 + checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" 3806 + dependencies = [ 3807 + "anyhow", 3808 + "heck", 3809 + "indexmap 2.13.0", 3810 + "prettyplease", 3811 + "syn 2.0.117", 3812 + "wasm-metadata", 3813 + "wit-bindgen-core", 3814 + "wit-component", 3815 + ] 3816 + 3817 + [[package]] 3818 + name = "wit-bindgen-rust-macro" 3819 + version = "0.51.0" 3820 + source = "registry+https://github.com/rust-lang/crates.io-index" 3821 + checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" 3822 + dependencies = [ 3823 + "anyhow", 3824 + "prettyplease", 3825 + "proc-macro2", 3826 + "quote", 3827 + "syn 2.0.117", 3828 + "wit-bindgen-core", 3829 + "wit-bindgen-rust", 3830 + ] 3831 + 3832 + [[package]] 3833 + name = "wit-component" 3834 + version = "0.244.0" 3835 + source = "registry+https://github.com/rust-lang/crates.io-index" 3836 + checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 3837 + dependencies = [ 3838 + "anyhow", 3839 + "bitflags", 3840 + "indexmap 2.13.0", 3841 + "log", 3842 + "serde", 3843 + "serde_derive", 3844 + "serde_json", 3845 + "wasm-encoder", 3846 + "wasm-metadata", 3847 + "wasmparser", 3848 + "wit-parser", 3849 + ] 3850 + 3851 + [[package]] 3852 + name = "wit-parser" 3853 + version = "0.244.0" 3854 + source = "registry+https://github.com/rust-lang/crates.io-index" 3855 + checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" 3856 + dependencies = [ 3857 + "anyhow", 3858 + "id-arena", 3859 + "indexmap 2.13.0", 3860 + "log", 3861 + "semver", 3862 + "serde", 3863 + "serde_derive", 3864 + "serde_json", 3865 + "unicode-xid", 3866 + "wasmparser", 3867 + ] 1561 3868 1562 3869 [[package]] 1563 3870 name = "writeable" 1564 3871 version = "0.6.2" 1565 3872 source = "registry+https://github.com/rust-lang/crates.io-index" 1566 3873 checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 3874 + 3875 + [[package]] 3876 + name = "y4m" 3877 + version = "0.8.0" 3878 + source = "registry+https://github.com/rust-lang/crates.io-index" 3879 + checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" 1567 3880 1568 3881 [[package]] 1569 3882 name = "yoke" ··· 1584 3897 dependencies = [ 1585 3898 "proc-macro2", 1586 3899 "quote", 1587 - "syn 2.0.116", 3900 + "syn 2.0.117", 1588 3901 "synstructure", 1589 3902 ] 1590 3903 ··· 1605 3918 dependencies = [ 1606 3919 "proc-macro2", 1607 3920 "quote", 1608 - "syn 2.0.116", 3921 + "syn 2.0.117", 1609 3922 ] 1610 3923 1611 3924 [[package]] ··· 1625 3938 dependencies = [ 1626 3939 "proc-macro2", 1627 3940 "quote", 1628 - "syn 2.0.116", 3941 + "syn 2.0.117", 1629 3942 "synstructure", 1630 3943 ] 1631 3944 ··· 1665 3978 dependencies = [ 1666 3979 "proc-macro2", 1667 3980 "quote", 1668 - "syn 2.0.116", 3981 + "syn 2.0.117", 1669 3982 ] 1670 3983 1671 3984 [[package]] ··· 1673 3986 version = "1.0.21" 1674 3987 source = "registry+https://github.com/rust-lang/crates.io-index" 1675 3988 checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" 3989 + 3990 + [[package]] 3991 + name = "zune-core" 3992 + version = "0.4.12" 3993 + source = "registry+https://github.com/rust-lang/crates.io-index" 3994 + checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" 3995 + 3996 + [[package]] 3997 + name = "zune-core" 3998 + version = "0.5.1" 3999 + source = "registry+https://github.com/rust-lang/crates.io-index" 4000 + checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" 4001 + 4002 + [[package]] 4003 + name = "zune-inflate" 4004 + version = "0.2.54" 4005 + source = "registry+https://github.com/rust-lang/crates.io-index" 4006 + checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" 4007 + dependencies = [ 4008 + "simd-adler32", 4009 + ] 4010 + 4011 + [[package]] 4012 + name = "zune-jpeg" 4013 + version = "0.4.21" 4014 + source = "registry+https://github.com/rust-lang/crates.io-index" 4015 + checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 4016 + dependencies = [ 4017 + "zune-core 0.4.12", 4018 + ] 4019 + 4020 + [[package]] 4021 + name = "zune-jpeg" 4022 + version = "0.5.12" 4023 + source = "registry+https://github.com/rust-lang/crates.io-index" 4024 + checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" 4025 + dependencies = [ 4026 + "zune-core 0.5.1", 4027 + ]
+24 -10
Cargo.toml
··· 1 1 [package] 2 - name = "colorbot" 3 - version = "0.1.0" 2 + name = "fluxer-rs" 3 + version = "0.1.2" 4 4 edition = "2024" 5 + license = "MIT" 6 + description = "A rust implementation of the fluxer api to be used on fluxer.app and other self hosted instances" 7 + homepage = "https://git.killuaa.dev/roufpup/fluxer-rs" 8 + repository = "https://git.killuaa.dev/roufpup/fluxer-rs" 9 + readme = "README.md" 5 10 6 11 [workspace] 7 - resolver = "3" 8 - members = ["fluxer-rs"] 9 - 12 + members = [ 13 + "examples/examplebot", 14 + ] 10 15 11 16 [dependencies] 12 - env_logger = "0.11.9" 17 + async-trait = "0.1.89" 18 + derive_builder = "0.20.2" 19 + image = "0.25.9" 13 20 log = "0.4.29" 21 + minreq = { version = "2.14.1", features = ["https"] } 22 + serde_json = "1.0.149" 23 + serde_with = "3.16.1" 14 24 15 - [dependencies.fluxer-rs] 16 - version = "*" 17 - path = "fluxer-rs" 25 + [dependencies.ezsockets] 26 + version = "0.7.1" 27 + features = ["rustls"] 18 28 19 29 [dependencies.tokio] 20 30 version = "1.49.0" 21 - features = ["rt-multi-thread", "macros"] 31 + features = ["rt-multi-thread", "macros"] 32 + 33 + [dependencies.serde] 34 + version = "1.0.228" 35 + features = ["derive"]
+158 -2
README.md
··· 1 - This repository is facilitating the code for both fluxer-rs a very experimental and still work in progress rust library that interacts with the fluxer social media platform and the bot colorbot which will utilize fluxer-rs. 1 + # About 2 + A rust implementation of the fluxer api to be used on fluxer.app and other self hosted instances 2 3 3 - For opening issues and feature requests please head over to the MIRROR repo over on https://github.com/roufpup/colorbot 4 + For opening issues and feature requests please head over to the MIRROR repo over on https://github.com/roufpup/fluxer-rs 4 5 5 6 Feel free to join me and chat on Fluxer in the fluxer-rs server https://fluxer.gg/YpAOaODV 6 7 7 8 I will be doing my best to be implementing the API and gateway functionality as fast as i can so please bear with me. 9 + 10 + # Example usage 11 + 12 + ```rs 13 + 14 + let bot: FluxerBot = FluxerBot::init( 15 + "<Your bot token here>".to_string(), 16 + "wss://gateway.fluxer.app?v=1&encoding=json&compress=none".to_string(), 17 + "https://api.fluxer.app/v1".to_string(), 18 + ) 19 + .await; 20 + 21 + let bot_arc = Arc::new(bot); 22 + bot_arc 23 + .start(ColorbotDispatchHandler { 24 + bot: bot_arc.clone(), 25 + }) 26 + .await; 27 + ``` 28 + We pass an Arc of the bot to the dispatch handler implementation so we can use the api of our above created bot inside different dispatch callbacks as shown below 29 + 30 + ```rs 31 + 32 + pub struct ColorbotDispatchHandler { 33 + pub bot: Arc<FluxerBot>, 34 + } 35 + 36 + impl DispatchHandlerTrait for ColorbotDispatchHandler { 37 + async fn handle_message_create_dispatch(&self, data: MessageEventData) { 38 + let mut cmd_handler = CommandHandler::init("!".to_string()); 39 + 40 + cmd_handler.register_command( 41 + "ping".to_string(), 42 + PingCommand { 43 + bot: self.bot.clone(), 44 + channel_id: data.channel_id.clone(), 45 + id: data.id.clone(), 46 + }, 47 + ); 48 + 49 + cmd_handler.handle(&data).await; 50 + } 51 + ``` 52 + This is also another thing to touch on how to reply to different dispatch events. All you need to do is implement the DispatchHandlerTrait for your struct and implement the functions that you want to override instead of letting the crate use the predefined default ones. 53 + 54 + This crate also will provide some high level implementations bots use in general, currently there only is a CommandHandler which will let you easily register custom commands for your bots. 55 + 56 + Here is an example of how to make a command for the CommandHandler 57 + 58 + ```rs 59 + pub struct PingCommand { 60 + pub bot: Arc<FluxerBot>, 61 + pub channel_id: String, 62 + pub id: String, 63 + } 64 + 65 + impl CommandTrait for PingCommand { 66 + async fn execute(&self) { 67 + let _ = self.bot.api.execute_call( 68 + SendMessageBuilder::default() 69 + .channel_id(self.channel_id.clone()) 70 + .content("pong".to_string()) 71 + .message_reference( 72 + MessageReferenceBuilder::default() 73 + .message_id(self.id.clone()) 74 + .build() 75 + .unwrap(), 76 + ) 77 + .build() 78 + .unwrap(), 79 + ); 80 + } 81 + } 82 + ``` 83 + When creating a command we pass all the required data into the command struct and just implement the CommandTrait for it. In this example the execute function will simply send a message back to the user by replying to their original message with `pong` 84 + 85 + Of course you don't have to use this and are free to make your own better custom handler for commands :p 86 + 87 + # Dispatch events 88 + Not all dispatch events are implemented currently as i am limited on time for how much i can do in such a short period of time, but i will be implementing them constantly as much as possible as fast as possible. 89 + 90 + When developing a bot in debug mode, be wary as there is a certain panic function that will occur when an unimplemented dispatch event occurs. It's there by design for my own ease of use ( So i have no choice but to implement the event if i don't want constant crashing ;3). While it's not optimal i do advise to use release mode for now while still a bunch of dispatch events are missing. 91 + 92 + # API 93 + As far as API calls go there are very few implemented at the moment but are quite useful ones like: 94 + - Message sending ( Including embeds ) 95 + - Message editing 96 + - Message fetching 97 + - Adding the bot's own reaction to a message 98 + - Removing all reactions from a message 99 + - Creating a role 100 + - Deleting a role 101 + - Giving a role to a user 102 + - Removing a role from a user 103 + 104 + Whenever an api call is missing but you really want to use it be not afraid you can also implement an API call on your own in the meanwhile until it gets added. Here is an example: 105 + 106 + ```rs 107 + #[derive(Clone, Builder)] 108 + #[builder(try_setter, setter(into))] 109 + pub struct EditMessage { 110 + // Path params 111 + pub channel_id: String, 112 + pub message_id: String, 113 + 114 + pub content: String, 115 + #[builder(default)] 116 + pub embeds: Option<Vec<Embed>>, 117 + #[builder(default)] 118 + pub message_reference: Option<MessageReference>, 119 + } 120 + 121 + 122 + impl ApiCall for EditMessage { 123 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 124 + let body = serde_json::to_string(self).unwrap(); 125 + info!("BODY CHECK {body}"); 126 + req.with_body(body) 127 + .with_header("Authorization", format!("Bot {token}")) 128 + } 129 + 130 + fn get_info(&self) -> (String, FluxerApiCallType) { 131 + ( 132 + format!("/channels/{}/messages/{}", self.channel_id, self.message_id), 133 + FluxerApiCallType::Patch, 134 + ) 135 + } 136 + } 137 + 138 + impl Serialize for EditMessage { 139 + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 140 + where 141 + S: serde::Serializer, 142 + { 143 + let mut state = serializer.serialize_map(None)?; 144 + state.serialize_entry("content", &self.content)?; 145 + if let Some(embed) = self.embeds.clone() { 146 + state.serialize_entry("embeds", &embed)?; 147 + }; 148 + if let Some(message_reference) = self.message_reference.clone() { 149 + state.serialize_entry("message_reference", &message_reference)?; 150 + } 151 + state.end() 152 + } 153 + } 154 + ``` 155 + What you basically need to do is implement the ApiCall trait for the struct that will serve as your storage for parameters and potentially body data if required. 156 + 157 + In this example taken right out of the crate you implement two functions for the struct, `get_req` and `get_info`, in the first one you construct the request with all the headers and body you need and return it. While in the second you set some information for the api call like the path that will get called which will include also the path parameters taken out of the struct as well as the http request method type. 158 + 159 + I've added a bit of custom serialization to make everything a bit easier when using a struct that shares both the serializable data and the path parameter data 160 + 161 + If you'd like to implement an api call exactly like this in your own app you will have to add the `derive_builder` crate as a dependency as that is what provides the builder macros and generation. 162 + 163 + After you have implemented the api call you simply call it like in the example above for the PingCommand, the name of the builder is the same as the struct in this case it will be `EditMessageBuilder`
+4055
examples/examplebot/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 = "adler2" 7 + version = "2.0.1" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 10 + 11 + [[package]] 12 + name = "aead" 13 + version = "0.5.2" 14 + source = "registry+https://github.com/rust-lang/crates.io-index" 15 + checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" 16 + dependencies = [ 17 + "crypto-common", 18 + "generic-array", 19 + ] 20 + 21 + [[package]] 22 + name = "aegis" 23 + version = "0.9.7" 24 + source = "registry+https://github.com/rust-lang/crates.io-index" 25 + checksum = "8ae1572243695de9c6c8d16c7889899abac907d14c148f1939d837122bbeca79" 26 + dependencies = [ 27 + "cc", 28 + "softaes", 29 + ] 30 + 31 + [[package]] 32 + name = "aes" 33 + version = "0.8.4" 34 + source = "registry+https://github.com/rust-lang/crates.io-index" 35 + checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 36 + dependencies = [ 37 + "cfg-if", 38 + "cipher", 39 + "cpufeatures", 40 + ] 41 + 42 + [[package]] 43 + name = "aes-gcm" 44 + version = "0.10.3" 45 + source = "registry+https://github.com/rust-lang/crates.io-index" 46 + checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" 47 + dependencies = [ 48 + "aead", 49 + "aes", 50 + "cipher", 51 + "ctr", 52 + "ghash", 53 + "subtle", 54 + ] 55 + 56 + [[package]] 57 + name = "aho-corasick" 58 + version = "1.1.4" 59 + source = "registry+https://github.com/rust-lang/crates.io-index" 60 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 61 + dependencies = [ 62 + "memchr", 63 + ] 64 + 65 + [[package]] 66 + name = "aligned" 67 + version = "0.4.3" 68 + source = "registry+https://github.com/rust-lang/crates.io-index" 69 + checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" 70 + dependencies = [ 71 + "as-slice", 72 + ] 73 + 74 + [[package]] 75 + name = "aligned-vec" 76 + version = "0.6.4" 77 + source = "registry+https://github.com/rust-lang/crates.io-index" 78 + checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" 79 + dependencies = [ 80 + "equator", 81 + ] 82 + 83 + [[package]] 84 + name = "android_system_properties" 85 + version = "0.1.5" 86 + source = "registry+https://github.com/rust-lang/crates.io-index" 87 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 88 + dependencies = [ 89 + "libc", 90 + ] 91 + 92 + [[package]] 93 + name = "anstream" 94 + version = "0.6.21" 95 + source = "registry+https://github.com/rust-lang/crates.io-index" 96 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 97 + dependencies = [ 98 + "anstyle", 99 + "anstyle-parse", 100 + "anstyle-query", 101 + "anstyle-wincon", 102 + "colorchoice", 103 + "is_terminal_polyfill", 104 + "utf8parse", 105 + ] 106 + 107 + [[package]] 108 + name = "anstyle" 109 + version = "1.0.13" 110 + source = "registry+https://github.com/rust-lang/crates.io-index" 111 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 112 + 113 + [[package]] 114 + name = "anstyle-parse" 115 + version = "0.2.7" 116 + source = "registry+https://github.com/rust-lang/crates.io-index" 117 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 118 + dependencies = [ 119 + "utf8parse", 120 + ] 121 + 122 + [[package]] 123 + name = "anstyle-query" 124 + version = "1.1.5" 125 + source = "registry+https://github.com/rust-lang/crates.io-index" 126 + checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" 127 + dependencies = [ 128 + "windows-sys 0.61.2", 129 + ] 130 + 131 + [[package]] 132 + name = "anstyle-wincon" 133 + version = "3.0.11" 134 + source = "registry+https://github.com/rust-lang/crates.io-index" 135 + checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" 136 + dependencies = [ 137 + "anstyle", 138 + "once_cell_polyfill", 139 + "windows-sys 0.61.2", 140 + ] 141 + 142 + [[package]] 143 + name = "anyhow" 144 + version = "1.0.102" 145 + source = "registry+https://github.com/rust-lang/crates.io-index" 146 + checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" 147 + 148 + [[package]] 149 + name = "arbitrary" 150 + version = "1.4.2" 151 + source = "registry+https://github.com/rust-lang/crates.io-index" 152 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 153 + 154 + [[package]] 155 + name = "arc-swap" 156 + version = "1.8.2" 157 + source = "registry+https://github.com/rust-lang/crates.io-index" 158 + checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" 159 + dependencies = [ 160 + "rustversion", 161 + ] 162 + 163 + [[package]] 164 + name = "arg_enum_proc_macro" 165 + version = "0.3.4" 166 + source = "registry+https://github.com/rust-lang/crates.io-index" 167 + checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" 168 + dependencies = [ 169 + "proc-macro2", 170 + "quote", 171 + "syn 2.0.116", 172 + ] 173 + 174 + [[package]] 175 + name = "arrayvec" 176 + version = "0.7.6" 177 + source = "registry+https://github.com/rust-lang/crates.io-index" 178 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 179 + 180 + [[package]] 181 + name = "as-slice" 182 + version = "0.2.1" 183 + source = "registry+https://github.com/rust-lang/crates.io-index" 184 + checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" 185 + dependencies = [ 186 + "stable_deref_trait", 187 + ] 188 + 189 + [[package]] 190 + name = "async-channel" 191 + version = "1.9.0" 192 + source = "registry+https://github.com/rust-lang/crates.io-index" 193 + checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" 194 + dependencies = [ 195 + "concurrent-queue", 196 + "event-listener", 197 + "futures-core", 198 + ] 199 + 200 + [[package]] 201 + name = "async-trait" 202 + version = "0.1.89" 203 + source = "registry+https://github.com/rust-lang/crates.io-index" 204 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 205 + dependencies = [ 206 + "proc-macro2", 207 + "quote", 208 + "syn 2.0.116", 209 + ] 210 + 211 + [[package]] 212 + name = "atomic_enum" 213 + version = "0.2.0" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "6227a8d6fdb862bcb100c4314d0d9579e5cd73fa6df31a2e6f6e1acd3c5f1207" 216 + dependencies = [ 217 + "proc-macro2", 218 + "quote", 219 + "syn 1.0.109", 220 + ] 221 + 222 + [[package]] 223 + name = "autocfg" 224 + version = "1.5.0" 225 + source = "registry+https://github.com/rust-lang/crates.io-index" 226 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 227 + 228 + [[package]] 229 + name = "av-scenechange" 230 + version = "0.14.1" 231 + source = "registry+https://github.com/rust-lang/crates.io-index" 232 + checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" 233 + dependencies = [ 234 + "aligned", 235 + "anyhow", 236 + "arg_enum_proc_macro", 237 + "arrayvec", 238 + "log", 239 + "num-rational", 240 + "num-traits", 241 + "pastey", 242 + "rayon", 243 + "thiserror", 244 + "v_frame", 245 + "y4m", 246 + ] 247 + 248 + [[package]] 249 + name = "av1-grain" 250 + version = "0.2.5" 251 + source = "registry+https://github.com/rust-lang/crates.io-index" 252 + checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" 253 + dependencies = [ 254 + "anyhow", 255 + "arrayvec", 256 + "log", 257 + "nom 8.0.0", 258 + "num-rational", 259 + "v_frame", 260 + ] 261 + 262 + [[package]] 263 + name = "avif-serialize" 264 + version = "0.8.8" 265 + source = "registry+https://github.com/rust-lang/crates.io-index" 266 + checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" 267 + dependencies = [ 268 + "arrayvec", 269 + ] 270 + 271 + [[package]] 272 + name = "aws-lc-rs" 273 + version = "1.15.4" 274 + source = "registry+https://github.com/rust-lang/crates.io-index" 275 + checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" 276 + dependencies = [ 277 + "aws-lc-sys", 278 + "zeroize", 279 + ] 280 + 281 + [[package]] 282 + name = "aws-lc-sys" 283 + version = "0.37.1" 284 + source = "registry+https://github.com/rust-lang/crates.io-index" 285 + checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" 286 + dependencies = [ 287 + "cc", 288 + "cmake", 289 + "dunce", 290 + "fs_extra", 291 + ] 292 + 293 + [[package]] 294 + name = "base64" 295 + version = "0.21.7" 296 + source = "registry+https://github.com/rust-lang/crates.io-index" 297 + checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 298 + 299 + [[package]] 300 + name = "base64" 301 + version = "0.22.1" 302 + source = "registry+https://github.com/rust-lang/crates.io-index" 303 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 304 + 305 + [[package]] 306 + name = "bindgen" 307 + version = "0.69.5" 308 + source = "registry+https://github.com/rust-lang/crates.io-index" 309 + checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" 310 + dependencies = [ 311 + "bitflags", 312 + "cexpr", 313 + "clang-sys", 314 + "itertools 0.12.1", 315 + "lazy_static", 316 + "lazycell", 317 + "log", 318 + "prettyplease", 319 + "proc-macro2", 320 + "quote", 321 + "regex", 322 + "rustc-hash 1.1.0", 323 + "shlex", 324 + "syn 2.0.116", 325 + "which", 326 + ] 327 + 328 + [[package]] 329 + name = "bit_field" 330 + version = "0.10.3" 331 + source = "registry+https://github.com/rust-lang/crates.io-index" 332 + checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" 333 + 334 + [[package]] 335 + name = "bitflags" 336 + version = "2.11.0" 337 + source = "registry+https://github.com/rust-lang/crates.io-index" 338 + checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 339 + 340 + [[package]] 341 + name = "bitstream-io" 342 + version = "4.9.0" 343 + source = "registry+https://github.com/rust-lang/crates.io-index" 344 + checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" 345 + dependencies = [ 346 + "core2", 347 + ] 348 + 349 + [[package]] 350 + name = "block-buffer" 351 + version = "0.10.4" 352 + source = "registry+https://github.com/rust-lang/crates.io-index" 353 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 354 + dependencies = [ 355 + "generic-array", 356 + ] 357 + 358 + [[package]] 359 + name = "branches" 360 + version = "0.4.4" 361 + source = "registry+https://github.com/rust-lang/crates.io-index" 362 + checksum = "e426eb5cc1900033930ec955317b302e68f19f326cc7bb0c8a86865a826cdf0c" 363 + dependencies = [ 364 + "rustc_version", 365 + ] 366 + 367 + [[package]] 368 + name = "built" 369 + version = "0.7.7" 370 + source = "registry+https://github.com/rust-lang/crates.io-index" 371 + checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" 372 + dependencies = [ 373 + "chrono", 374 + "git2", 375 + ] 376 + 377 + [[package]] 378 + name = "built" 379 + version = "0.8.0" 380 + source = "registry+https://github.com/rust-lang/crates.io-index" 381 + checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" 382 + 383 + [[package]] 384 + name = "bumpalo" 385 + version = "3.19.1" 386 + source = "registry+https://github.com/rust-lang/crates.io-index" 387 + checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" 388 + 389 + [[package]] 390 + name = "bytemuck" 391 + version = "1.25.0" 392 + source = "registry+https://github.com/rust-lang/crates.io-index" 393 + checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" 394 + dependencies = [ 395 + "bytemuck_derive", 396 + ] 397 + 398 + [[package]] 399 + name = "bytemuck_derive" 400 + version = "1.10.2" 401 + source = "registry+https://github.com/rust-lang/crates.io-index" 402 + checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" 403 + dependencies = [ 404 + "proc-macro2", 405 + "quote", 406 + "syn 2.0.116", 407 + ] 408 + 409 + [[package]] 410 + name = "byteorder" 411 + version = "1.5.0" 412 + source = "registry+https://github.com/rust-lang/crates.io-index" 413 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 414 + 415 + [[package]] 416 + name = "byteorder-lite" 417 + version = "0.1.0" 418 + source = "registry+https://github.com/rust-lang/crates.io-index" 419 + checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 420 + 421 + [[package]] 422 + name = "bytes" 423 + version = "1.11.1" 424 + source = "registry+https://github.com/rust-lang/crates.io-index" 425 + checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" 426 + 427 + [[package]] 428 + name = "cc" 429 + version = "1.2.56" 430 + source = "registry+https://github.com/rust-lang/crates.io-index" 431 + checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" 432 + dependencies = [ 433 + "find-msvc-tools", 434 + "jobserver", 435 + "libc", 436 + "shlex", 437 + ] 438 + 439 + [[package]] 440 + name = "cexpr" 441 + version = "0.6.0" 442 + source = "registry+https://github.com/rust-lang/crates.io-index" 443 + checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 444 + dependencies = [ 445 + "nom 7.1.3", 446 + ] 447 + 448 + [[package]] 449 + name = "cfg-if" 450 + version = "1.0.4" 451 + source = "registry+https://github.com/rust-lang/crates.io-index" 452 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 453 + 454 + [[package]] 455 + name = "cfg_block" 456 + version = "0.1.1" 457 + source = "registry+https://github.com/rust-lang/crates.io-index" 458 + checksum = "18758054972164c3264f7c8386f5fc6da6114cb46b619fd365d4e3b2dc3ae487" 459 + 460 + [[package]] 461 + name = "chrono" 462 + version = "0.4.43" 463 + source = "registry+https://github.com/rust-lang/crates.io-index" 464 + checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" 465 + dependencies = [ 466 + "iana-time-zone", 467 + "js-sys", 468 + "num-traits", 469 + "serde", 470 + "wasm-bindgen", 471 + "windows-link", 472 + ] 473 + 474 + [[package]] 475 + name = "cipher" 476 + version = "0.4.4" 477 + source = "registry+https://github.com/rust-lang/crates.io-index" 478 + checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 479 + dependencies = [ 480 + "crypto-common", 481 + "inout", 482 + ] 483 + 484 + [[package]] 485 + name = "clang-sys" 486 + version = "1.8.1" 487 + source = "registry+https://github.com/rust-lang/crates.io-index" 488 + checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 489 + dependencies = [ 490 + "glob", 491 + "libc", 492 + "libloading", 493 + ] 494 + 495 + [[package]] 496 + name = "cmake" 497 + version = "0.1.57" 498 + source = "registry+https://github.com/rust-lang/crates.io-index" 499 + checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" 500 + dependencies = [ 501 + "cc", 502 + ] 503 + 504 + [[package]] 505 + name = "color_quant" 506 + version = "1.1.0" 507 + source = "registry+https://github.com/rust-lang/crates.io-index" 508 + checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 509 + 510 + [[package]] 511 + name = "colorbot" 512 + version = "0.1.0" 513 + dependencies = [ 514 + "env_logger", 515 + "fluxer-rs", 516 + "image", 517 + "log", 518 + "minreq", 519 + "tokio", 520 + "turso", 521 + ] 522 + 523 + [[package]] 524 + name = "colorchoice" 525 + version = "1.0.4" 526 + source = "registry+https://github.com/rust-lang/crates.io-index" 527 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 528 + 529 + [[package]] 530 + name = "concurrent-queue" 531 + version = "2.5.0" 532 + source = "registry+https://github.com/rust-lang/crates.io-index" 533 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 534 + dependencies = [ 535 + "crossbeam-utils", 536 + ] 537 + 538 + [[package]] 539 + name = "core-foundation-sys" 540 + version = "0.8.7" 541 + source = "registry+https://github.com/rust-lang/crates.io-index" 542 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 543 + 544 + [[package]] 545 + name = "core2" 546 + version = "0.4.0" 547 + source = "registry+https://github.com/rust-lang/crates.io-index" 548 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 549 + dependencies = [ 550 + "memchr", 551 + ] 552 + 553 + [[package]] 554 + name = "cpufeatures" 555 + version = "0.2.17" 556 + source = "registry+https://github.com/rust-lang/crates.io-index" 557 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 558 + dependencies = [ 559 + "libc", 560 + ] 561 + 562 + [[package]] 563 + name = "crc32fast" 564 + version = "1.5.0" 565 + source = "registry+https://github.com/rust-lang/crates.io-index" 566 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 567 + dependencies = [ 568 + "cfg-if", 569 + ] 570 + 571 + [[package]] 572 + name = "crossbeam-channel" 573 + version = "0.5.15" 574 + source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 576 + dependencies = [ 577 + "crossbeam-utils", 578 + ] 579 + 580 + [[package]] 581 + name = "crossbeam-deque" 582 + version = "0.8.6" 583 + source = "registry+https://github.com/rust-lang/crates.io-index" 584 + checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 585 + dependencies = [ 586 + "crossbeam-epoch", 587 + "crossbeam-utils", 588 + ] 589 + 590 + [[package]] 591 + name = "crossbeam-epoch" 592 + version = "0.9.18" 593 + source = "registry+https://github.com/rust-lang/crates.io-index" 594 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 595 + dependencies = [ 596 + "crossbeam-utils", 597 + ] 598 + 599 + [[package]] 600 + name = "crossbeam-skiplist" 601 + version = "0.1.3" 602 + source = "registry+https://github.com/rust-lang/crates.io-index" 603 + checksum = "df29de440c58ca2cc6e587ec3d22347551a32435fbde9d2bff64e78a9ffa151b" 604 + dependencies = [ 605 + "crossbeam-epoch", 606 + "crossbeam-utils", 607 + ] 608 + 609 + [[package]] 610 + name = "crossbeam-utils" 611 + version = "0.8.21" 612 + source = "registry+https://github.com/rust-lang/crates.io-index" 613 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 614 + 615 + [[package]] 616 + name = "crunchy" 617 + version = "0.2.4" 618 + source = "registry+https://github.com/rust-lang/crates.io-index" 619 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 620 + 621 + [[package]] 622 + name = "crypto-common" 623 + version = "0.1.7" 624 + source = "registry+https://github.com/rust-lang/crates.io-index" 625 + checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" 626 + dependencies = [ 627 + "generic-array", 628 + "rand_core 0.6.4", 629 + "typenum", 630 + ] 631 + 632 + [[package]] 633 + name = "ctr" 634 + version = "0.9.2" 635 + source = "registry+https://github.com/rust-lang/crates.io-index" 636 + checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" 637 + dependencies = [ 638 + "cipher", 639 + ] 640 + 641 + [[package]] 642 + name = "darling" 643 + version = "0.20.11" 644 + source = "registry+https://github.com/rust-lang/crates.io-index" 645 + checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 646 + dependencies = [ 647 + "darling_core 0.20.11", 648 + "darling_macro 0.20.11", 649 + ] 650 + 651 + [[package]] 652 + name = "darling" 653 + version = "0.21.3" 654 + source = "registry+https://github.com/rust-lang/crates.io-index" 655 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 656 + dependencies = [ 657 + "darling_core 0.21.3", 658 + "darling_macro 0.21.3", 659 + ] 660 + 661 + [[package]] 662 + name = "darling_core" 663 + version = "0.20.11" 664 + source = "registry+https://github.com/rust-lang/crates.io-index" 665 + checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 666 + dependencies = [ 667 + "fnv", 668 + "ident_case", 669 + "proc-macro2", 670 + "quote", 671 + "strsim", 672 + "syn 2.0.116", 673 + ] 674 + 675 + [[package]] 676 + name = "darling_core" 677 + version = "0.21.3" 678 + source = "registry+https://github.com/rust-lang/crates.io-index" 679 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 680 + dependencies = [ 681 + "fnv", 682 + "ident_case", 683 + "proc-macro2", 684 + "quote", 685 + "strsim", 686 + "syn 2.0.116", 687 + ] 688 + 689 + [[package]] 690 + name = "darling_macro" 691 + version = "0.20.11" 692 + source = "registry+https://github.com/rust-lang/crates.io-index" 693 + checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 694 + dependencies = [ 695 + "darling_core 0.20.11", 696 + "quote", 697 + "syn 2.0.116", 698 + ] 699 + 700 + [[package]] 701 + name = "darling_macro" 702 + version = "0.21.3" 703 + source = "registry+https://github.com/rust-lang/crates.io-index" 704 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 705 + dependencies = [ 706 + "darling_core 0.21.3", 707 + "quote", 708 + "syn 2.0.116", 709 + ] 710 + 711 + [[package]] 712 + name = "data-encoding" 713 + version = "2.10.0" 714 + source = "registry+https://github.com/rust-lang/crates.io-index" 715 + checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" 716 + 717 + [[package]] 718 + name = "deranged" 719 + version = "0.5.6" 720 + source = "registry+https://github.com/rust-lang/crates.io-index" 721 + checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" 722 + dependencies = [ 723 + "powerfmt", 724 + "serde_core", 725 + ] 726 + 727 + [[package]] 728 + name = "derive_builder" 729 + version = "0.20.2" 730 + source = "registry+https://github.com/rust-lang/crates.io-index" 731 + checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" 732 + dependencies = [ 733 + "derive_builder_macro", 734 + ] 735 + 736 + [[package]] 737 + name = "derive_builder_core" 738 + version = "0.20.2" 739 + source = "registry+https://github.com/rust-lang/crates.io-index" 740 + checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" 741 + dependencies = [ 742 + "darling 0.20.11", 743 + "proc-macro2", 744 + "quote", 745 + "syn 2.0.116", 746 + ] 747 + 748 + [[package]] 749 + name = "derive_builder_macro" 750 + version = "0.20.2" 751 + source = "registry+https://github.com/rust-lang/crates.io-index" 752 + checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" 753 + dependencies = [ 754 + "derive_builder_core", 755 + "syn 2.0.116", 756 + ] 757 + 758 + [[package]] 759 + name = "digest" 760 + version = "0.10.7" 761 + source = "registry+https://github.com/rust-lang/crates.io-index" 762 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 763 + dependencies = [ 764 + "block-buffer", 765 + "crypto-common", 766 + ] 767 + 768 + [[package]] 769 + name = "displaydoc" 770 + version = "0.2.5" 771 + source = "registry+https://github.com/rust-lang/crates.io-index" 772 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 773 + dependencies = [ 774 + "proc-macro2", 775 + "quote", 776 + "syn 2.0.116", 777 + ] 778 + 779 + [[package]] 780 + name = "dunce" 781 + version = "1.0.5" 782 + source = "registry+https://github.com/rust-lang/crates.io-index" 783 + checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 784 + 785 + [[package]] 786 + name = "dyn-clone" 787 + version = "1.0.20" 788 + source = "registry+https://github.com/rust-lang/crates.io-index" 789 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 790 + 791 + [[package]] 792 + name = "either" 793 + version = "1.15.0" 794 + source = "registry+https://github.com/rust-lang/crates.io-index" 795 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 796 + 797 + [[package]] 798 + name = "emojis" 799 + version = "0.8.0" 800 + source = "registry+https://github.com/rust-lang/crates.io-index" 801 + checksum = "50c1c1870b766fc398e5f0526498d09c94b6de15be5fd769a28bbc804fb1b05d" 802 + dependencies = [ 803 + "phf", 804 + ] 805 + 806 + [[package]] 807 + name = "enfync" 808 + version = "0.1.6" 809 + source = "registry+https://github.com/rust-lang/crates.io-index" 810 + checksum = "5ce8c1fbec15a38aced3838c4d7ea90a1403bd50364b5cfe8008e679df0c8dde" 811 + dependencies = [ 812 + "async-trait", 813 + "futures", 814 + "tokio", 815 + "wasm-bindgen", 816 + "wasm-bindgen-futures", 817 + "wasmtimer", 818 + ] 819 + 820 + [[package]] 821 + name = "env_filter" 822 + version = "1.0.0" 823 + source = "registry+https://github.com/rust-lang/crates.io-index" 824 + checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" 825 + dependencies = [ 826 + "log", 827 + "regex", 828 + ] 829 + 830 + [[package]] 831 + name = "env_logger" 832 + version = "0.11.9" 833 + source = "registry+https://github.com/rust-lang/crates.io-index" 834 + checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" 835 + dependencies = [ 836 + "anstream", 837 + "anstyle", 838 + "env_filter", 839 + "jiff", 840 + "log", 841 + ] 842 + 843 + [[package]] 844 + name = "equator" 845 + version = "0.4.2" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" 848 + dependencies = [ 849 + "equator-macro", 850 + ] 851 + 852 + [[package]] 853 + name = "equator-macro" 854 + version = "0.4.2" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" 857 + dependencies = [ 858 + "proc-macro2", 859 + "quote", 860 + "syn 2.0.116", 861 + ] 862 + 863 + [[package]] 864 + name = "equivalent" 865 + version = "1.0.2" 866 + source = "registry+https://github.com/rust-lang/crates.io-index" 867 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 868 + 869 + [[package]] 870 + name = "errno" 871 + version = "0.3.14" 872 + source = "registry+https://github.com/rust-lang/crates.io-index" 873 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 874 + dependencies = [ 875 + "libc", 876 + "windows-sys 0.61.2", 877 + ] 878 + 879 + [[package]] 880 + name = "event-listener" 881 + version = "2.5.3" 882 + source = "registry+https://github.com/rust-lang/crates.io-index" 883 + checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 884 + 885 + [[package]] 886 + name = "exr" 887 + version = "1.74.0" 888 + source = "registry+https://github.com/rust-lang/crates.io-index" 889 + checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" 890 + dependencies = [ 891 + "bit_field", 892 + "half", 893 + "lebe", 894 + "miniz_oxide", 895 + "rayon-core", 896 + "smallvec", 897 + "zune-inflate", 898 + ] 899 + 900 + [[package]] 901 + name = "ezsockets" 902 + version = "0.7.1" 903 + source = "registry+https://github.com/rust-lang/crates.io-index" 904 + checksum = "0f99230cd4b340f0590dab3dd65a9f3edc0da4c759922f303467eefde08a7eb7" 905 + dependencies = [ 906 + "async-channel", 907 + "async-trait", 908 + "atomic_enum", 909 + "base64 0.21.7", 910 + "bytes", 911 + "cfg-if", 912 + "enfync", 913 + "futures", 914 + "futures-util", 915 + "getrandom 0.2.17", 916 + "http", 917 + "tokio", 918 + "tokio-rustls", 919 + "tokio-tungstenite", 920 + "tokio-tungstenite-wasm", 921 + "tracing", 922 + "tungstenite", 923 + "url", 924 + "wasm-bindgen-futures", 925 + "wasmtimer", 926 + ] 927 + 928 + [[package]] 929 + name = "fallible-iterator" 930 + version = "0.3.0" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 933 + 934 + [[package]] 935 + name = "fastbloom" 936 + version = "0.14.1" 937 + source = "registry+https://github.com/rust-lang/crates.io-index" 938 + checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" 939 + dependencies = [ 940 + "getrandom 0.3.4", 941 + "libm", 942 + "rand", 943 + "siphasher", 944 + ] 945 + 946 + [[package]] 947 + name = "fastrand" 948 + version = "2.3.0" 949 + source = "registry+https://github.com/rust-lang/crates.io-index" 950 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 951 + 952 + [[package]] 953 + name = "fax" 954 + version = "0.2.6" 955 + source = "registry+https://github.com/rust-lang/crates.io-index" 956 + checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" 957 + dependencies = [ 958 + "fax_derive", 959 + ] 960 + 961 + [[package]] 962 + name = "fax_derive" 963 + version = "0.2.0" 964 + source = "registry+https://github.com/rust-lang/crates.io-index" 965 + checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" 966 + dependencies = [ 967 + "proc-macro2", 968 + "quote", 969 + "syn 2.0.116", 970 + ] 971 + 972 + [[package]] 973 + name = "fdeflate" 974 + version = "0.3.7" 975 + source = "registry+https://github.com/rust-lang/crates.io-index" 976 + checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 977 + dependencies = [ 978 + "simd-adler32", 979 + ] 980 + 981 + [[package]] 982 + name = "find-msvc-tools" 983 + version = "0.1.9" 984 + source = "registry+https://github.com/rust-lang/crates.io-index" 985 + checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" 986 + 987 + [[package]] 988 + name = "flate2" 989 + version = "1.1.9" 990 + source = "registry+https://github.com/rust-lang/crates.io-index" 991 + checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" 992 + dependencies = [ 993 + "crc32fast", 994 + "miniz_oxide", 995 + ] 996 + 997 + [[package]] 998 + name = "fluxer-rs" 999 + version = "0.1.1" 1000 + dependencies = [ 1001 + "async-trait", 1002 + "derive_builder", 1003 + "emojis", 1004 + "ezsockets", 1005 + "image", 1006 + "log", 1007 + "minreq", 1008 + "serde", 1009 + "serde_json", 1010 + "serde_with", 1011 + "tokio", 1012 + ] 1013 + 1014 + [[package]] 1015 + name = "fnv" 1016 + version = "1.0.7" 1017 + source = "registry+https://github.com/rust-lang/crates.io-index" 1018 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1019 + 1020 + [[package]] 1021 + name = "foldhash" 1022 + version = "0.1.5" 1023 + source = "registry+https://github.com/rust-lang/crates.io-index" 1024 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1025 + 1026 + [[package]] 1027 + name = "form_urlencoded" 1028 + version = "1.2.2" 1029 + source = "registry+https://github.com/rust-lang/crates.io-index" 1030 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1031 + dependencies = [ 1032 + "percent-encoding", 1033 + ] 1034 + 1035 + [[package]] 1036 + name = "fs_extra" 1037 + version = "1.3.0" 1038 + source = "registry+https://github.com/rust-lang/crates.io-index" 1039 + checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 1040 + 1041 + [[package]] 1042 + name = "futures" 1043 + version = "0.3.32" 1044 + source = "registry+https://github.com/rust-lang/crates.io-index" 1045 + checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" 1046 + dependencies = [ 1047 + "futures-channel", 1048 + "futures-core", 1049 + "futures-executor", 1050 + "futures-io", 1051 + "futures-sink", 1052 + "futures-task", 1053 + "futures-util", 1054 + ] 1055 + 1056 + [[package]] 1057 + name = "futures-channel" 1058 + version = "0.3.32" 1059 + source = "registry+https://github.com/rust-lang/crates.io-index" 1060 + checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" 1061 + dependencies = [ 1062 + "futures-core", 1063 + "futures-sink", 1064 + ] 1065 + 1066 + [[package]] 1067 + name = "futures-core" 1068 + version = "0.3.32" 1069 + source = "registry+https://github.com/rust-lang/crates.io-index" 1070 + checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" 1071 + 1072 + [[package]] 1073 + name = "futures-executor" 1074 + version = "0.3.32" 1075 + source = "registry+https://github.com/rust-lang/crates.io-index" 1076 + checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" 1077 + dependencies = [ 1078 + "futures-core", 1079 + "futures-task", 1080 + "futures-util", 1081 + ] 1082 + 1083 + [[package]] 1084 + name = "futures-io" 1085 + version = "0.3.32" 1086 + source = "registry+https://github.com/rust-lang/crates.io-index" 1087 + checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" 1088 + 1089 + [[package]] 1090 + name = "futures-macro" 1091 + version = "0.3.32" 1092 + source = "registry+https://github.com/rust-lang/crates.io-index" 1093 + checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" 1094 + dependencies = [ 1095 + "proc-macro2", 1096 + "quote", 1097 + "syn 2.0.116", 1098 + ] 1099 + 1100 + [[package]] 1101 + name = "futures-sink" 1102 + version = "0.3.32" 1103 + source = "registry+https://github.com/rust-lang/crates.io-index" 1104 + checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" 1105 + 1106 + [[package]] 1107 + name = "futures-task" 1108 + version = "0.3.32" 1109 + source = "registry+https://github.com/rust-lang/crates.io-index" 1110 + checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" 1111 + 1112 + [[package]] 1113 + name = "futures-util" 1114 + version = "0.3.32" 1115 + source = "registry+https://github.com/rust-lang/crates.io-index" 1116 + checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" 1117 + dependencies = [ 1118 + "futures-channel", 1119 + "futures-core", 1120 + "futures-io", 1121 + "futures-macro", 1122 + "futures-sink", 1123 + "futures-task", 1124 + "memchr", 1125 + "pin-project-lite", 1126 + "slab", 1127 + ] 1128 + 1129 + [[package]] 1130 + name = "genawaiter" 1131 + version = "0.99.1" 1132 + source = "registry+https://github.com/rust-lang/crates.io-index" 1133 + checksum = "c86bd0361bcbde39b13475e6e36cb24c329964aa2611be285289d1e4b751c1a0" 1134 + dependencies = [ 1135 + "genawaiter-macro", 1136 + ] 1137 + 1138 + [[package]] 1139 + name = "genawaiter-macro" 1140 + version = "0.99.1" 1141 + source = "registry+https://github.com/rust-lang/crates.io-index" 1142 + checksum = "0b32dfe1fdfc0bbde1f22a5da25355514b5e450c33a6af6770884c8750aedfbc" 1143 + 1144 + [[package]] 1145 + name = "generic-array" 1146 + version = "0.14.7" 1147 + source = "registry+https://github.com/rust-lang/crates.io-index" 1148 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1149 + dependencies = [ 1150 + "typenum", 1151 + "version_check", 1152 + ] 1153 + 1154 + [[package]] 1155 + name = "getrandom" 1156 + version = "0.2.17" 1157 + source = "registry+https://github.com/rust-lang/crates.io-index" 1158 + checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" 1159 + dependencies = [ 1160 + "cfg-if", 1161 + "js-sys", 1162 + "libc", 1163 + "wasi", 1164 + "wasm-bindgen", 1165 + ] 1166 + 1167 + [[package]] 1168 + name = "getrandom" 1169 + version = "0.3.4" 1170 + source = "registry+https://github.com/rust-lang/crates.io-index" 1171 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1172 + dependencies = [ 1173 + "cfg-if", 1174 + "libc", 1175 + "r-efi", 1176 + "wasip2", 1177 + ] 1178 + 1179 + [[package]] 1180 + name = "getrandom" 1181 + version = "0.4.1" 1182 + source = "registry+https://github.com/rust-lang/crates.io-index" 1183 + checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" 1184 + dependencies = [ 1185 + "cfg-if", 1186 + "libc", 1187 + "r-efi", 1188 + "wasip2", 1189 + "wasip3", 1190 + ] 1191 + 1192 + [[package]] 1193 + name = "ghash" 1194 + version = "0.5.1" 1195 + source = "registry+https://github.com/rust-lang/crates.io-index" 1196 + checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" 1197 + dependencies = [ 1198 + "opaque-debug", 1199 + "polyval", 1200 + ] 1201 + 1202 + [[package]] 1203 + name = "gif" 1204 + version = "0.14.1" 1205 + source = "registry+https://github.com/rust-lang/crates.io-index" 1206 + checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" 1207 + dependencies = [ 1208 + "color_quant", 1209 + "weezl", 1210 + ] 1211 + 1212 + [[package]] 1213 + name = "git2" 1214 + version = "0.20.4" 1215 + source = "registry+https://github.com/rust-lang/crates.io-index" 1216 + checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" 1217 + dependencies = [ 1218 + "bitflags", 1219 + "libc", 1220 + "libgit2-sys", 1221 + "log", 1222 + "url", 1223 + ] 1224 + 1225 + [[package]] 1226 + name = "glob" 1227 + version = "0.3.3" 1228 + source = "registry+https://github.com/rust-lang/crates.io-index" 1229 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1230 + 1231 + [[package]] 1232 + name = "half" 1233 + version = "2.7.1" 1234 + source = "registry+https://github.com/rust-lang/crates.io-index" 1235 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1236 + dependencies = [ 1237 + "cfg-if", 1238 + "crunchy", 1239 + "zerocopy", 1240 + ] 1241 + 1242 + [[package]] 1243 + name = "hashbrown" 1244 + version = "0.12.3" 1245 + source = "registry+https://github.com/rust-lang/crates.io-index" 1246 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1247 + 1248 + [[package]] 1249 + name = "hashbrown" 1250 + version = "0.15.5" 1251 + source = "registry+https://github.com/rust-lang/crates.io-index" 1252 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1253 + dependencies = [ 1254 + "foldhash", 1255 + ] 1256 + 1257 + [[package]] 1258 + name = "hashbrown" 1259 + version = "0.16.1" 1260 + source = "registry+https://github.com/rust-lang/crates.io-index" 1261 + checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1262 + 1263 + [[package]] 1264 + name = "heck" 1265 + version = "0.5.0" 1266 + source = "registry+https://github.com/rust-lang/crates.io-index" 1267 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1268 + 1269 + [[package]] 1270 + name = "hermit-abi" 1271 + version = "0.5.2" 1272 + source = "registry+https://github.com/rust-lang/crates.io-index" 1273 + checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1274 + 1275 + [[package]] 1276 + name = "hex" 1277 + version = "0.4.3" 1278 + source = "registry+https://github.com/rust-lang/crates.io-index" 1279 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1280 + 1281 + [[package]] 1282 + name = "home" 1283 + version = "0.5.12" 1284 + source = "registry+https://github.com/rust-lang/crates.io-index" 1285 + checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" 1286 + dependencies = [ 1287 + "windows-sys 0.61.2", 1288 + ] 1289 + 1290 + [[package]] 1291 + name = "http" 1292 + version = "1.4.0" 1293 + source = "registry+https://github.com/rust-lang/crates.io-index" 1294 + checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" 1295 + dependencies = [ 1296 + "bytes", 1297 + "itoa", 1298 + ] 1299 + 1300 + [[package]] 1301 + name = "httparse" 1302 + version = "1.10.1" 1303 + source = "registry+https://github.com/rust-lang/crates.io-index" 1304 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1305 + 1306 + [[package]] 1307 + name = "iana-time-zone" 1308 + version = "0.1.65" 1309 + source = "registry+https://github.com/rust-lang/crates.io-index" 1310 + checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" 1311 + dependencies = [ 1312 + "android_system_properties", 1313 + "core-foundation-sys", 1314 + "iana-time-zone-haiku", 1315 + "js-sys", 1316 + "log", 1317 + "wasm-bindgen", 1318 + "windows-core", 1319 + ] 1320 + 1321 + [[package]] 1322 + name = "iana-time-zone-haiku" 1323 + version = "0.1.2" 1324 + source = "registry+https://github.com/rust-lang/crates.io-index" 1325 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1326 + dependencies = [ 1327 + "cc", 1328 + ] 1329 + 1330 + [[package]] 1331 + name = "icu_collections" 1332 + version = "2.1.1" 1333 + source = "registry+https://github.com/rust-lang/crates.io-index" 1334 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 1335 + dependencies = [ 1336 + "displaydoc", 1337 + "potential_utf", 1338 + "yoke", 1339 + "zerofrom", 1340 + "zerovec", 1341 + ] 1342 + 1343 + [[package]] 1344 + name = "icu_locale_core" 1345 + version = "2.1.1" 1346 + source = "registry+https://github.com/rust-lang/crates.io-index" 1347 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 1348 + dependencies = [ 1349 + "displaydoc", 1350 + "litemap", 1351 + "tinystr", 1352 + "writeable", 1353 + "zerovec", 1354 + ] 1355 + 1356 + [[package]] 1357 + name = "icu_normalizer" 1358 + version = "2.1.1" 1359 + source = "registry+https://github.com/rust-lang/crates.io-index" 1360 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 1361 + dependencies = [ 1362 + "icu_collections", 1363 + "icu_normalizer_data", 1364 + "icu_properties", 1365 + "icu_provider", 1366 + "smallvec", 1367 + "zerovec", 1368 + ] 1369 + 1370 + [[package]] 1371 + name = "icu_normalizer_data" 1372 + version = "2.1.1" 1373 + source = "registry+https://github.com/rust-lang/crates.io-index" 1374 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 1375 + 1376 + [[package]] 1377 + name = "icu_properties" 1378 + version = "2.1.2" 1379 + source = "registry+https://github.com/rust-lang/crates.io-index" 1380 + checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" 1381 + dependencies = [ 1382 + "icu_collections", 1383 + "icu_locale_core", 1384 + "icu_properties_data", 1385 + "icu_provider", 1386 + "zerotrie", 1387 + "zerovec", 1388 + ] 1389 + 1390 + [[package]] 1391 + name = "icu_properties_data" 1392 + version = "2.1.2" 1393 + source = "registry+https://github.com/rust-lang/crates.io-index" 1394 + checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" 1395 + 1396 + [[package]] 1397 + name = "icu_provider" 1398 + version = "2.1.1" 1399 + source = "registry+https://github.com/rust-lang/crates.io-index" 1400 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 1401 + dependencies = [ 1402 + "displaydoc", 1403 + "icu_locale_core", 1404 + "writeable", 1405 + "yoke", 1406 + "zerofrom", 1407 + "zerotrie", 1408 + "zerovec", 1409 + ] 1410 + 1411 + [[package]] 1412 + name = "id-arena" 1413 + version = "2.3.0" 1414 + source = "registry+https://github.com/rust-lang/crates.io-index" 1415 + checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 1416 + 1417 + [[package]] 1418 + name = "ident_case" 1419 + version = "1.0.1" 1420 + source = "registry+https://github.com/rust-lang/crates.io-index" 1421 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1422 + 1423 + [[package]] 1424 + name = "idna" 1425 + version = "1.1.0" 1426 + source = "registry+https://github.com/rust-lang/crates.io-index" 1427 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 1428 + dependencies = [ 1429 + "idna_adapter", 1430 + "smallvec", 1431 + "utf8_iter", 1432 + ] 1433 + 1434 + [[package]] 1435 + name = "idna_adapter" 1436 + version = "1.2.1" 1437 + source = "registry+https://github.com/rust-lang/crates.io-index" 1438 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1439 + dependencies = [ 1440 + "icu_normalizer", 1441 + "icu_properties", 1442 + ] 1443 + 1444 + [[package]] 1445 + name = "image" 1446 + version = "0.25.9" 1447 + source = "registry+https://github.com/rust-lang/crates.io-index" 1448 + checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" 1449 + dependencies = [ 1450 + "bytemuck", 1451 + "byteorder-lite", 1452 + "color_quant", 1453 + "exr", 1454 + "gif", 1455 + "image-webp", 1456 + "moxcms", 1457 + "num-traits", 1458 + "png", 1459 + "qoi", 1460 + "ravif", 1461 + "rayon", 1462 + "rgb", 1463 + "tiff", 1464 + "zune-core 0.5.1", 1465 + "zune-jpeg 0.5.12", 1466 + ] 1467 + 1468 + [[package]] 1469 + name = "image-webp" 1470 + version = "0.2.4" 1471 + source = "registry+https://github.com/rust-lang/crates.io-index" 1472 + checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" 1473 + dependencies = [ 1474 + "byteorder-lite", 1475 + "quick-error", 1476 + ] 1477 + 1478 + [[package]] 1479 + name = "imgref" 1480 + version = "1.12.0" 1481 + source = "registry+https://github.com/rust-lang/crates.io-index" 1482 + checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" 1483 + 1484 + [[package]] 1485 + name = "indexmap" 1486 + version = "1.9.3" 1487 + source = "registry+https://github.com/rust-lang/crates.io-index" 1488 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1489 + dependencies = [ 1490 + "autocfg", 1491 + "hashbrown 0.12.3", 1492 + "serde", 1493 + ] 1494 + 1495 + [[package]] 1496 + name = "indexmap" 1497 + version = "2.13.0" 1498 + source = "registry+https://github.com/rust-lang/crates.io-index" 1499 + checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" 1500 + dependencies = [ 1501 + "equivalent", 1502 + "hashbrown 0.16.1", 1503 + "serde", 1504 + "serde_core", 1505 + ] 1506 + 1507 + [[package]] 1508 + name = "inout" 1509 + version = "0.1.4" 1510 + source = "registry+https://github.com/rust-lang/crates.io-index" 1511 + checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 1512 + dependencies = [ 1513 + "generic-array", 1514 + ] 1515 + 1516 + [[package]] 1517 + name = "interpolate_name" 1518 + version = "0.2.4" 1519 + source = "registry+https://github.com/rust-lang/crates.io-index" 1520 + checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" 1521 + dependencies = [ 1522 + "proc-macro2", 1523 + "quote", 1524 + "syn 2.0.116", 1525 + ] 1526 + 1527 + [[package]] 1528 + name = "intrusive-collections" 1529 + version = "0.9.7" 1530 + source = "registry+https://github.com/rust-lang/crates.io-index" 1531 + checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" 1532 + dependencies = [ 1533 + "memoffset", 1534 + ] 1535 + 1536 + [[package]] 1537 + name = "io-uring" 1538 + version = "0.7.11" 1539 + source = "registry+https://github.com/rust-lang/crates.io-index" 1540 + checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" 1541 + dependencies = [ 1542 + "bitflags", 1543 + "cfg-if", 1544 + "libc", 1545 + ] 1546 + 1547 + [[package]] 1548 + name = "is_terminal_polyfill" 1549 + version = "1.70.2" 1550 + source = "registry+https://github.com/rust-lang/crates.io-index" 1551 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 1552 + 1553 + [[package]] 1554 + name = "itertools" 1555 + version = "0.12.1" 1556 + source = "registry+https://github.com/rust-lang/crates.io-index" 1557 + checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 1558 + dependencies = [ 1559 + "either", 1560 + ] 1561 + 1562 + [[package]] 1563 + name = "itertools" 1564 + version = "0.14.0" 1565 + source = "registry+https://github.com/rust-lang/crates.io-index" 1566 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 1567 + dependencies = [ 1568 + "either", 1569 + ] 1570 + 1571 + [[package]] 1572 + name = "itoa" 1573 + version = "1.0.17" 1574 + source = "registry+https://github.com/rust-lang/crates.io-index" 1575 + checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 1576 + 1577 + [[package]] 1578 + name = "jiff" 1579 + version = "0.2.20" 1580 + source = "registry+https://github.com/rust-lang/crates.io-index" 1581 + checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" 1582 + dependencies = [ 1583 + "jiff-static", 1584 + "log", 1585 + "portable-atomic", 1586 + "portable-atomic-util", 1587 + "serde_core", 1588 + ] 1589 + 1590 + [[package]] 1591 + name = "jiff-static" 1592 + version = "0.2.20" 1593 + source = "registry+https://github.com/rust-lang/crates.io-index" 1594 + checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" 1595 + dependencies = [ 1596 + "proc-macro2", 1597 + "quote", 1598 + "syn 2.0.116", 1599 + ] 1600 + 1601 + [[package]] 1602 + name = "jobserver" 1603 + version = "0.1.34" 1604 + source = "registry+https://github.com/rust-lang/crates.io-index" 1605 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 1606 + dependencies = [ 1607 + "getrandom 0.3.4", 1608 + "libc", 1609 + ] 1610 + 1611 + [[package]] 1612 + name = "js-sys" 1613 + version = "0.3.85" 1614 + source = "registry+https://github.com/rust-lang/crates.io-index" 1615 + checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" 1616 + dependencies = [ 1617 + "once_cell", 1618 + "wasm-bindgen", 1619 + ] 1620 + 1621 + [[package]] 1622 + name = "lazy_static" 1623 + version = "1.5.0" 1624 + source = "registry+https://github.com/rust-lang/crates.io-index" 1625 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1626 + 1627 + [[package]] 1628 + name = "lazycell" 1629 + version = "1.3.0" 1630 + source = "registry+https://github.com/rust-lang/crates.io-index" 1631 + checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 1632 + 1633 + [[package]] 1634 + name = "leb128fmt" 1635 + version = "0.1.0" 1636 + source = "registry+https://github.com/rust-lang/crates.io-index" 1637 + checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 1638 + 1639 + [[package]] 1640 + name = "lebe" 1641 + version = "0.5.3" 1642 + source = "registry+https://github.com/rust-lang/crates.io-index" 1643 + checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" 1644 + 1645 + [[package]] 1646 + name = "libc" 1647 + version = "0.2.182" 1648 + source = "registry+https://github.com/rust-lang/crates.io-index" 1649 + checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" 1650 + 1651 + [[package]] 1652 + name = "libfuzzer-sys" 1653 + version = "0.4.12" 1654 + source = "registry+https://github.com/rust-lang/crates.io-index" 1655 + checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" 1656 + dependencies = [ 1657 + "arbitrary", 1658 + "cc", 1659 + ] 1660 + 1661 + [[package]] 1662 + name = "libgit2-sys" 1663 + version = "0.18.3+1.9.2" 1664 + source = "registry+https://github.com/rust-lang/crates.io-index" 1665 + checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" 1666 + dependencies = [ 1667 + "cc", 1668 + "libc", 1669 + "libz-sys", 1670 + "pkg-config", 1671 + ] 1672 + 1673 + [[package]] 1674 + name = "libloading" 1675 + version = "0.8.9" 1676 + source = "registry+https://github.com/rust-lang/crates.io-index" 1677 + checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 1678 + dependencies = [ 1679 + "cfg-if", 1680 + "windows-link", 1681 + ] 1682 + 1683 + [[package]] 1684 + name = "libm" 1685 + version = "0.2.16" 1686 + source = "registry+https://github.com/rust-lang/crates.io-index" 1687 + checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" 1688 + 1689 + [[package]] 1690 + name = "libmimalloc-sys" 1691 + version = "0.1.44" 1692 + source = "registry+https://github.com/rust-lang/crates.io-index" 1693 + checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870" 1694 + dependencies = [ 1695 + "cc", 1696 + "libc", 1697 + ] 1698 + 1699 + [[package]] 1700 + name = "libz-sys" 1701 + version = "1.1.23" 1702 + source = "registry+https://github.com/rust-lang/crates.io-index" 1703 + checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" 1704 + dependencies = [ 1705 + "cc", 1706 + "libc", 1707 + "pkg-config", 1708 + "vcpkg", 1709 + ] 1710 + 1711 + [[package]] 1712 + name = "linux-raw-sys" 1713 + version = "0.4.15" 1714 + source = "registry+https://github.com/rust-lang/crates.io-index" 1715 + checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1716 + 1717 + [[package]] 1718 + name = "linux-raw-sys" 1719 + version = "0.11.0" 1720 + source = "registry+https://github.com/rust-lang/crates.io-index" 1721 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 1722 + 1723 + [[package]] 1724 + name = "litemap" 1725 + version = "0.8.1" 1726 + source = "registry+https://github.com/rust-lang/crates.io-index" 1727 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 1728 + 1729 + [[package]] 1730 + name = "lock_api" 1731 + version = "0.4.14" 1732 + source = "registry+https://github.com/rust-lang/crates.io-index" 1733 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1734 + dependencies = [ 1735 + "scopeguard", 1736 + ] 1737 + 1738 + [[package]] 1739 + name = "log" 1740 + version = "0.4.29" 1741 + source = "registry+https://github.com/rust-lang/crates.io-index" 1742 + checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 1743 + 1744 + [[package]] 1745 + name = "loop9" 1746 + version = "0.1.5" 1747 + source = "registry+https://github.com/rust-lang/crates.io-index" 1748 + checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" 1749 + dependencies = [ 1750 + "imgref", 1751 + ] 1752 + 1753 + [[package]] 1754 + name = "matchers" 1755 + version = "0.2.0" 1756 + source = "registry+https://github.com/rust-lang/crates.io-index" 1757 + checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 1758 + dependencies = [ 1759 + "regex-automata", 1760 + ] 1761 + 1762 + [[package]] 1763 + name = "maybe-rayon" 1764 + version = "0.1.1" 1765 + source = "registry+https://github.com/rust-lang/crates.io-index" 1766 + checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" 1767 + dependencies = [ 1768 + "cfg-if", 1769 + "rayon", 1770 + ] 1771 + 1772 + [[package]] 1773 + name = "memchr" 1774 + version = "2.8.0" 1775 + source = "registry+https://github.com/rust-lang/crates.io-index" 1776 + checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 1777 + 1778 + [[package]] 1779 + name = "memoffset" 1780 + version = "0.9.1" 1781 + source = "registry+https://github.com/rust-lang/crates.io-index" 1782 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1783 + dependencies = [ 1784 + "autocfg", 1785 + ] 1786 + 1787 + [[package]] 1788 + name = "miette" 1789 + version = "7.6.0" 1790 + source = "registry+https://github.com/rust-lang/crates.io-index" 1791 + checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 1792 + dependencies = [ 1793 + "cfg-if", 1794 + "miette-derive", 1795 + "unicode-width", 1796 + ] 1797 + 1798 + [[package]] 1799 + name = "miette-derive" 1800 + version = "7.6.0" 1801 + source = "registry+https://github.com/rust-lang/crates.io-index" 1802 + checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 1803 + dependencies = [ 1804 + "proc-macro2", 1805 + "quote", 1806 + "syn 2.0.116", 1807 + ] 1808 + 1809 + [[package]] 1810 + name = "mimalloc" 1811 + version = "0.1.48" 1812 + source = "registry+https://github.com/rust-lang/crates.io-index" 1813 + checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8" 1814 + dependencies = [ 1815 + "libmimalloc-sys", 1816 + ] 1817 + 1818 + [[package]] 1819 + name = "minimal-lexical" 1820 + version = "0.2.1" 1821 + source = "registry+https://github.com/rust-lang/crates.io-index" 1822 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1823 + 1824 + [[package]] 1825 + name = "miniz_oxide" 1826 + version = "0.8.9" 1827 + source = "registry+https://github.com/rust-lang/crates.io-index" 1828 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1829 + dependencies = [ 1830 + "adler2", 1831 + "simd-adler32", 1832 + ] 1833 + 1834 + [[package]] 1835 + name = "minreq" 1836 + version = "2.14.1" 1837 + source = "registry+https://github.com/rust-lang/crates.io-index" 1838 + checksum = "05015102dad0f7d61691ca347e9d9d9006685a64aefb3d79eecf62665de2153d" 1839 + dependencies = [ 1840 + "rustls 0.21.12", 1841 + "rustls-webpki 0.101.7", 1842 + "webpki-roots 0.25.4", 1843 + ] 1844 + 1845 + [[package]] 1846 + name = "mio" 1847 + version = "1.1.1" 1848 + source = "registry+https://github.com/rust-lang/crates.io-index" 1849 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 1850 + dependencies = [ 1851 + "libc", 1852 + "wasi", 1853 + "windows-sys 0.61.2", 1854 + ] 1855 + 1856 + [[package]] 1857 + name = "moxcms" 1858 + version = "0.7.11" 1859 + source = "registry+https://github.com/rust-lang/crates.io-index" 1860 + checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" 1861 + dependencies = [ 1862 + "num-traits", 1863 + "pxfm", 1864 + ] 1865 + 1866 + [[package]] 1867 + name = "new_debug_unreachable" 1868 + version = "1.0.6" 1869 + source = "registry+https://github.com/rust-lang/crates.io-index" 1870 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1871 + 1872 + [[package]] 1873 + name = "nom" 1874 + version = "7.1.3" 1875 + source = "registry+https://github.com/rust-lang/crates.io-index" 1876 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1877 + dependencies = [ 1878 + "memchr", 1879 + "minimal-lexical", 1880 + ] 1881 + 1882 + [[package]] 1883 + name = "nom" 1884 + version = "8.0.0" 1885 + source = "registry+https://github.com/rust-lang/crates.io-index" 1886 + checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" 1887 + dependencies = [ 1888 + "memchr", 1889 + ] 1890 + 1891 + [[package]] 1892 + name = "noop_proc_macro" 1893 + version = "0.3.0" 1894 + source = "registry+https://github.com/rust-lang/crates.io-index" 1895 + checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" 1896 + 1897 + [[package]] 1898 + name = "nu-ansi-term" 1899 + version = "0.50.3" 1900 + source = "registry+https://github.com/rust-lang/crates.io-index" 1901 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 1902 + dependencies = [ 1903 + "windows-sys 0.61.2", 1904 + ] 1905 + 1906 + [[package]] 1907 + name = "num-bigint" 1908 + version = "0.4.6" 1909 + source = "registry+https://github.com/rust-lang/crates.io-index" 1910 + checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 1911 + dependencies = [ 1912 + "num-integer", 1913 + "num-traits", 1914 + ] 1915 + 1916 + [[package]] 1917 + name = "num-conv" 1918 + version = "0.2.0" 1919 + source = "registry+https://github.com/rust-lang/crates.io-index" 1920 + checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" 1921 + 1922 + [[package]] 1923 + name = "num-derive" 1924 + version = "0.4.2" 1925 + source = "registry+https://github.com/rust-lang/crates.io-index" 1926 + checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 1927 + dependencies = [ 1928 + "proc-macro2", 1929 + "quote", 1930 + "syn 2.0.116", 1931 + ] 1932 + 1933 + [[package]] 1934 + name = "num-integer" 1935 + version = "0.1.46" 1936 + source = "registry+https://github.com/rust-lang/crates.io-index" 1937 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1938 + dependencies = [ 1939 + "num-traits", 1940 + ] 1941 + 1942 + [[package]] 1943 + name = "num-rational" 1944 + version = "0.4.2" 1945 + source = "registry+https://github.com/rust-lang/crates.io-index" 1946 + checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 1947 + dependencies = [ 1948 + "num-bigint", 1949 + "num-integer", 1950 + "num-traits", 1951 + ] 1952 + 1953 + [[package]] 1954 + name = "num-traits" 1955 + version = "0.2.19" 1956 + source = "registry+https://github.com/rust-lang/crates.io-index" 1957 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1958 + dependencies = [ 1959 + "autocfg", 1960 + ] 1961 + 1962 + [[package]] 1963 + name = "once_cell" 1964 + version = "1.21.3" 1965 + source = "registry+https://github.com/rust-lang/crates.io-index" 1966 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1967 + 1968 + [[package]] 1969 + name = "once_cell_polyfill" 1970 + version = "1.70.2" 1971 + source = "registry+https://github.com/rust-lang/crates.io-index" 1972 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 1973 + 1974 + [[package]] 1975 + name = "opaque-debug" 1976 + version = "0.3.1" 1977 + source = "registry+https://github.com/rust-lang/crates.io-index" 1978 + checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 1979 + 1980 + [[package]] 1981 + name = "pack1" 1982 + version = "1.0.0" 1983 + source = "registry+https://github.com/rust-lang/crates.io-index" 1984 + checksum = "d6e7cd9bd638dc2c831519a0caa1c006cab771a92b1303403a8322773c5b72d6" 1985 + dependencies = [ 1986 + "bytemuck", 1987 + ] 1988 + 1989 + [[package]] 1990 + name = "parking_lot" 1991 + version = "0.12.5" 1992 + source = "registry+https://github.com/rust-lang/crates.io-index" 1993 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 1994 + dependencies = [ 1995 + "lock_api", 1996 + "parking_lot_core", 1997 + ] 1998 + 1999 + [[package]] 2000 + name = "parking_lot_core" 2001 + version = "0.9.12" 2002 + source = "registry+https://github.com/rust-lang/crates.io-index" 2003 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2004 + dependencies = [ 2005 + "cfg-if", 2006 + "libc", 2007 + "redox_syscall", 2008 + "smallvec", 2009 + "windows-link", 2010 + ] 2011 + 2012 + [[package]] 2013 + name = "paste" 2014 + version = "1.0.15" 2015 + source = "registry+https://github.com/rust-lang/crates.io-index" 2016 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2017 + 2018 + [[package]] 2019 + name = "pastey" 2020 + version = "0.1.1" 2021 + source = "registry+https://github.com/rust-lang/crates.io-index" 2022 + checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" 2023 + 2024 + [[package]] 2025 + name = "percent-encoding" 2026 + version = "2.3.2" 2027 + source = "registry+https://github.com/rust-lang/crates.io-index" 2028 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2029 + 2030 + [[package]] 2031 + name = "phf" 2032 + version = "0.13.1" 2033 + source = "registry+https://github.com/rust-lang/crates.io-index" 2034 + checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" 2035 + dependencies = [ 2036 + "phf_shared", 2037 + ] 2038 + 2039 + [[package]] 2040 + name = "phf_shared" 2041 + version = "0.13.1" 2042 + source = "registry+https://github.com/rust-lang/crates.io-index" 2043 + checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" 2044 + dependencies = [ 2045 + "siphasher", 2046 + ] 2047 + 2048 + [[package]] 2049 + name = "pin-project-lite" 2050 + version = "0.2.16" 2051 + source = "registry+https://github.com/rust-lang/crates.io-index" 2052 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2053 + 2054 + [[package]] 2055 + name = "pin-utils" 2056 + version = "0.1.0" 2057 + source = "registry+https://github.com/rust-lang/crates.io-index" 2058 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2059 + 2060 + [[package]] 2061 + name = "pkg-config" 2062 + version = "0.3.32" 2063 + source = "registry+https://github.com/rust-lang/crates.io-index" 2064 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2065 + 2066 + [[package]] 2067 + name = "png" 2068 + version = "0.18.1" 2069 + source = "registry+https://github.com/rust-lang/crates.io-index" 2070 + checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" 2071 + dependencies = [ 2072 + "bitflags", 2073 + "crc32fast", 2074 + "fdeflate", 2075 + "flate2", 2076 + "miniz_oxide", 2077 + ] 2078 + 2079 + [[package]] 2080 + name = "polling" 2081 + version = "3.11.0" 2082 + source = "registry+https://github.com/rust-lang/crates.io-index" 2083 + checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 2084 + dependencies = [ 2085 + "cfg-if", 2086 + "concurrent-queue", 2087 + "hermit-abi", 2088 + "pin-project-lite", 2089 + "rustix 1.1.3", 2090 + "windows-sys 0.61.2", 2091 + ] 2092 + 2093 + [[package]] 2094 + name = "polyval" 2095 + version = "0.6.2" 2096 + source = "registry+https://github.com/rust-lang/crates.io-index" 2097 + checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" 2098 + dependencies = [ 2099 + "cfg-if", 2100 + "cpufeatures", 2101 + "opaque-debug", 2102 + "universal-hash", 2103 + ] 2104 + 2105 + [[package]] 2106 + name = "portable-atomic" 2107 + version = "1.13.1" 2108 + source = "registry+https://github.com/rust-lang/crates.io-index" 2109 + checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" 2110 + 2111 + [[package]] 2112 + name = "portable-atomic-util" 2113 + version = "0.2.5" 2114 + source = "registry+https://github.com/rust-lang/crates.io-index" 2115 + checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" 2116 + dependencies = [ 2117 + "portable-atomic", 2118 + ] 2119 + 2120 + [[package]] 2121 + name = "potential_utf" 2122 + version = "0.1.4" 2123 + source = "registry+https://github.com/rust-lang/crates.io-index" 2124 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 2125 + dependencies = [ 2126 + "zerovec", 2127 + ] 2128 + 2129 + [[package]] 2130 + name = "powerfmt" 2131 + version = "0.2.0" 2132 + source = "registry+https://github.com/rust-lang/crates.io-index" 2133 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2134 + 2135 + [[package]] 2136 + name = "ppv-lite86" 2137 + version = "0.2.21" 2138 + source = "registry+https://github.com/rust-lang/crates.io-index" 2139 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2140 + dependencies = [ 2141 + "zerocopy", 2142 + ] 2143 + 2144 + [[package]] 2145 + name = "prettyplease" 2146 + version = "0.2.37" 2147 + source = "registry+https://github.com/rust-lang/crates.io-index" 2148 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2149 + dependencies = [ 2150 + "proc-macro2", 2151 + "syn 2.0.116", 2152 + ] 2153 + 2154 + [[package]] 2155 + name = "proc-macro2" 2156 + version = "1.0.106" 2157 + source = "registry+https://github.com/rust-lang/crates.io-index" 2158 + checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 2159 + dependencies = [ 2160 + "unicode-ident", 2161 + ] 2162 + 2163 + [[package]] 2164 + name = "profiling" 2165 + version = "1.0.17" 2166 + source = "registry+https://github.com/rust-lang/crates.io-index" 2167 + checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2168 + dependencies = [ 2169 + "profiling-procmacros", 2170 + ] 2171 + 2172 + [[package]] 2173 + name = "profiling-procmacros" 2174 + version = "1.0.17" 2175 + source = "registry+https://github.com/rust-lang/crates.io-index" 2176 + checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" 2177 + dependencies = [ 2178 + "quote", 2179 + "syn 2.0.116", 2180 + ] 2181 + 2182 + [[package]] 2183 + name = "prost" 2184 + version = "0.14.3" 2185 + source = "registry+https://github.com/rust-lang/crates.io-index" 2186 + checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" 2187 + dependencies = [ 2188 + "bytes", 2189 + "prost-derive", 2190 + ] 2191 + 2192 + [[package]] 2193 + name = "prost-derive" 2194 + version = "0.14.3" 2195 + source = "registry+https://github.com/rust-lang/crates.io-index" 2196 + checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" 2197 + dependencies = [ 2198 + "anyhow", 2199 + "itertools 0.14.0", 2200 + "proc-macro2", 2201 + "quote", 2202 + "syn 2.0.116", 2203 + ] 2204 + 2205 + [[package]] 2206 + name = "pxfm" 2207 + version = "0.1.27" 2208 + source = "registry+https://github.com/rust-lang/crates.io-index" 2209 + checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" 2210 + dependencies = [ 2211 + "num-traits", 2212 + ] 2213 + 2214 + [[package]] 2215 + name = "qoi" 2216 + version = "0.4.1" 2217 + source = "registry+https://github.com/rust-lang/crates.io-index" 2218 + checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" 2219 + dependencies = [ 2220 + "bytemuck", 2221 + ] 2222 + 2223 + [[package]] 2224 + name = "quick-error" 2225 + version = "2.0.1" 2226 + source = "registry+https://github.com/rust-lang/crates.io-index" 2227 + checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 2228 + 2229 + [[package]] 2230 + name = "quote" 2231 + version = "1.0.44" 2232 + source = "registry+https://github.com/rust-lang/crates.io-index" 2233 + checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" 2234 + dependencies = [ 2235 + "proc-macro2", 2236 + ] 2237 + 2238 + [[package]] 2239 + name = "r-efi" 2240 + version = "5.3.0" 2241 + source = "registry+https://github.com/rust-lang/crates.io-index" 2242 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2243 + 2244 + [[package]] 2245 + name = "rand" 2246 + version = "0.9.2" 2247 + source = "registry+https://github.com/rust-lang/crates.io-index" 2248 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 2249 + dependencies = [ 2250 + "rand_chacha", 2251 + "rand_core 0.9.5", 2252 + ] 2253 + 2254 + [[package]] 2255 + name = "rand_chacha" 2256 + version = "0.9.0" 2257 + source = "registry+https://github.com/rust-lang/crates.io-index" 2258 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2259 + dependencies = [ 2260 + "ppv-lite86", 2261 + "rand_core 0.9.5", 2262 + ] 2263 + 2264 + [[package]] 2265 + name = "rand_core" 2266 + version = "0.6.4" 2267 + source = "registry+https://github.com/rust-lang/crates.io-index" 2268 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2269 + dependencies = [ 2270 + "getrandom 0.2.17", 2271 + ] 2272 + 2273 + [[package]] 2274 + name = "rand_core" 2275 + version = "0.9.5" 2276 + source = "registry+https://github.com/rust-lang/crates.io-index" 2277 + checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" 2278 + dependencies = [ 2279 + "getrandom 0.3.4", 2280 + ] 2281 + 2282 + [[package]] 2283 + name = "rapidhash" 2284 + version = "4.4.1" 2285 + source = "registry+https://github.com/rust-lang/crates.io-index" 2286 + checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" 2287 + dependencies = [ 2288 + "rustversion", 2289 + ] 2290 + 2291 + [[package]] 2292 + name = "rav1e" 2293 + version = "0.8.1" 2294 + source = "registry+https://github.com/rust-lang/crates.io-index" 2295 + checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" 2296 + dependencies = [ 2297 + "aligned-vec", 2298 + "arbitrary", 2299 + "arg_enum_proc_macro", 2300 + "arrayvec", 2301 + "av-scenechange", 2302 + "av1-grain", 2303 + "bitstream-io", 2304 + "built 0.8.0", 2305 + "cfg-if", 2306 + "interpolate_name", 2307 + "itertools 0.14.0", 2308 + "libc", 2309 + "libfuzzer-sys", 2310 + "log", 2311 + "maybe-rayon", 2312 + "new_debug_unreachable", 2313 + "noop_proc_macro", 2314 + "num-derive", 2315 + "num-traits", 2316 + "paste", 2317 + "profiling", 2318 + "rand", 2319 + "rand_chacha", 2320 + "simd_helpers", 2321 + "thiserror", 2322 + "v_frame", 2323 + "wasm-bindgen", 2324 + ] 2325 + 2326 + [[package]] 2327 + name = "ravif" 2328 + version = "0.12.0" 2329 + source = "registry+https://github.com/rust-lang/crates.io-index" 2330 + checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" 2331 + dependencies = [ 2332 + "avif-serialize", 2333 + "imgref", 2334 + "loop9", 2335 + "quick-error", 2336 + "rav1e", 2337 + "rayon", 2338 + "rgb", 2339 + ] 2340 + 2341 + [[package]] 2342 + name = "rayon" 2343 + version = "1.11.0" 2344 + source = "registry+https://github.com/rust-lang/crates.io-index" 2345 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 2346 + dependencies = [ 2347 + "either", 2348 + "rayon-core", 2349 + ] 2350 + 2351 + [[package]] 2352 + name = "rayon-core" 2353 + version = "1.13.0" 2354 + source = "registry+https://github.com/rust-lang/crates.io-index" 2355 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 2356 + dependencies = [ 2357 + "crossbeam-deque", 2358 + "crossbeam-utils", 2359 + ] 2360 + 2361 + [[package]] 2362 + name = "redox_syscall" 2363 + version = "0.5.18" 2364 + source = "registry+https://github.com/rust-lang/crates.io-index" 2365 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 2366 + dependencies = [ 2367 + "bitflags", 2368 + ] 2369 + 2370 + [[package]] 2371 + name = "ref-cast" 2372 + version = "1.0.25" 2373 + source = "registry+https://github.com/rust-lang/crates.io-index" 2374 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 2375 + dependencies = [ 2376 + "ref-cast-impl", 2377 + ] 2378 + 2379 + [[package]] 2380 + name = "ref-cast-impl" 2381 + version = "1.0.25" 2382 + source = "registry+https://github.com/rust-lang/crates.io-index" 2383 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 2384 + dependencies = [ 2385 + "proc-macro2", 2386 + "quote", 2387 + "syn 2.0.116", 2388 + ] 2389 + 2390 + [[package]] 2391 + name = "regex" 2392 + version = "1.12.3" 2393 + source = "registry+https://github.com/rust-lang/crates.io-index" 2394 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 2395 + dependencies = [ 2396 + "aho-corasick", 2397 + "memchr", 2398 + "regex-automata", 2399 + "regex-syntax", 2400 + ] 2401 + 2402 + [[package]] 2403 + name = "regex-automata" 2404 + version = "0.4.14" 2405 + source = "registry+https://github.com/rust-lang/crates.io-index" 2406 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 2407 + dependencies = [ 2408 + "aho-corasick", 2409 + "memchr", 2410 + "regex-syntax", 2411 + ] 2412 + 2413 + [[package]] 2414 + name = "regex-syntax" 2415 + version = "0.8.9" 2416 + source = "registry+https://github.com/rust-lang/crates.io-index" 2417 + checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" 2418 + 2419 + [[package]] 2420 + name = "rgb" 2421 + version = "0.8.52" 2422 + source = "registry+https://github.com/rust-lang/crates.io-index" 2423 + checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" 2424 + 2425 + [[package]] 2426 + name = "ring" 2427 + version = "0.17.14" 2428 + source = "registry+https://github.com/rust-lang/crates.io-index" 2429 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2430 + dependencies = [ 2431 + "cc", 2432 + "cfg-if", 2433 + "getrandom 0.2.17", 2434 + "libc", 2435 + "untrusted", 2436 + "windows-sys 0.52.0", 2437 + ] 2438 + 2439 + [[package]] 2440 + name = "roaring" 2441 + version = "0.11.3" 2442 + source = "registry+https://github.com/rust-lang/crates.io-index" 2443 + checksum = "8ba9ce64a8f45d7fc86358410bb1a82e8c987504c0d4900e9141d69a9f26c885" 2444 + dependencies = [ 2445 + "bytemuck", 2446 + "byteorder", 2447 + ] 2448 + 2449 + [[package]] 2450 + name = "rustc-hash" 2451 + version = "1.1.0" 2452 + source = "registry+https://github.com/rust-lang/crates.io-index" 2453 + checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2454 + 2455 + [[package]] 2456 + name = "rustc-hash" 2457 + version = "2.1.1" 2458 + source = "registry+https://github.com/rust-lang/crates.io-index" 2459 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2460 + 2461 + [[package]] 2462 + name = "rustc_version" 2463 + version = "0.4.1" 2464 + source = "registry+https://github.com/rust-lang/crates.io-index" 2465 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2466 + dependencies = [ 2467 + "semver", 2468 + ] 2469 + 2470 + [[package]] 2471 + name = "rustix" 2472 + version = "0.38.44" 2473 + source = "registry+https://github.com/rust-lang/crates.io-index" 2474 + checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2475 + dependencies = [ 2476 + "bitflags", 2477 + "errno", 2478 + "libc", 2479 + "linux-raw-sys 0.4.15", 2480 + "windows-sys 0.52.0", 2481 + ] 2482 + 2483 + [[package]] 2484 + name = "rustix" 2485 + version = "1.1.3" 2486 + source = "registry+https://github.com/rust-lang/crates.io-index" 2487 + checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" 2488 + dependencies = [ 2489 + "bitflags", 2490 + "errno", 2491 + "libc", 2492 + "linux-raw-sys 0.11.0", 2493 + "windows-sys 0.61.2", 2494 + ] 2495 + 2496 + [[package]] 2497 + name = "rustls" 2498 + version = "0.21.12" 2499 + source = "registry+https://github.com/rust-lang/crates.io-index" 2500 + checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 2501 + dependencies = [ 2502 + "log", 2503 + "ring", 2504 + "rustls-webpki 0.101.7", 2505 + "sct", 2506 + ] 2507 + 2508 + [[package]] 2509 + name = "rustls" 2510 + version = "0.23.36" 2511 + source = "registry+https://github.com/rust-lang/crates.io-index" 2512 + checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" 2513 + dependencies = [ 2514 + "aws-lc-rs", 2515 + "log", 2516 + "once_cell", 2517 + "rustls-pki-types", 2518 + "rustls-webpki 0.103.9", 2519 + "subtle", 2520 + "zeroize", 2521 + ] 2522 + 2523 + [[package]] 2524 + name = "rustls-pki-types" 2525 + version = "1.14.0" 2526 + source = "registry+https://github.com/rust-lang/crates.io-index" 2527 + checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" 2528 + dependencies = [ 2529 + "zeroize", 2530 + ] 2531 + 2532 + [[package]] 2533 + name = "rustls-webpki" 2534 + version = "0.101.7" 2535 + source = "registry+https://github.com/rust-lang/crates.io-index" 2536 + checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 2537 + dependencies = [ 2538 + "ring", 2539 + "untrusted", 2540 + ] 2541 + 2542 + [[package]] 2543 + name = "rustls-webpki" 2544 + version = "0.103.9" 2545 + source = "registry+https://github.com/rust-lang/crates.io-index" 2546 + checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" 2547 + dependencies = [ 2548 + "aws-lc-rs", 2549 + "ring", 2550 + "rustls-pki-types", 2551 + "untrusted", 2552 + ] 2553 + 2554 + [[package]] 2555 + name = "rustversion" 2556 + version = "1.0.22" 2557 + source = "registry+https://github.com/rust-lang/crates.io-index" 2558 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2559 + 2560 + [[package]] 2561 + name = "ryu" 2562 + version = "1.0.23" 2563 + source = "registry+https://github.com/rust-lang/crates.io-index" 2564 + checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" 2565 + 2566 + [[package]] 2567 + name = "schemars" 2568 + version = "0.9.0" 2569 + source = "registry+https://github.com/rust-lang/crates.io-index" 2570 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 2571 + dependencies = [ 2572 + "dyn-clone", 2573 + "ref-cast", 2574 + "serde", 2575 + "serde_json", 2576 + ] 2577 + 2578 + [[package]] 2579 + name = "schemars" 2580 + version = "1.2.1" 2581 + source = "registry+https://github.com/rust-lang/crates.io-index" 2582 + checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" 2583 + dependencies = [ 2584 + "dyn-clone", 2585 + "ref-cast", 2586 + "serde", 2587 + "serde_json", 2588 + ] 2589 + 2590 + [[package]] 2591 + name = "scopeguard" 2592 + version = "1.2.0" 2593 + source = "registry+https://github.com/rust-lang/crates.io-index" 2594 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2595 + 2596 + [[package]] 2597 + name = "sct" 2598 + version = "0.7.1" 2599 + source = "registry+https://github.com/rust-lang/crates.io-index" 2600 + checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 2601 + dependencies = [ 2602 + "ring", 2603 + "untrusted", 2604 + ] 2605 + 2606 + [[package]] 2607 + name = "semver" 2608 + version = "1.0.27" 2609 + source = "registry+https://github.com/rust-lang/crates.io-index" 2610 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 2611 + 2612 + [[package]] 2613 + name = "serde" 2614 + version = "1.0.228" 2615 + source = "registry+https://github.com/rust-lang/crates.io-index" 2616 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 2617 + dependencies = [ 2618 + "serde_core", 2619 + "serde_derive", 2620 + ] 2621 + 2622 + [[package]] 2623 + name = "serde_core" 2624 + version = "1.0.228" 2625 + source = "registry+https://github.com/rust-lang/crates.io-index" 2626 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 2627 + dependencies = [ 2628 + "serde_derive", 2629 + ] 2630 + 2631 + [[package]] 2632 + name = "serde_derive" 2633 + version = "1.0.228" 2634 + source = "registry+https://github.com/rust-lang/crates.io-index" 2635 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 2636 + dependencies = [ 2637 + "proc-macro2", 2638 + "quote", 2639 + "syn 2.0.116", 2640 + ] 2641 + 2642 + [[package]] 2643 + name = "serde_json" 2644 + version = "1.0.149" 2645 + source = "registry+https://github.com/rust-lang/crates.io-index" 2646 + checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 2647 + dependencies = [ 2648 + "itoa", 2649 + "memchr", 2650 + "serde", 2651 + "serde_core", 2652 + "zmij", 2653 + ] 2654 + 2655 + [[package]] 2656 + name = "serde_with" 2657 + version = "3.16.1" 2658 + source = "registry+https://github.com/rust-lang/crates.io-index" 2659 + checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" 2660 + dependencies = [ 2661 + "base64 0.22.1", 2662 + "chrono", 2663 + "hex", 2664 + "indexmap 1.9.3", 2665 + "indexmap 2.13.0", 2666 + "schemars 0.9.0", 2667 + "schemars 1.2.1", 2668 + "serde_core", 2669 + "serde_json", 2670 + "serde_with_macros", 2671 + "time", 2672 + ] 2673 + 2674 + [[package]] 2675 + name = "serde_with_macros" 2676 + version = "3.16.1" 2677 + source = "registry+https://github.com/rust-lang/crates.io-index" 2678 + checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" 2679 + dependencies = [ 2680 + "darling 0.21.3", 2681 + "proc-macro2", 2682 + "quote", 2683 + "syn 2.0.116", 2684 + ] 2685 + 2686 + [[package]] 2687 + name = "sha1" 2688 + version = "0.10.6" 2689 + source = "registry+https://github.com/rust-lang/crates.io-index" 2690 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2691 + dependencies = [ 2692 + "cfg-if", 2693 + "cpufeatures", 2694 + "digest", 2695 + ] 2696 + 2697 + [[package]] 2698 + name = "sha1_smol" 2699 + version = "1.0.1" 2700 + source = "registry+https://github.com/rust-lang/crates.io-index" 2701 + checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 2702 + 2703 + [[package]] 2704 + name = "sharded-slab" 2705 + version = "0.1.7" 2706 + source = "registry+https://github.com/rust-lang/crates.io-index" 2707 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2708 + dependencies = [ 2709 + "lazy_static", 2710 + ] 2711 + 2712 + [[package]] 2713 + name = "shlex" 2714 + version = "1.3.0" 2715 + source = "registry+https://github.com/rust-lang/crates.io-index" 2716 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2717 + 2718 + [[package]] 2719 + name = "simd-adler32" 2720 + version = "0.3.8" 2721 + source = "registry+https://github.com/rust-lang/crates.io-index" 2722 + checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 2723 + 2724 + [[package]] 2725 + name = "simd_helpers" 2726 + version = "0.1.0" 2727 + source = "registry+https://github.com/rust-lang/crates.io-index" 2728 + checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" 2729 + dependencies = [ 2730 + "quote", 2731 + ] 2732 + 2733 + [[package]] 2734 + name = "simsimd" 2735 + version = "6.5.13" 2736 + source = "registry+https://github.com/rust-lang/crates.io-index" 2737 + checksum = "9f81af684ca3dc160907f1478d779bdfd8bae52f55f4c58caba0229670a83a0d" 2738 + dependencies = [ 2739 + "cc", 2740 + ] 2741 + 2742 + [[package]] 2743 + name = "siphasher" 2744 + version = "1.0.2" 2745 + source = "registry+https://github.com/rust-lang/crates.io-index" 2746 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 2747 + 2748 + [[package]] 2749 + name = "slab" 2750 + version = "0.4.12" 2751 + source = "registry+https://github.com/rust-lang/crates.io-index" 2752 + checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" 2753 + 2754 + [[package]] 2755 + name = "smallvec" 2756 + version = "1.15.1" 2757 + source = "registry+https://github.com/rust-lang/crates.io-index" 2758 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2759 + 2760 + [[package]] 2761 + name = "socket2" 2762 + version = "0.6.2" 2763 + source = "registry+https://github.com/rust-lang/crates.io-index" 2764 + checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" 2765 + dependencies = [ 2766 + "libc", 2767 + "windows-sys 0.60.2", 2768 + ] 2769 + 2770 + [[package]] 2771 + name = "softaes" 2772 + version = "0.1.3" 2773 + source = "registry+https://github.com/rust-lang/crates.io-index" 2774 + checksum = "fef461faaeb36c340b6c887167a9054a034f6acfc50a014ead26a02b4356b3de" 2775 + 2776 + [[package]] 2777 + name = "stable_deref_trait" 2778 + version = "1.2.1" 2779 + source = "registry+https://github.com/rust-lang/crates.io-index" 2780 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 2781 + 2782 + [[package]] 2783 + name = "strsim" 2784 + version = "0.11.1" 2785 + source = "registry+https://github.com/rust-lang/crates.io-index" 2786 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2787 + 2788 + [[package]] 2789 + name = "strum" 2790 + version = "0.26.3" 2791 + source = "registry+https://github.com/rust-lang/crates.io-index" 2792 + checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2793 + dependencies = [ 2794 + "strum_macros", 2795 + ] 2796 + 2797 + [[package]] 2798 + name = "strum_macros" 2799 + version = "0.26.4" 2800 + source = "registry+https://github.com/rust-lang/crates.io-index" 2801 + checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2802 + dependencies = [ 2803 + "heck", 2804 + "proc-macro2", 2805 + "quote", 2806 + "rustversion", 2807 + "syn 2.0.116", 2808 + ] 2809 + 2810 + [[package]] 2811 + name = "subtle" 2812 + version = "2.6.1" 2813 + source = "registry+https://github.com/rust-lang/crates.io-index" 2814 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2815 + 2816 + [[package]] 2817 + name = "syn" 2818 + version = "1.0.109" 2819 + source = "registry+https://github.com/rust-lang/crates.io-index" 2820 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2821 + dependencies = [ 2822 + "proc-macro2", 2823 + "quote", 2824 + "unicode-ident", 2825 + ] 2826 + 2827 + [[package]] 2828 + name = "syn" 2829 + version = "2.0.116" 2830 + source = "registry+https://github.com/rust-lang/crates.io-index" 2831 + checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" 2832 + dependencies = [ 2833 + "proc-macro2", 2834 + "quote", 2835 + "unicode-ident", 2836 + ] 2837 + 2838 + [[package]] 2839 + name = "synstructure" 2840 + version = "0.13.2" 2841 + source = "registry+https://github.com/rust-lang/crates.io-index" 2842 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2843 + dependencies = [ 2844 + "proc-macro2", 2845 + "quote", 2846 + "syn 2.0.116", 2847 + ] 2848 + 2849 + [[package]] 2850 + name = "tempfile" 2851 + version = "3.25.0" 2852 + source = "registry+https://github.com/rust-lang/crates.io-index" 2853 + checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" 2854 + dependencies = [ 2855 + "fastrand", 2856 + "getrandom 0.3.4", 2857 + "once_cell", 2858 + "rustix 1.1.3", 2859 + "windows-sys 0.61.2", 2860 + ] 2861 + 2862 + [[package]] 2863 + name = "thiserror" 2864 + version = "2.0.18" 2865 + source = "registry+https://github.com/rust-lang/crates.io-index" 2866 + checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" 2867 + dependencies = [ 2868 + "thiserror-impl", 2869 + ] 2870 + 2871 + [[package]] 2872 + name = "thiserror-impl" 2873 + version = "2.0.18" 2874 + source = "registry+https://github.com/rust-lang/crates.io-index" 2875 + checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" 2876 + dependencies = [ 2877 + "proc-macro2", 2878 + "quote", 2879 + "syn 2.0.116", 2880 + ] 2881 + 2882 + [[package]] 2883 + name = "thread_local" 2884 + version = "1.1.9" 2885 + source = "registry+https://github.com/rust-lang/crates.io-index" 2886 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 2887 + dependencies = [ 2888 + "cfg-if", 2889 + ] 2890 + 2891 + [[package]] 2892 + name = "tiff" 2893 + version = "0.10.3" 2894 + source = "registry+https://github.com/rust-lang/crates.io-index" 2895 + checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" 2896 + dependencies = [ 2897 + "fax", 2898 + "flate2", 2899 + "half", 2900 + "quick-error", 2901 + "weezl", 2902 + "zune-jpeg 0.4.21", 2903 + ] 2904 + 2905 + [[package]] 2906 + name = "time" 2907 + version = "0.3.47" 2908 + source = "registry+https://github.com/rust-lang/crates.io-index" 2909 + checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" 2910 + dependencies = [ 2911 + "deranged", 2912 + "itoa", 2913 + "num-conv", 2914 + "powerfmt", 2915 + "serde_core", 2916 + "time-core", 2917 + "time-macros", 2918 + ] 2919 + 2920 + [[package]] 2921 + name = "time-core" 2922 + version = "0.1.8" 2923 + source = "registry+https://github.com/rust-lang/crates.io-index" 2924 + checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" 2925 + 2926 + [[package]] 2927 + name = "time-macros" 2928 + version = "0.2.27" 2929 + source = "registry+https://github.com/rust-lang/crates.io-index" 2930 + checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" 2931 + dependencies = [ 2932 + "num-conv", 2933 + "time-core", 2934 + ] 2935 + 2936 + [[package]] 2937 + name = "tinystr" 2938 + version = "0.8.2" 2939 + source = "registry+https://github.com/rust-lang/crates.io-index" 2940 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 2941 + dependencies = [ 2942 + "displaydoc", 2943 + "zerovec", 2944 + ] 2945 + 2946 + [[package]] 2947 + name = "tokio" 2948 + version = "1.49.0" 2949 + source = "registry+https://github.com/rust-lang/crates.io-index" 2950 + checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" 2951 + dependencies = [ 2952 + "bytes", 2953 + "libc", 2954 + "mio", 2955 + "pin-project-lite", 2956 + "socket2", 2957 + "tokio-macros", 2958 + "windows-sys 0.61.2", 2959 + ] 2960 + 2961 + [[package]] 2962 + name = "tokio-macros" 2963 + version = "2.6.0" 2964 + source = "registry+https://github.com/rust-lang/crates.io-index" 2965 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 2966 + dependencies = [ 2967 + "proc-macro2", 2968 + "quote", 2969 + "syn 2.0.116", 2970 + ] 2971 + 2972 + [[package]] 2973 + name = "tokio-rustls" 2974 + version = "0.26.4" 2975 + source = "registry+https://github.com/rust-lang/crates.io-index" 2976 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 2977 + dependencies = [ 2978 + "rustls 0.23.36", 2979 + "tokio", 2980 + ] 2981 + 2982 + [[package]] 2983 + name = "tokio-tungstenite" 2984 + version = "0.26.2" 2985 + source = "registry+https://github.com/rust-lang/crates.io-index" 2986 + checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" 2987 + dependencies = [ 2988 + "futures-util", 2989 + "log", 2990 + "rustls 0.23.36", 2991 + "rustls-pki-types", 2992 + "tokio", 2993 + "tokio-rustls", 2994 + "tungstenite", 2995 + "webpki-roots 0.26.11", 2996 + ] 2997 + 2998 + [[package]] 2999 + name = "tokio-tungstenite-wasm" 3000 + version = "0.6.1" 3001 + source = "registry+https://github.com/rust-lang/crates.io-index" 3002 + checksum = "4585aa997e4afb43c64f9101c27411b8e1bf9dde49b22e3e47acdde3055b325c" 3003 + dependencies = [ 3004 + "bytes", 3005 + "futures-channel", 3006 + "futures-util", 3007 + "http", 3008 + "httparse", 3009 + "js-sys", 3010 + "thiserror", 3011 + "tokio", 3012 + "tokio-tungstenite", 3013 + "wasm-bindgen", 3014 + "web-sys", 3015 + ] 3016 + 3017 + [[package]] 3018 + name = "tracing" 3019 + version = "0.1.44" 3020 + source = "registry+https://github.com/rust-lang/crates.io-index" 3021 + checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" 3022 + dependencies = [ 3023 + "pin-project-lite", 3024 + "tracing-attributes", 3025 + "tracing-core", 3026 + ] 3027 + 3028 + [[package]] 3029 + name = "tracing-appender" 3030 + version = "0.2.4" 3031 + source = "registry+https://github.com/rust-lang/crates.io-index" 3032 + checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf" 3033 + dependencies = [ 3034 + "crossbeam-channel", 3035 + "thiserror", 3036 + "time", 3037 + "tracing-subscriber", 3038 + ] 3039 + 3040 + [[package]] 3041 + name = "tracing-attributes" 3042 + version = "0.1.31" 3043 + source = "registry+https://github.com/rust-lang/crates.io-index" 3044 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 3045 + dependencies = [ 3046 + "proc-macro2", 3047 + "quote", 3048 + "syn 2.0.116", 3049 + ] 3050 + 3051 + [[package]] 3052 + name = "tracing-core" 3053 + version = "0.1.36" 3054 + source = "registry+https://github.com/rust-lang/crates.io-index" 3055 + checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 3056 + dependencies = [ 3057 + "once_cell", 3058 + "valuable", 3059 + ] 3060 + 3061 + [[package]] 3062 + name = "tracing-log" 3063 + version = "0.2.0" 3064 + source = "registry+https://github.com/rust-lang/crates.io-index" 3065 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3066 + dependencies = [ 3067 + "log", 3068 + "once_cell", 3069 + "tracing-core", 3070 + ] 3071 + 3072 + [[package]] 3073 + name = "tracing-subscriber" 3074 + version = "0.3.22" 3075 + source = "registry+https://github.com/rust-lang/crates.io-index" 3076 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 3077 + dependencies = [ 3078 + "matchers", 3079 + "nu-ansi-term", 3080 + "once_cell", 3081 + "regex-automata", 3082 + "sharded-slab", 3083 + "smallvec", 3084 + "thread_local", 3085 + "tracing", 3086 + "tracing-core", 3087 + "tracing-log", 3088 + ] 3089 + 3090 + [[package]] 3091 + name = "tungstenite" 3092 + version = "0.26.2" 3093 + source = "registry+https://github.com/rust-lang/crates.io-index" 3094 + checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" 3095 + dependencies = [ 3096 + "bytes", 3097 + "data-encoding", 3098 + "http", 3099 + "httparse", 3100 + "log", 3101 + "rand", 3102 + "rustls 0.23.36", 3103 + "rustls-pki-types", 3104 + "sha1", 3105 + "thiserror", 3106 + "utf-8", 3107 + ] 3108 + 3109 + [[package]] 3110 + name = "turso" 3111 + version = "0.4.4" 3112 + source = "registry+https://github.com/rust-lang/crates.io-index" 3113 + checksum = "1f2fe423c2c954948babb36edda12b737e321d8541d4eae519694f7d512ecab6" 3114 + dependencies = [ 3115 + "mimalloc", 3116 + "thiserror", 3117 + "tracing", 3118 + "tracing-subscriber", 3119 + "turso_sdk_kit", 3120 + "turso_sync_sdk_kit", 3121 + ] 3122 + 3123 + [[package]] 3124 + name = "turso_core" 3125 + version = "0.4.4" 3126 + source = "registry+https://github.com/rust-lang/crates.io-index" 3127 + checksum = "7a8b54994ee025964459322bcdb4f6f78c5dba82643863dabfac680f16c8afa8" 3128 + dependencies = [ 3129 + "aegis", 3130 + "aes", 3131 + "aes-gcm", 3132 + "arc-swap", 3133 + "bitflags", 3134 + "branches", 3135 + "built 0.7.7", 3136 + "bumpalo", 3137 + "bytemuck", 3138 + "cfg_block", 3139 + "chrono", 3140 + "crossbeam-skiplist", 3141 + "either", 3142 + "fallible-iterator", 3143 + "fastbloom", 3144 + "hex", 3145 + "intrusive-collections", 3146 + "io-uring", 3147 + "libc", 3148 + "libloading", 3149 + "libm", 3150 + "miette", 3151 + "pack1", 3152 + "parking_lot", 3153 + "paste", 3154 + "polling", 3155 + "rand", 3156 + "rapidhash", 3157 + "regex", 3158 + "regex-syntax", 3159 + "roaring", 3160 + "rustc-hash 2.1.1", 3161 + "rustix 1.1.3", 3162 + "ryu", 3163 + "simsimd", 3164 + "strum", 3165 + "strum_macros", 3166 + "tempfile", 3167 + "thiserror", 3168 + "tracing", 3169 + "tracing-subscriber", 3170 + "turso_ext", 3171 + "turso_macros", 3172 + "turso_parser", 3173 + "twox-hash", 3174 + "uncased", 3175 + "uuid", 3176 + ] 3177 + 3178 + [[package]] 3179 + name = "turso_ext" 3180 + version = "0.4.4" 3181 + source = "registry+https://github.com/rust-lang/crates.io-index" 3182 + checksum = "2de917b4c5881bfb34ccbb1dcf4992773bc39853eacf248955f2ece7e3cb3049" 3183 + dependencies = [ 3184 + "chrono", 3185 + "getrandom 0.3.4", 3186 + "turso_macros", 3187 + ] 3188 + 3189 + [[package]] 3190 + name = "turso_macros" 3191 + version = "0.4.4" 3192 + source = "registry+https://github.com/rust-lang/crates.io-index" 3193 + checksum = "cc2f62bb271d4cf202bc2acbeb8e2c3f764ec754924f144e704cdcba2e5b0c84" 3194 + dependencies = [ 3195 + "proc-macro2", 3196 + "quote", 3197 + "syn 2.0.116", 3198 + ] 3199 + 3200 + [[package]] 3201 + name = "turso_parser" 3202 + version = "0.4.4" 3203 + source = "registry+https://github.com/rust-lang/crates.io-index" 3204 + checksum = "92ad89caa1c4888756bd027485499d1dc4c8420d15887ab32aa28b707c411221" 3205 + dependencies = [ 3206 + "bitflags", 3207 + "memchr", 3208 + "miette", 3209 + "strum", 3210 + "strum_macros", 3211 + "thiserror", 3212 + "turso_macros", 3213 + ] 3214 + 3215 + [[package]] 3216 + name = "turso_sdk_kit" 3217 + version = "0.4.4" 3218 + source = "registry+https://github.com/rust-lang/crates.io-index" 3219 + checksum = "00ff5b2cadd6c8b749511648d50c95f69bfa52efc5d88cc2e2deedd0beeb6c89" 3220 + dependencies = [ 3221 + "bindgen", 3222 + "env_logger", 3223 + "tracing", 3224 + "tracing-appender", 3225 + "tracing-subscriber", 3226 + "turso_core", 3227 + "turso_sdk_kit_macros", 3228 + ] 3229 + 3230 + [[package]] 3231 + name = "turso_sdk_kit_macros" 3232 + version = "0.4.4" 3233 + source = "registry+https://github.com/rust-lang/crates.io-index" 3234 + checksum = "289f7ea7499419e6670363ca18e954ed53397bb1e03ab7eabbb267d9b05ab836" 3235 + dependencies = [ 3236 + "proc-macro2", 3237 + "quote", 3238 + "syn 2.0.116", 3239 + ] 3240 + 3241 + [[package]] 3242 + name = "turso_sync_engine" 3243 + version = "0.4.4" 3244 + source = "registry+https://github.com/rust-lang/crates.io-index" 3245 + checksum = "ea9860c615a7d8df43fc6ac4293636e9d743c1693513c81be22f0e9388624f58" 3246 + dependencies = [ 3247 + "base64 0.22.1", 3248 + "bytes", 3249 + "genawaiter", 3250 + "http", 3251 + "libc", 3252 + "prost", 3253 + "roaring", 3254 + "serde", 3255 + "serde_json", 3256 + "thiserror", 3257 + "tracing", 3258 + "turso_core", 3259 + "turso_parser", 3260 + "uuid", 3261 + ] 3262 + 3263 + [[package]] 3264 + name = "turso_sync_sdk_kit" 3265 + version = "0.4.4" 3266 + source = "registry+https://github.com/rust-lang/crates.io-index" 3267 + checksum = "2b669b19a5f4bfa7cfdf5045af36ca4a2087431c0d2844ec539ddcf951b5c9d2" 3268 + dependencies = [ 3269 + "bindgen", 3270 + "env_logger", 3271 + "genawaiter", 3272 + "parking_lot", 3273 + "tracing", 3274 + "tracing-appender", 3275 + "tracing-subscriber", 3276 + "turso_core", 3277 + "turso_sdk_kit", 3278 + "turso_sdk_kit_macros", 3279 + "turso_sync_engine", 3280 + ] 3281 + 3282 + [[package]] 3283 + name = "twox-hash" 3284 + version = "2.1.2" 3285 + source = "registry+https://github.com/rust-lang/crates.io-index" 3286 + checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" 3287 + dependencies = [ 3288 + "rand", 3289 + ] 3290 + 3291 + [[package]] 3292 + name = "typenum" 3293 + version = "1.19.0" 3294 + source = "registry+https://github.com/rust-lang/crates.io-index" 3295 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 3296 + 3297 + [[package]] 3298 + name = "uncased" 3299 + version = "0.9.10" 3300 + source = "registry+https://github.com/rust-lang/crates.io-index" 3301 + checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" 3302 + dependencies = [ 3303 + "version_check", 3304 + ] 3305 + 3306 + [[package]] 3307 + name = "unicode-ident" 3308 + version = "1.0.24" 3309 + source = "registry+https://github.com/rust-lang/crates.io-index" 3310 + checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 3311 + 3312 + [[package]] 3313 + name = "unicode-width" 3314 + version = "0.1.14" 3315 + source = "registry+https://github.com/rust-lang/crates.io-index" 3316 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 3317 + 3318 + [[package]] 3319 + name = "unicode-xid" 3320 + version = "0.2.6" 3321 + source = "registry+https://github.com/rust-lang/crates.io-index" 3322 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3323 + 3324 + [[package]] 3325 + name = "universal-hash" 3326 + version = "0.5.1" 3327 + source = "registry+https://github.com/rust-lang/crates.io-index" 3328 + checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" 3329 + dependencies = [ 3330 + "crypto-common", 3331 + "subtle", 3332 + ] 3333 + 3334 + [[package]] 3335 + name = "untrusted" 3336 + version = "0.9.0" 3337 + source = "registry+https://github.com/rust-lang/crates.io-index" 3338 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3339 + 3340 + [[package]] 3341 + name = "url" 3342 + version = "2.5.8" 3343 + source = "registry+https://github.com/rust-lang/crates.io-index" 3344 + checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" 3345 + dependencies = [ 3346 + "form_urlencoded", 3347 + "idna", 3348 + "percent-encoding", 3349 + "serde", 3350 + ] 3351 + 3352 + [[package]] 3353 + name = "utf-8" 3354 + version = "0.7.6" 3355 + source = "registry+https://github.com/rust-lang/crates.io-index" 3356 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3357 + 3358 + [[package]] 3359 + name = "utf8_iter" 3360 + version = "1.0.4" 3361 + source = "registry+https://github.com/rust-lang/crates.io-index" 3362 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3363 + 3364 + [[package]] 3365 + name = "utf8parse" 3366 + version = "0.2.2" 3367 + source = "registry+https://github.com/rust-lang/crates.io-index" 3368 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3369 + 3370 + [[package]] 3371 + name = "uuid" 3372 + version = "1.21.0" 3373 + source = "registry+https://github.com/rust-lang/crates.io-index" 3374 + checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" 3375 + dependencies = [ 3376 + "getrandom 0.4.1", 3377 + "js-sys", 3378 + "sha1_smol", 3379 + "wasm-bindgen", 3380 + ] 3381 + 3382 + [[package]] 3383 + name = "v_frame" 3384 + version = "0.3.9" 3385 + source = "registry+https://github.com/rust-lang/crates.io-index" 3386 + checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" 3387 + dependencies = [ 3388 + "aligned-vec", 3389 + "num-traits", 3390 + "wasm-bindgen", 3391 + ] 3392 + 3393 + [[package]] 3394 + name = "valuable" 3395 + version = "0.1.1" 3396 + source = "registry+https://github.com/rust-lang/crates.io-index" 3397 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3398 + 3399 + [[package]] 3400 + name = "vcpkg" 3401 + version = "0.2.15" 3402 + source = "registry+https://github.com/rust-lang/crates.io-index" 3403 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3404 + 3405 + [[package]] 3406 + name = "version_check" 3407 + version = "0.9.5" 3408 + source = "registry+https://github.com/rust-lang/crates.io-index" 3409 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3410 + 3411 + [[package]] 3412 + name = "wasi" 3413 + version = "0.11.1+wasi-snapshot-preview1" 3414 + source = "registry+https://github.com/rust-lang/crates.io-index" 3415 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 3416 + 3417 + [[package]] 3418 + name = "wasip2" 3419 + version = "1.0.2+wasi-0.2.9" 3420 + source = "registry+https://github.com/rust-lang/crates.io-index" 3421 + checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" 3422 + dependencies = [ 3423 + "wit-bindgen", 3424 + ] 3425 + 3426 + [[package]] 3427 + name = "wasip3" 3428 + version = "0.4.0+wasi-0.3.0-rc-2026-01-06" 3429 + source = "registry+https://github.com/rust-lang/crates.io-index" 3430 + checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" 3431 + dependencies = [ 3432 + "wit-bindgen", 3433 + ] 3434 + 3435 + [[package]] 3436 + name = "wasm-bindgen" 3437 + version = "0.2.108" 3438 + source = "registry+https://github.com/rust-lang/crates.io-index" 3439 + checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" 3440 + dependencies = [ 3441 + "cfg-if", 3442 + "once_cell", 3443 + "rustversion", 3444 + "wasm-bindgen-macro", 3445 + "wasm-bindgen-shared", 3446 + ] 3447 + 3448 + [[package]] 3449 + name = "wasm-bindgen-futures" 3450 + version = "0.4.58" 3451 + source = "registry+https://github.com/rust-lang/crates.io-index" 3452 + checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" 3453 + dependencies = [ 3454 + "cfg-if", 3455 + "futures-util", 3456 + "js-sys", 3457 + "once_cell", 3458 + "wasm-bindgen", 3459 + "web-sys", 3460 + ] 3461 + 3462 + [[package]] 3463 + name = "wasm-bindgen-macro" 3464 + version = "0.2.108" 3465 + source = "registry+https://github.com/rust-lang/crates.io-index" 3466 + checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" 3467 + dependencies = [ 3468 + "quote", 3469 + "wasm-bindgen-macro-support", 3470 + ] 3471 + 3472 + [[package]] 3473 + name = "wasm-bindgen-macro-support" 3474 + version = "0.2.108" 3475 + source = "registry+https://github.com/rust-lang/crates.io-index" 3476 + checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" 3477 + dependencies = [ 3478 + "bumpalo", 3479 + "proc-macro2", 3480 + "quote", 3481 + "syn 2.0.116", 3482 + "wasm-bindgen-shared", 3483 + ] 3484 + 3485 + [[package]] 3486 + name = "wasm-bindgen-shared" 3487 + version = "0.2.108" 3488 + source = "registry+https://github.com/rust-lang/crates.io-index" 3489 + checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" 3490 + dependencies = [ 3491 + "unicode-ident", 3492 + ] 3493 + 3494 + [[package]] 3495 + name = "wasm-encoder" 3496 + version = "0.244.0" 3497 + source = "registry+https://github.com/rust-lang/crates.io-index" 3498 + checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" 3499 + dependencies = [ 3500 + "leb128fmt", 3501 + "wasmparser", 3502 + ] 3503 + 3504 + [[package]] 3505 + name = "wasm-metadata" 3506 + version = "0.244.0" 3507 + source = "registry+https://github.com/rust-lang/crates.io-index" 3508 + checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" 3509 + dependencies = [ 3510 + "anyhow", 3511 + "indexmap 2.13.0", 3512 + "wasm-encoder", 3513 + "wasmparser", 3514 + ] 3515 + 3516 + [[package]] 3517 + name = "wasmparser" 3518 + version = "0.244.0" 3519 + source = "registry+https://github.com/rust-lang/crates.io-index" 3520 + checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 3521 + dependencies = [ 3522 + "bitflags", 3523 + "hashbrown 0.15.5", 3524 + "indexmap 2.13.0", 3525 + "semver", 3526 + ] 3527 + 3528 + [[package]] 3529 + name = "wasmtimer" 3530 + version = "0.2.1" 3531 + source = "registry+https://github.com/rust-lang/crates.io-index" 3532 + checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" 3533 + dependencies = [ 3534 + "futures", 3535 + "js-sys", 3536 + "parking_lot", 3537 + "pin-utils", 3538 + "slab", 3539 + "wasm-bindgen", 3540 + ] 3541 + 3542 + [[package]] 3543 + name = "web-sys" 3544 + version = "0.3.85" 3545 + source = "registry+https://github.com/rust-lang/crates.io-index" 3546 + checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" 3547 + dependencies = [ 3548 + "js-sys", 3549 + "wasm-bindgen", 3550 + ] 3551 + 3552 + [[package]] 3553 + name = "webpki-roots" 3554 + version = "0.25.4" 3555 + source = "registry+https://github.com/rust-lang/crates.io-index" 3556 + checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 3557 + 3558 + [[package]] 3559 + name = "webpki-roots" 3560 + version = "0.26.11" 3561 + source = "registry+https://github.com/rust-lang/crates.io-index" 3562 + checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" 3563 + dependencies = [ 3564 + "webpki-roots 1.0.6", 3565 + ] 3566 + 3567 + [[package]] 3568 + name = "webpki-roots" 3569 + version = "1.0.6" 3570 + source = "registry+https://github.com/rust-lang/crates.io-index" 3571 + checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" 3572 + dependencies = [ 3573 + "rustls-pki-types", 3574 + ] 3575 + 3576 + [[package]] 3577 + name = "weezl" 3578 + version = "0.1.12" 3579 + source = "registry+https://github.com/rust-lang/crates.io-index" 3580 + checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" 3581 + 3582 + [[package]] 3583 + name = "which" 3584 + version = "4.4.2" 3585 + source = "registry+https://github.com/rust-lang/crates.io-index" 3586 + checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" 3587 + dependencies = [ 3588 + "either", 3589 + "home", 3590 + "once_cell", 3591 + "rustix 0.38.44", 3592 + ] 3593 + 3594 + [[package]] 3595 + name = "windows-core" 3596 + version = "0.62.2" 3597 + source = "registry+https://github.com/rust-lang/crates.io-index" 3598 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 3599 + dependencies = [ 3600 + "windows-implement", 3601 + "windows-interface", 3602 + "windows-link", 3603 + "windows-result", 3604 + "windows-strings", 3605 + ] 3606 + 3607 + [[package]] 3608 + name = "windows-implement" 3609 + version = "0.60.2" 3610 + source = "registry+https://github.com/rust-lang/crates.io-index" 3611 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3612 + dependencies = [ 3613 + "proc-macro2", 3614 + "quote", 3615 + "syn 2.0.116", 3616 + ] 3617 + 3618 + [[package]] 3619 + name = "windows-interface" 3620 + version = "0.59.3" 3621 + source = "registry+https://github.com/rust-lang/crates.io-index" 3622 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3623 + dependencies = [ 3624 + "proc-macro2", 3625 + "quote", 3626 + "syn 2.0.116", 3627 + ] 3628 + 3629 + [[package]] 3630 + name = "windows-link" 3631 + version = "0.2.1" 3632 + source = "registry+https://github.com/rust-lang/crates.io-index" 3633 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 3634 + 3635 + [[package]] 3636 + name = "windows-result" 3637 + version = "0.4.1" 3638 + source = "registry+https://github.com/rust-lang/crates.io-index" 3639 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 3640 + dependencies = [ 3641 + "windows-link", 3642 + ] 3643 + 3644 + [[package]] 3645 + name = "windows-strings" 3646 + version = "0.5.1" 3647 + source = "registry+https://github.com/rust-lang/crates.io-index" 3648 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 3649 + dependencies = [ 3650 + "windows-link", 3651 + ] 3652 + 3653 + [[package]] 3654 + name = "windows-sys" 3655 + version = "0.52.0" 3656 + source = "registry+https://github.com/rust-lang/crates.io-index" 3657 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3658 + dependencies = [ 3659 + "windows-targets 0.52.6", 3660 + ] 3661 + 3662 + [[package]] 3663 + name = "windows-sys" 3664 + version = "0.60.2" 3665 + source = "registry+https://github.com/rust-lang/crates.io-index" 3666 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3667 + dependencies = [ 3668 + "windows-targets 0.53.5", 3669 + ] 3670 + 3671 + [[package]] 3672 + name = "windows-sys" 3673 + version = "0.61.2" 3674 + source = "registry+https://github.com/rust-lang/crates.io-index" 3675 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 3676 + dependencies = [ 3677 + "windows-link", 3678 + ] 3679 + 3680 + [[package]] 3681 + name = "windows-targets" 3682 + version = "0.52.6" 3683 + source = "registry+https://github.com/rust-lang/crates.io-index" 3684 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3685 + dependencies = [ 3686 + "windows_aarch64_gnullvm 0.52.6", 3687 + "windows_aarch64_msvc 0.52.6", 3688 + "windows_i686_gnu 0.52.6", 3689 + "windows_i686_gnullvm 0.52.6", 3690 + "windows_i686_msvc 0.52.6", 3691 + "windows_x86_64_gnu 0.52.6", 3692 + "windows_x86_64_gnullvm 0.52.6", 3693 + "windows_x86_64_msvc 0.52.6", 3694 + ] 3695 + 3696 + [[package]] 3697 + name = "windows-targets" 3698 + version = "0.53.5" 3699 + source = "registry+https://github.com/rust-lang/crates.io-index" 3700 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 3701 + dependencies = [ 3702 + "windows-link", 3703 + "windows_aarch64_gnullvm 0.53.1", 3704 + "windows_aarch64_msvc 0.53.1", 3705 + "windows_i686_gnu 0.53.1", 3706 + "windows_i686_gnullvm 0.53.1", 3707 + "windows_i686_msvc 0.53.1", 3708 + "windows_x86_64_gnu 0.53.1", 3709 + "windows_x86_64_gnullvm 0.53.1", 3710 + "windows_x86_64_msvc 0.53.1", 3711 + ] 3712 + 3713 + [[package]] 3714 + name = "windows_aarch64_gnullvm" 3715 + version = "0.52.6" 3716 + source = "registry+https://github.com/rust-lang/crates.io-index" 3717 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3718 + 3719 + [[package]] 3720 + name = "windows_aarch64_gnullvm" 3721 + version = "0.53.1" 3722 + source = "registry+https://github.com/rust-lang/crates.io-index" 3723 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 3724 + 3725 + [[package]] 3726 + name = "windows_aarch64_msvc" 3727 + version = "0.52.6" 3728 + source = "registry+https://github.com/rust-lang/crates.io-index" 3729 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3730 + 3731 + [[package]] 3732 + name = "windows_aarch64_msvc" 3733 + version = "0.53.1" 3734 + source = "registry+https://github.com/rust-lang/crates.io-index" 3735 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 3736 + 3737 + [[package]] 3738 + name = "windows_i686_gnu" 3739 + version = "0.52.6" 3740 + source = "registry+https://github.com/rust-lang/crates.io-index" 3741 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3742 + 3743 + [[package]] 3744 + name = "windows_i686_gnu" 3745 + version = "0.53.1" 3746 + source = "registry+https://github.com/rust-lang/crates.io-index" 3747 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 3748 + 3749 + [[package]] 3750 + name = "windows_i686_gnullvm" 3751 + version = "0.52.6" 3752 + source = "registry+https://github.com/rust-lang/crates.io-index" 3753 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3754 + 3755 + [[package]] 3756 + name = "windows_i686_gnullvm" 3757 + version = "0.53.1" 3758 + source = "registry+https://github.com/rust-lang/crates.io-index" 3759 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 3760 + 3761 + [[package]] 3762 + name = "windows_i686_msvc" 3763 + version = "0.52.6" 3764 + source = "registry+https://github.com/rust-lang/crates.io-index" 3765 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3766 + 3767 + [[package]] 3768 + name = "windows_i686_msvc" 3769 + version = "0.53.1" 3770 + source = "registry+https://github.com/rust-lang/crates.io-index" 3771 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 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.1" 3782 + source = "registry+https://github.com/rust-lang/crates.io-index" 3783 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 3784 + 3785 + [[package]] 3786 + name = "windows_x86_64_gnullvm" 3787 + version = "0.52.6" 3788 + source = "registry+https://github.com/rust-lang/crates.io-index" 3789 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3790 + 3791 + [[package]] 3792 + name = "windows_x86_64_gnullvm" 3793 + version = "0.53.1" 3794 + source = "registry+https://github.com/rust-lang/crates.io-index" 3795 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 3796 + 3797 + [[package]] 3798 + name = "windows_x86_64_msvc" 3799 + version = "0.52.6" 3800 + source = "registry+https://github.com/rust-lang/crates.io-index" 3801 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3802 + 3803 + [[package]] 3804 + name = "windows_x86_64_msvc" 3805 + version = "0.53.1" 3806 + source = "registry+https://github.com/rust-lang/crates.io-index" 3807 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 3808 + 3809 + [[package]] 3810 + name = "wit-bindgen" 3811 + version = "0.51.0" 3812 + source = "registry+https://github.com/rust-lang/crates.io-index" 3813 + checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 3814 + dependencies = [ 3815 + "wit-bindgen-rust-macro", 3816 + ] 3817 + 3818 + [[package]] 3819 + name = "wit-bindgen-core" 3820 + version = "0.51.0" 3821 + source = "registry+https://github.com/rust-lang/crates.io-index" 3822 + checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" 3823 + dependencies = [ 3824 + "anyhow", 3825 + "heck", 3826 + "wit-parser", 3827 + ] 3828 + 3829 + [[package]] 3830 + name = "wit-bindgen-rust" 3831 + version = "0.51.0" 3832 + source = "registry+https://github.com/rust-lang/crates.io-index" 3833 + checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" 3834 + dependencies = [ 3835 + "anyhow", 3836 + "heck", 3837 + "indexmap 2.13.0", 3838 + "prettyplease", 3839 + "syn 2.0.116", 3840 + "wasm-metadata", 3841 + "wit-bindgen-core", 3842 + "wit-component", 3843 + ] 3844 + 3845 + [[package]] 3846 + name = "wit-bindgen-rust-macro" 3847 + version = "0.51.0" 3848 + source = "registry+https://github.com/rust-lang/crates.io-index" 3849 + checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" 3850 + dependencies = [ 3851 + "anyhow", 3852 + "prettyplease", 3853 + "proc-macro2", 3854 + "quote", 3855 + "syn 2.0.116", 3856 + "wit-bindgen-core", 3857 + "wit-bindgen-rust", 3858 + ] 3859 + 3860 + [[package]] 3861 + name = "wit-component" 3862 + version = "0.244.0" 3863 + source = "registry+https://github.com/rust-lang/crates.io-index" 3864 + checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 3865 + dependencies = [ 3866 + "anyhow", 3867 + "bitflags", 3868 + "indexmap 2.13.0", 3869 + "log", 3870 + "serde", 3871 + "serde_derive", 3872 + "serde_json", 3873 + "wasm-encoder", 3874 + "wasm-metadata", 3875 + "wasmparser", 3876 + "wit-parser", 3877 + ] 3878 + 3879 + [[package]] 3880 + name = "wit-parser" 3881 + version = "0.244.0" 3882 + source = "registry+https://github.com/rust-lang/crates.io-index" 3883 + checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" 3884 + dependencies = [ 3885 + "anyhow", 3886 + "id-arena", 3887 + "indexmap 2.13.0", 3888 + "log", 3889 + "semver", 3890 + "serde", 3891 + "serde_derive", 3892 + "serde_json", 3893 + "unicode-xid", 3894 + "wasmparser", 3895 + ] 3896 + 3897 + [[package]] 3898 + name = "writeable" 3899 + version = "0.6.2" 3900 + source = "registry+https://github.com/rust-lang/crates.io-index" 3901 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 3902 + 3903 + [[package]] 3904 + name = "y4m" 3905 + version = "0.8.0" 3906 + source = "registry+https://github.com/rust-lang/crates.io-index" 3907 + checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" 3908 + 3909 + [[package]] 3910 + name = "yoke" 3911 + version = "0.8.1" 3912 + source = "registry+https://github.com/rust-lang/crates.io-index" 3913 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 3914 + dependencies = [ 3915 + "stable_deref_trait", 3916 + "yoke-derive", 3917 + "zerofrom", 3918 + ] 3919 + 3920 + [[package]] 3921 + name = "yoke-derive" 3922 + version = "0.8.1" 3923 + source = "registry+https://github.com/rust-lang/crates.io-index" 3924 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 3925 + dependencies = [ 3926 + "proc-macro2", 3927 + "quote", 3928 + "syn 2.0.116", 3929 + "synstructure", 3930 + ] 3931 + 3932 + [[package]] 3933 + name = "zerocopy" 3934 + version = "0.8.39" 3935 + source = "registry+https://github.com/rust-lang/crates.io-index" 3936 + checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" 3937 + dependencies = [ 3938 + "zerocopy-derive", 3939 + ] 3940 + 3941 + [[package]] 3942 + name = "zerocopy-derive" 3943 + version = "0.8.39" 3944 + source = "registry+https://github.com/rust-lang/crates.io-index" 3945 + checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" 3946 + dependencies = [ 3947 + "proc-macro2", 3948 + "quote", 3949 + "syn 2.0.116", 3950 + ] 3951 + 3952 + [[package]] 3953 + name = "zerofrom" 3954 + version = "0.1.6" 3955 + source = "registry+https://github.com/rust-lang/crates.io-index" 3956 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3957 + dependencies = [ 3958 + "zerofrom-derive", 3959 + ] 3960 + 3961 + [[package]] 3962 + name = "zerofrom-derive" 3963 + version = "0.1.6" 3964 + source = "registry+https://github.com/rust-lang/crates.io-index" 3965 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3966 + dependencies = [ 3967 + "proc-macro2", 3968 + "quote", 3969 + "syn 2.0.116", 3970 + "synstructure", 3971 + ] 3972 + 3973 + [[package]] 3974 + name = "zeroize" 3975 + version = "1.8.2" 3976 + source = "registry+https://github.com/rust-lang/crates.io-index" 3977 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 3978 + 3979 + [[package]] 3980 + name = "zerotrie" 3981 + version = "0.2.3" 3982 + source = "registry+https://github.com/rust-lang/crates.io-index" 3983 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 3984 + dependencies = [ 3985 + "displaydoc", 3986 + "yoke", 3987 + "zerofrom", 3988 + ] 3989 + 3990 + [[package]] 3991 + name = "zerovec" 3992 + version = "0.11.5" 3993 + source = "registry+https://github.com/rust-lang/crates.io-index" 3994 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 3995 + dependencies = [ 3996 + "yoke", 3997 + "zerofrom", 3998 + "zerovec-derive", 3999 + ] 4000 + 4001 + [[package]] 4002 + name = "zerovec-derive" 4003 + version = "0.11.2" 4004 + source = "registry+https://github.com/rust-lang/crates.io-index" 4005 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 4006 + dependencies = [ 4007 + "proc-macro2", 4008 + "quote", 4009 + "syn 2.0.116", 4010 + ] 4011 + 4012 + [[package]] 4013 + name = "zmij" 4014 + version = "1.0.21" 4015 + source = "registry+https://github.com/rust-lang/crates.io-index" 4016 + checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" 4017 + 4018 + [[package]] 4019 + name = "zune-core" 4020 + version = "0.4.12" 4021 + source = "registry+https://github.com/rust-lang/crates.io-index" 4022 + checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" 4023 + 4024 + [[package]] 4025 + name = "zune-core" 4026 + version = "0.5.1" 4027 + source = "registry+https://github.com/rust-lang/crates.io-index" 4028 + checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" 4029 + 4030 + [[package]] 4031 + name = "zune-inflate" 4032 + version = "0.2.54" 4033 + source = "registry+https://github.com/rust-lang/crates.io-index" 4034 + checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" 4035 + dependencies = [ 4036 + "simd-adler32", 4037 + ] 4038 + 4039 + [[package]] 4040 + name = "zune-jpeg" 4041 + version = "0.4.21" 4042 + source = "registry+https://github.com/rust-lang/crates.io-index" 4043 + checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" 4044 + dependencies = [ 4045 + "zune-core 0.4.12", 4046 + ] 4047 + 4048 + [[package]] 4049 + name = "zune-jpeg" 4050 + version = "0.5.12" 4051 + source = "registry+https://github.com/rust-lang/crates.io-index" 4052 + checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" 4053 + dependencies = [ 4054 + "zune-core 0.5.1", 4055 + ]
+20
examples/examplebot/Cargo.toml
··· 1 + [package] 2 + name = "colorbot" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + 7 + [dependencies] 8 + env_logger = "0.11.9" 9 + image = "0.25.9" 10 + log = "0.4.29" 11 + minreq = { version = "2.14.1", features = ["https"] } 12 + turso = "0.4.4" 13 + 14 + [dependencies.fluxer-rs] 15 + version = "*" 16 + path = "../.." 17 + 18 + [dependencies.tokio] 19 + version = "1.49.0" 20 + features = ["rt-multi-thread", "macros"]
+1
examples/examplebot/README.md
··· 1 + This is an example implementation of a fluxer bot using fluxer-rs
+8
examples/examplebot/src/commands.rs
··· 1 + pub mod addrole; 2 + pub mod createrole; 3 + pub mod deleterole; 4 + pub mod edit; 5 + pub mod ping; 6 + pub mod react; 7 + pub mod remove_react; 8 + pub mod removerole;
+41
examples/examplebot/src/commands/addrole.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::{message::SendMessageBuilder, role::AddRoleToMemberBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::{CommandHandler, CommandTrait}, 7 + }; 8 + 9 + pub struct AddRoleCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub content: String, 13 + } 14 + 15 + impl CommandTrait for AddRoleCommand { 16 + async fn execute(&self) { 17 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 18 + let body_split = body.split(" ").collect::<Vec<&str>>(); 19 + 20 + if body_split.len() != 3 || body.is_empty() { 21 + let _ = self.bot.api.execute_call( 22 + SendMessageBuilder::default() 23 + .channel_id(self.channel_id.clone()) 24 + .content("Invalid syntax") 25 + .build() 26 + .unwrap(), 27 + ); 28 + return; 29 + } 30 + 31 + let _ = self.bot.api.execute_call( 32 + AddRoleToMemberBuilder::default() 33 + .guild_id(body_split.first().unwrap().to_string()) 34 + .user_id(body_split.get(1).unwrap().to_string()) 35 + .role_id(body_split.get(2).unwrap().to_string()) 36 + .build() 37 + .unwrap(), 38 + ); 39 + } 40 + } 41 + }
+42
examples/examplebot/src/commands/createrole.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::{message::SendMessageBuilder, role::CreateRoleBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::{CommandHandler, CommandTrait}, 7 + }; 8 + 9 + pub struct CreateRoleCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub content: String, 13 + } 14 + 15 + impl CommandTrait for CreateRoleCommand { 16 + async fn execute(&self) { 17 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 18 + let body_split = body.split(" ").collect::<Vec<&str>>(); 19 + 20 + if body_split.len() != 4 || body.is_empty() { 21 + let _ = self.bot.api.execute_call( 22 + SendMessageBuilder::default() 23 + .channel_id(self.channel_id.clone()) 24 + .content("Invalid syntax") 25 + .build() 26 + .unwrap(), 27 + ); 28 + return; 29 + } 30 + 31 + let _ = self.bot.api.execute_call( 32 + CreateRoleBuilder::default() 33 + .name(body_split.first().unwrap().to_string()) 34 + .guild_id(body_split.get(1).unwrap().to_string()) 35 + .permission(body_split.get(2).unwrap().to_string()) 36 + .color(u32::from_str_radix(body_split.get(3).unwrap(), 16).unwrap()) 37 + .build() 38 + .unwrap(), 39 + ); 40 + } 41 + } 42 + }
+40
examples/examplebot/src/commands/deleterole.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::{message::SendMessageBuilder, role::DeleteRoleBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::{CommandHandler, CommandTrait}, 7 + }; 8 + 9 + pub struct DeleteRoleCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub content: String, 13 + } 14 + 15 + impl CommandTrait for DeleteRoleCommand { 16 + async fn execute(&self) { 17 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 18 + let body_split = body.split(" ").collect::<Vec<&str>>(); 19 + 20 + if body_split.len() != 2 || body.is_empty() { 21 + let _ = self.bot.api.execute_call( 22 + SendMessageBuilder::default() 23 + .channel_id(self.channel_id.clone()) 24 + .content("Invalid syntax") 25 + .build() 26 + .unwrap(), 27 + ); 28 + return; 29 + } 30 + 31 + let _ = self.bot.api.execute_call( 32 + DeleteRoleBuilder::default() 33 + .guild_id(body_split.first().unwrap().to_string()) 34 + .role_id(body_split.get(1).unwrap().to_string()) 35 + .build() 36 + .unwrap(), 37 + ); 38 + } 39 + } 40 + }
+62
examples/examplebot/src/commands/edit.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{api::data_structure::message::{EditMessageBuilder, FetchMessage, FetchMessageBuilder, SendMessageBuilder}, fluxerbot::FluxerBot, gateway::data_structure::message::MessageEventData, high_level::command_handler::{CommandHandler, CommandTrait}}; 4 + 5 + pub struct EditCommand { 6 + pub bot: Arc<FluxerBot>, 7 + pub channel_id: String, 8 + pub content: String, 9 + } 10 + 11 + impl CommandTrait for EditCommand { 12 + async fn execute(&self) { 13 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 14 + let body_split = body.split(" ").collect::<Vec<&str>>(); 15 + 16 + if body_split.len() != 2 || body.is_empty() { 17 + let _ = self.bot.api.execute_call( 18 + SendMessageBuilder::default() 19 + .channel_id(self.channel_id.clone()) 20 + .content("Invalid syntax") 21 + .build() 22 + .unwrap(), 23 + ); 24 + return; 25 + } 26 + 27 + let resp = self.bot.api.execute_call( 28 + FetchMessageBuilder::default() 29 + .channel_id(body_split.first().unwrap().to_string()) 30 + .message_id(body_split.get(1).unwrap().to_string()) 31 + .build() 32 + .unwrap(), 33 + ); 34 + 35 + let message_info: Option<MessageEventData> = match resp { 36 + Ok(value) => Some(FetchMessage::get_resp(value.as_str().unwrap())), 37 + Err(err) => { 38 + let _ = self.bot.api.execute_call( 39 + SendMessageBuilder::default() 40 + .channel_id(self.channel_id.clone()) 41 + .content(err.to_string()) 42 + .build() 43 + .unwrap(), 44 + ); 45 + None 46 + } 47 + }; 48 + 49 + if let Some(value) = message_info { 50 + let _ = self.bot.api.execute_call( 51 + EditMessageBuilder::default() 52 + .message_id(value.id) 53 + .channel_id(value.channel_id) 54 + .embeds(value.embeds) 55 + .content("EEEEEEEEEEEEE") 56 + .build() 57 + .unwrap(), 58 + ); 59 + } 60 + } 61 + } 62 + }
+31
examples/examplebot/src/commands/ping.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::message::{MessageReferenceBuilder, SendMessageBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::CommandTrait, 7 + }; 8 + 9 + pub struct PingCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub id: String, 13 + } 14 + 15 + impl CommandTrait for PingCommand { 16 + async fn execute(&self) { 17 + let _ = self.bot.api.execute_call( 18 + SendMessageBuilder::default() 19 + .channel_id(self.channel_id.clone()) 20 + .content("pong".to_string()) 21 + .message_reference( 22 + MessageReferenceBuilder::default() 23 + .message_id(self.id.clone()) 24 + .build() 25 + .unwrap(), 26 + ) 27 + .build() 28 + .unwrap(), 29 + ); 30 + } 31 + }
+48
examples/examplebot/src/commands/react.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::{message::SendMessageBuilder, reaction::AddOwnReacitonBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::{CommandHandler, CommandTrait}, 7 + }; 8 + 9 + pub struct ReactCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub content: String, 13 + } 14 + 15 + impl CommandTrait for ReactCommand { 16 + async fn execute(&self) { 17 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 18 + let body_split = body.split(" ").collect::<Vec<&str>>(); 19 + 20 + if body_split.len() != 3 || body.is_empty() { 21 + let _ = self.bot.api.execute_call( 22 + SendMessageBuilder::default() 23 + .channel_id(self.channel_id.clone()) 24 + .content("Invalid syntax") 25 + .build() 26 + .unwrap(), 27 + ); 28 + return; 29 + } 30 + 31 + let _ = self.bot.api.execute_call( 32 + AddOwnReacitonBuilder::default() 33 + .channel_id(body_split.first().unwrap().to_string()) 34 + .message_id(body_split.get(1).unwrap().to_string()) 35 + .emoji( 36 + body_split 37 + .get(2) 38 + .unwrap() 39 + .to_string() 40 + .trim_matches('<') 41 + .trim_matches('>'), 42 + ) 43 + .build() 44 + .unwrap(), 45 + ); 46 + } 47 + } 48 + }
+48
examples/examplebot/src/commands/remove_react.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::{message::SendMessageBuilder, reaction::RemoveAllReactionBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::{CommandHandler, CommandTrait}, 7 + }; 8 + 9 + pub struct RemoveReactCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub content: String, 13 + } 14 + 15 + impl CommandTrait for RemoveReactCommand { 16 + async fn execute(&self) { 17 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 18 + let body_split = body.split(" ").collect::<Vec<&str>>(); 19 + 20 + if body_split.len() != 3 || body.is_empty() { 21 + let _ = self.bot.api.execute_call( 22 + SendMessageBuilder::default() 23 + .channel_id(self.channel_id.clone()) 24 + .content("Invalid syntax") 25 + .build() 26 + .unwrap(), 27 + ); 28 + return; 29 + } 30 + 31 + let _ = self.bot.api.execute_call( 32 + RemoveAllReactionBuilder::default() 33 + .channel_id(body_split.first().unwrap().to_string()) 34 + .message_id(body_split.get(1).unwrap().to_string()) 35 + .emoji( 36 + body_split 37 + .get(2) 38 + .unwrap() 39 + .to_string() 40 + .trim_matches('<') 41 + .trim_matches('>'), 42 + ) 43 + .build() 44 + .unwrap(), 45 + ); 46 + } 47 + } 48 + }
+41
examples/examplebot/src/commands/removerole.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + api::data_structure::{message::SendMessageBuilder, role::RemoveRoleFromMemberBuilder}, 5 + fluxerbot::FluxerBot, 6 + high_level::command_handler::{CommandHandler, CommandTrait}, 7 + }; 8 + 9 + pub struct RemoveRoleCommand { 10 + pub bot: Arc<FluxerBot>, 11 + pub channel_id: String, 12 + pub content: String, 13 + } 14 + 15 + impl CommandTrait for RemoveRoleCommand { 16 + async fn execute(&self) { 17 + if let Some((_, body)) = CommandHandler::remove_pfx("!", &self.content).await { 18 + let body_split = body.split(" ").collect::<Vec<&str>>(); 19 + 20 + if body_split.len() != 3 || body.is_empty() { 21 + let _ = self.bot.api.execute_call( 22 + SendMessageBuilder::default() 23 + .channel_id(self.channel_id.clone()) 24 + .content("Invalid syntax") 25 + .build() 26 + .unwrap(), 27 + ); 28 + return; 29 + } 30 + 31 + let _ = self.bot.api.execute_call( 32 + RemoveRoleFromMemberBuilder::default() 33 + .guild_id(body_split.first().unwrap().to_string()) 34 + .user_id(body_split.get(1).unwrap().to_string()) 35 + .role_id(body_split.get(2).unwrap().to_string()) 36 + .build() 37 + .unwrap(), 38 + ); 39 + } 40 + } 41 + }
+123
examples/examplebot/src/dispatch.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::{ 4 + EmbedAuthorBuilder, EmbedBuilder, EmbedFieldBuilder, EmbedFooterBuilder, EmbedMediaBuilder, 5 + api::data_structure::message::SendMessageBuilder, 6 + fluxerbot::FluxerBot, 7 + gateway::{ 8 + data_structure::{guild::GuildCreateData, message::MessageEventData}, 9 + op_handlers::dispatch::DispatchHandlerTrait, 10 + }, 11 + high_level::command_handler::CommandHandler, 12 + }; 13 + 14 + use crate::commands::{ 15 + addrole::AddRoleCommand, createrole::CreateRoleCommand, deleterole::DeleteRoleCommand, edit::EditCommand, ping::PingCommand, react::ReactCommand, remove_react::RemoveReactCommand, removerole::RemoveRoleCommand 16 + }; 17 + 18 + pub struct ColorbotDispatchHandler { 19 + pub bot: Arc<FluxerBot>, 20 + } 21 + 22 + impl DispatchHandlerTrait for ColorbotDispatchHandler { 23 + async fn handle_message_create_dispatch(&self, data: MessageEventData) { 24 + let mut cmd_handler = CommandHandler::init("!".to_string()); 25 + 26 + cmd_handler.register_command( 27 + "ping".to_string(), 28 + PingCommand { 29 + bot: self.bot.clone(), 30 + channel_id: data.channel_id.clone(), 31 + id: data.id.clone(), 32 + }, 33 + ); 34 + cmd_handler.register_command( 35 + "edit".to_string(), 36 + EditCommand { 37 + bot: self.bot.clone(), 38 + channel_id: data.channel_id.clone(), 39 + content: data.content.clone(), 40 + }, 41 + ); 42 + cmd_handler.register_command( 43 + "react".to_string(), 44 + ReactCommand { 45 + bot: self.bot.clone(), 46 + channel_id: data.channel_id.clone(), 47 + content: data.content.clone(), 48 + }, 49 + ); 50 + cmd_handler.register_command( 51 + "removereact".to_string(), 52 + RemoveReactCommand { 53 + bot: self.bot.clone(), 54 + channel_id: data.channel_id.clone(), 55 + content: data.content.clone(), 56 + }, 57 + ); 58 + cmd_handler.register_command( 59 + "addrole".to_string(), 60 + AddRoleCommand { 61 + bot: self.bot.clone(), 62 + channel_id: data.channel_id.clone(), 63 + content: data.content.clone(), 64 + }, 65 + ); 66 + cmd_handler.register_command( 67 + "removerole".to_string(), 68 + RemoveRoleCommand { 69 + bot: self.bot.clone(), 70 + channel_id: data.channel_id.clone(), 71 + content: data.content.clone(), 72 + }, 73 + ); 74 + cmd_handler.register_command( 75 + "createrole".to_string(), 76 + CreateRoleCommand { 77 + bot: self.bot.clone(), 78 + channel_id: data.channel_id.clone(), 79 + content: data.content.clone(), 80 + }, 81 + ); 82 + cmd_handler.register_command( 83 + "deleterole".to_string(), 84 + DeleteRoleCommand { 85 + bot: self.bot.clone(), 86 + channel_id: data.channel_id.clone(), 87 + content: data.content.clone(), 88 + }, 89 + ); 90 + 91 + cmd_handler.handle(&data).await; 92 + } 93 + 94 + async fn handle_guild_create_dispatch(&self, data: Box<GuildCreateData>) { 95 + if data.id == "1473686979970875591" { 96 + let _ = self.bot 97 + .api 98 + .execute_call( 99 + SendMessageBuilder::default() 100 + .content("Mhyello i am online".to_string()) 101 + .channel_id("1474424011696861241".to_string()) 102 + .embeds(vec![ 103 + EmbedBuilder::default() 104 + .title("Added to Queue".to_string()) 105 + .color(0x4d6fb7) 106 + .fields(vec![ 107 + EmbedFieldBuilder::default().name("Tracka".to_string()).value("Sussy bakka").inline(true).build().unwrap(), 108 + EmbedFieldBuilder::default().name("Artist".to_string()).value("Sussy bakka").inline(true).build().unwrap(), 109 + EmbedFieldBuilder::default().name("Durationa".to_string()).value("Sussy bakka").inline(true).build().unwrap(), 110 + EmbedFieldBuilder::default().name("Position in Queue".to_string()).value("Sussy bakka").inline(true).build().unwrap() 111 + ]) 112 + .footer(EmbedFooterBuilder::default().text("Requested by the goober".to_string()).build().unwrap()) 113 + .author(EmbedAuthorBuilder::default().name("GOOB".to_string()).icon_url("https://fluxerusercontent.com/avatars/1472242534880579616/4c64d1e4.webp".to_string()).build().unwrap()) 114 + .image(EmbedMediaBuilder::default().url("https://s3.animalia.bio/animals/photos/full/1.25x1/sahra11jpg.webp".to_string()).build().unwrap()) 115 + .build() 116 + .unwrap(), 117 + ] 118 + ) 119 + .message_reference(None) 120 + .build().unwrap()); 121 + } 122 + } 123 + }
+27
examples/examplebot/src/main.rs
··· 1 + use std::sync::Arc; 2 + 3 + use fluxer_rs::fluxerbot::FluxerBot; 4 + 5 + use crate::dispatch::ColorbotDispatchHandler; 6 + 7 + pub mod commands; 8 + pub mod dispatch; 9 + 10 + #[tokio::main] 11 + async fn main() { 12 + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); 13 + 14 + let bot: FluxerBot = FluxerBot::init( 15 + "".to_string(), 16 + "wss://gateway.fluxer.app?v=1&encoding=json&compress=none".to_string(), 17 + "https://api.fluxer.app/v1".to_string(), 18 + ) 19 + .await; 20 + 21 + let bot_arc = Arc::new(bot); 22 + bot_arc 23 + .start(ColorbotDispatchHandler { 24 + bot: bot_arc.clone(), 25 + }) 26 + .await; 27 + }
-26
fluxer-rs/Cargo.toml
··· 1 - [package] 2 - name = "fluxer-rs" 3 - version = "0.1.1" 4 - edition = "2024" 5 - license = "MIT" 6 - description = "A rust implementation of the fluxer api to be used on fluxer.app and other self hosted instances" 7 - homepage = "https://git.killuaa.dev/roufpup/colorbot" 8 - repository = "https://git.killuaa.dev/roufpup/colorbot" 9 - readme = "README.md" 10 - 11 - [dependencies] 12 - async-trait = "0.1.89" 13 - log = "0.4.29" 14 - serde_json = "1.0.149" 15 - 16 - [dependencies.ezsockets] 17 - version = "0.7.1" 18 - features = ["rustls"] 19 - 20 - [dependencies.tokio] 21 - version = "1.49.0" 22 - features = ["rt-multi-thread", "macros"] 23 - 24 - [dependencies.serde] 25 - version = "1.0.228" 26 - features = ["derive"]
-5
fluxer-rs/README.md
··· 1 - A rust implementation of the fluxer api to be used on fluxer.app and other self hosted instances 2 - 3 - For opening issues and feature requests please head over to the MIRROR repo over on https://github.com/roufpup/colorbot 4 - 5 - Feel free to join me and chat on Fluxer in the fluxer-rs server https://fluxer.gg/YpAOaODV
-3
fluxer-rs/src/api/handler.rs
··· 1 - pub struct FluxerApiHandler{ 2 - 3 - }
-1
fluxer-rs/src/api/mod.rs
··· 1 - pub mod handler;
+38 -16
fluxer-rs/src/fluxerbot.rs src/fluxerbot.rs
··· 1 + use crate::api::FluxerApiHandler; 1 2 use crate::gateway::op_handlers::dispatch::{DispatchHandlerTrait, handle_dispatch_events}; 2 3 use crate::gateway::op_handlers::heartbeat::{heartbeat_ack_handler, heartbeat_handler}; 3 4 use crate::gateway::op_handlers::identify::auth_handler; 4 - use crate::gateway::serde::receive_serde::{ReceiveData, ReceiveDataType}; 5 + use crate::gateway::serde::deserialize::{ReceiveData, ReceiveDataType}; 5 6 use async_trait::async_trait; 6 7 use ezsockets::{Bytes, Client, ClientConfig, ClientExt, Error, Utf8Bytes, connect}; 7 8 use log::{error, info}; 8 9 9 - pub struct FluxerBot<T: DispatchHandlerTrait + Send + Sync + 'static> { 10 - pub token: String, 11 - pub endpoint: String, 10 + //TODO: mark some modules as crate only as they are not used by crate users 11 + 12 + #[derive(Clone, Default)] 13 + pub struct FluxerBot { 14 + token: String, 15 + endpoint: String, 16 + pub api: FluxerApiHandler, 17 + } 18 + 19 + pub struct FluxerWebsocket<T: DispatchHandlerTrait + Send + Sync + 'static> { 12 20 pub dispatch_handler: T, 13 - pub ws_handle: Client<FluxerBot<T>>, 21 + pub ws_handle: Client<FluxerWebsocket<T>>, 22 + bot_arc: FluxerBot, 14 23 } 15 24 16 - impl<T: DispatchHandlerTrait + Send + Sync + 'static> FluxerBot<T> { 17 - pub async fn start(token: String, endpoint: String, dispatch_handler: T) { 25 + impl FluxerBot { 26 + pub async fn init(token: String, wss_endpoint: String, api_endpoint: String) -> Self { 27 + FluxerBot { 28 + token: token.clone(), 29 + endpoint: wss_endpoint, 30 + api: FluxerApiHandler { 31 + token, 32 + api_endpoint, 33 + }, 34 + } 35 + } 36 + 37 + pub async fn start<T: DispatchHandlerTrait + Send + Sync + 'static>( 38 + &self, 39 + dispatch_handler: T, 40 + ) { 18 41 info!("Init the bot"); 19 42 20 - let config: ClientConfig = ClientConfig::new(endpoint.as_str()); 43 + let config: ClientConfig = ClientConfig::new(self.endpoint.as_str()); 21 44 22 45 info!("Starting websocket"); 23 46 let (_, future) = connect( 24 - |ws_handle| FluxerBot { 47 + |ws_handle| FluxerWebsocket { 48 + dispatch_handler, 25 49 ws_handle, 26 - token, 27 - dispatch_handler, 28 - endpoint, 50 + bot_arc: self.clone(), 29 51 }, 30 52 config, 31 53 ) ··· 34 56 } 35 57 } 36 58 37 - impl<T> FluxerBot<T> where T: Send + Sync + DispatchHandlerTrait + 'static {} 59 + impl<T> FluxerWebsocket<T> where T: Send + Sync + DispatchHandlerTrait + 'static {} 38 60 39 61 #[async_trait] 40 - impl<T: DispatchHandlerTrait + Send + Sync + 'static> ClientExt for FluxerBot<T> { 62 + impl<T: DispatchHandlerTrait + Send + Sync + 'static> ClientExt for FluxerWebsocket<T> { 41 63 type Call = (); 42 64 43 65 async fn on_text(&mut self, text: Utf8Bytes) -> Result<(), Error> { ··· 58 80 ReceiveDataType::OP9(op9_d) => { 59 81 if !op9_d { 60 82 info!("-> {} Connection Invalid, Reauthenticating", text); 61 - auth_handler(self.token.clone(), &self.ws_handle).await 83 + auth_handler(&self.bot_arc.token, &self.ws_handle).await 62 84 } else { 63 85 //TODO: Implement session resume 64 86 info!("-> {} Connection Invalid, Resuming", text); ··· 80 102 } 81 103 82 104 async fn on_connect(&mut self) -> Result<(), Error> { 83 - auth_handler(self.token.clone(), &self.ws_handle).await; 105 + auth_handler(&self.bot_arc.token, &self.ws_handle).await; 84 106 Ok(()) 85 107 } 86 108 }
-9
fluxer-rs/src/gateway/dispatch_data/basic.rs
··· 1 - use serde::Deserialize; 2 - 3 - #[derive(Deserialize)] 4 - pub struct SessionReplaceData{ 5 - pub afk: bool, 6 - pub mobile: bool, 7 - pub session_id: String, 8 - pub status: String, 9 - }
-26
fluxer-rs/src/gateway/dispatch_data/guild.rs
··· 1 - use crate::gateway::dispatch_data::types::{Channel, Member, GuildProperties, Role}; 2 - use serde::Deserialize; 3 - use serde_json::Value; 4 - 5 - #[derive(Deserialize)] 6 - pub struct GuildDeleteData { 7 - #[serde(rename = "id")] 8 - pub guild_id: String, 9 - pub unavailable: bool, 10 - } 11 - 12 - #[derive(Deserialize)] 13 - pub struct GuildCreateData { 14 - pub channels: Vec<Channel>, 15 - pub emojis: Vec<Value>, 16 - pub id: String, 17 - pub joined_at: String, 18 - pub member_count: i64, 19 - pub members: Vec<Member>, 20 - pub online_count: i64, 21 - pub presences: Vec<Value>, 22 - pub properties: GuildProperties, 23 - pub roles: Vec<Role>, 24 - pub stickers: Vec<Value>, 25 - pub voice_states: Vec<Value>, 26 - }
+16 -13
fluxer-rs/src/gateway/dispatch_data/message.rs src/gateway/data_structure/message.rs
··· 1 1 use serde::Deserialize; 2 2 use serde_json::Value; 3 3 4 - use crate::gateway::dispatch_data::types::{Author, Emoji, Member}; 4 + use crate::{ 5 + Embed, 6 + gateway::data_structure::common::{AuthorData, EmojiData, MemberData}, 7 + }; 5 8 6 - #[derive(Deserialize)] 9 + #[derive(Deserialize, Debug)] 7 10 pub struct MessageEventData { 8 11 pub attachments: Option<Vec<Value>>, 9 - pub author: Option<Author>, 12 + pub author: Option<AuthorData>, 10 13 pub channel_id: String, 11 14 pub channel_type: Option<i64>, 12 15 pub content: String, 13 16 pub edited_timestamp: Option<Value>, 14 - pub embeds: Option<Vec<Value>>, 17 + pub embeds: Option<Vec<Embed>>, 15 18 pub flags: Option<i64>, 16 - pub guild_id: String, 19 + pub guild_id: Option<String>, 17 20 pub id: String, 18 - pub member: Member, 21 + pub member: Option<MemberData>, 19 22 pub mention_everyone: Option<bool>, 20 23 pub nonce: Option<String>, 21 24 pub pinned: Option<bool>, ··· 25 28 pub message_type: Option<i64>, 26 29 } 27 30 28 - #[derive(Deserialize)] 31 + #[derive(Deserialize, Debug)] 29 32 pub struct TypingEventData { 30 33 pub channel_id: String, 31 34 pub guild_id: String, 32 - pub member: Member, 35 + pub member: MemberData, 33 36 pub timestamp: i64, 34 37 pub user_id: String, 35 38 } 36 39 37 - #[derive(Deserialize)] 40 + #[derive(Deserialize, Debug)] 38 41 pub struct MessageReactData { 39 42 pub channel_id: String, 40 - pub emoji: Emoji, 43 + pub emoji: EmojiData, 41 44 pub guild_id: String, 42 - pub member: Member, 45 + pub member: Option<MemberData>, 43 46 pub message_id: String, 44 - pub user_id: String, 45 - } 47 + pub user_id: Option<String>, 48 + }
-5
fluxer-rs/src/gateway/dispatch_data/mod.rs
··· 1 - pub mod guild; 2 - pub mod message; 3 - pub mod types; 4 - pub mod basic; 5 - pub mod ready;
+8
fluxer-rs/src/gateway/dispatch_data/ready.rs src/gateway/data_structure/user.rs
··· 86 86 87 87 #[derive(Deserialize)] 88 88 pub struct Notes {} 89 + 90 + #[derive(Deserialize)] 91 + pub struct SessionReplaceData{ 92 + pub afk: bool, 93 + pub mobile: bool, 94 + pub session_id: String, 95 + pub status: String, 96 + }
+26 -26
fluxer-rs/src/gateway/dispatch_data/types.rs src/gateway/data_structure/common.rs
··· 1 1 use serde::Deserialize; 2 2 use serde_json::Value; 3 3 4 - #[derive(Deserialize)] 5 - pub struct Channel { 4 + #[derive(Deserialize, Debug)] 5 + pub struct ChannelData { 6 6 pub guild_id: String, 7 7 pub id: String, 8 8 pub name: String, ··· 21 21 pub user_limit: Option<i64>, 22 22 } 23 23 24 - #[derive(Deserialize)] 25 - pub struct Member { 26 - pub accent_color: Value, 27 - pub avatar: Value, 28 - pub banner: Value, 29 - pub communication_disabled_until: Value, 24 + #[derive(Deserialize, Debug)] 25 + pub struct MemberData { 26 + pub accent_color: Option<Value>, 27 + pub avatar: Option<Value>, 28 + pub banner: Option<Value>, 29 + pub communication_disabled_until: Option<Value>, 30 30 pub deaf: bool, 31 31 pub guild_id: Option<String>, 32 32 pub joined_at: String, 33 33 pub mute: bool, 34 - pub nick: Value, 35 - pub roles: Vec<String>, 36 - pub user: Option<User>, 34 + pub nick: Option<Value>, 35 + pub roles: Option<Vec<String>>, 36 + pub user: Option<UserData>, 37 37 } 38 38 39 - #[derive(Deserialize)] 40 - pub struct User { 39 + #[derive(Deserialize, Debug)] 40 + pub struct UserData { 41 41 pub avatar: Value, 42 42 pub avatar_color: Value, 43 43 pub bot: Option<bool>, ··· 48 48 pub username: String, 49 49 } 50 50 51 - #[derive(Deserialize)] 52 - pub struct GuildProperties { 51 + #[derive(Deserialize, Debug)] 52 + pub struct GuildPropertiesData { 53 53 pub afk_channel_id: Value, 54 54 pub afk_timeout: i64, 55 55 pub banner: Value, ··· 80 80 pub verification_level: i64, 81 81 } 82 82 83 - #[derive(Deserialize)] 84 - pub struct Role { 83 + #[derive(Deserialize, Debug)] 84 + pub struct RoleData { 85 85 pub color: i64, 86 86 pub hoist: bool, 87 87 pub hoist_position: Value, ··· 92 92 pub position: i64, 93 93 } 94 94 95 - #[derive(Deserialize)] 96 - pub struct Author { 97 - pub avatar: String, 98 - pub avatar_color: i64, 95 + #[derive(Deserialize, Debug)] 96 + pub struct AuthorData { 97 + pub avatar: Option<String>, 98 + pub avatar_color: Option<i64>, 99 99 pub discriminator: String, 100 100 pub flags: i64, 101 - pub global_name: String, 101 + pub global_name: Option<String>, 102 102 pub id: String, 103 103 pub username: String, 104 104 } 105 105 106 - #[derive(Deserialize)] 107 - pub struct Emoji { 106 + #[derive(Deserialize, Debug)] 107 + pub struct EmojiData { 108 108 pub name: String, 109 + pub animated: Option<bool>, 110 + pub id: Option<String>, 109 111 } 110 - 111 -
+1 -1
fluxer-rs/src/gateway/mod.rs src/gateway.rs
··· 1 1 pub mod op_handlers; 2 2 pub mod serde; 3 - pub mod dispatch_data; 3 + pub mod data_structure;
-109
fluxer-rs/src/gateway/op_handlers/dispatch.rs
··· 1 - use log::info; 2 - 3 - use crate::gateway::dispatch_data::basic::SessionReplaceData; 4 - use crate::gateway::dispatch_data::message::MessageReactData; 5 - use crate::gateway::dispatch_data::ready::ReadyData; 6 - use crate::gateway::dispatch_data::{ 7 - guild::{GuildCreateData, GuildDeleteData}, 8 - message::{MessageEventData, TypingEventData}, 9 - }; 10 - 11 - pub enum DispatchEvent { 12 - Ready(ReadyData), 13 - GuildDelete(GuildDeleteData), 14 - GuildCreate(Box<GuildCreateData>), 15 - MessageCreate(MessageEventData), 16 - MessageDelete(MessageEventData), 17 - MessageUpdate(MessageEventData), 18 - TypingStart(TypingEventData), 19 - TypingStop(TypingEventData), 20 - ReactionAdd(MessageReactData), 21 - ReactionRemove(MessageReactData), 22 - SessionReplace(Vec<SessionReplaceData>), 23 - } 24 - 25 - pub trait DispatchHandlerTrait { 26 - fn handle_ready_dispatch(&self, data: ReadyData) { 27 - info!("-> [DISPATCH::READY] BOT_NAME: {}", data.user.username) 28 - } 29 - 30 - fn handle_guild_delete_dispatch(&self, data: GuildDeleteData) { 31 - info!( 32 - "-> [DISPATCH::GUILD_DELETE] ID: {}, Unavailable: {}", 33 - data.guild_id, data.unavailable 34 - ) 35 - } 36 - 37 - fn handle_guild_create_dispatch(&self, data: Box<GuildCreateData>) { 38 - info!("-> [DISPATCH::GUILD_CREATE] ID: {}", data.id) 39 - } 40 - 41 - fn handle_message_create_dispatch(&self, data: MessageEventData) { 42 - info!("-> [DISPATCH::MESSAGE_CREATE] CONTENT: {}", data.content) 43 - } 44 - 45 - fn handle_message_delete_dispatch(&self, data: MessageEventData) { 46 - info!("-> [DISPATCH::MESSAGE_DELETE] CONTENT: {}", data.content) 47 - } 48 - 49 - fn handle_message_update_dispatch(&self, data: MessageEventData) { 50 - info!("-> [DISPATCH::MESSAGE_UPDATE] CONTENT: {}", data.content) 51 - } 52 - 53 - fn handle_typing_start_dispatch(&self, data: TypingEventData) { 54 - info!( 55 - "-> [DISPATCH::TYPING_START] GUILD: {}, CHANNEL: {}", 56 - data.guild_id, data.channel_id 57 - ) 58 - } 59 - 60 - fn handle_typing_stop_dispatch(&self, data: TypingEventData) { 61 - info!( 62 - "-> [DISPATCH::TYPING_STOP] GUILD: {}, CHANNEL: {}", 63 - data.guild_id, data.channel_id 64 - ) 65 - } 66 - 67 - fn handle_message_reaction_add_dispatch(&self, data: MessageReactData) { 68 - info!( 69 - "-> [DISPATCH::MESSAGE_REACTION_ADD] MESSAGE: {}, EMOJI: {}", 70 - data.message_id, data.emoji.name 71 - ) 72 - } 73 - 74 - fn handle_message_reaction_remove_dispatch(&self, data: MessageReactData) { 75 - info!( 76 - "-> [DISPATCH::MESSAGE_REACTION_REMOVE] MESSAGE: {}, EMOJI: {}", 77 - data.message_id, data.emoji.name 78 - ) 79 - } 80 - 81 - fn handle_session_replace_dispatch(&self, _data: Vec<SessionReplaceData>) { 82 - info!("-> [DISPATCH::SESSION_REPLACE]",) 83 - } 84 - } 85 - 86 - #[derive(Default)] 87 - pub struct DispatchHandler; 88 - impl DispatchHandlerTrait for DispatchHandler {} 89 - 90 - pub async fn handle_dispatch_events<T: DispatchHandlerTrait + Send + Sync + 'static>( 91 - dispatch_event: Box<DispatchEvent>, 92 - handler: &T, 93 - ) { 94 - match *dispatch_event { 95 - DispatchEvent::Ready(data) => handler.handle_ready_dispatch(data), 96 - DispatchEvent::GuildDelete(data) => handler.handle_guild_delete_dispatch(data), 97 - DispatchEvent::GuildCreate(data) => handler.handle_guild_create_dispatch(data), 98 - DispatchEvent::MessageCreate(data) => handler.handle_message_create_dispatch(data), 99 - DispatchEvent::MessageDelete(data) => handler.handle_message_delete_dispatch(data), 100 - DispatchEvent::MessageUpdate(data) => handler.handle_message_update_dispatch(data), 101 - DispatchEvent::TypingStart(data) => handler.handle_typing_start_dispatch(data), 102 - DispatchEvent::TypingStop(data) => handler.handle_typing_stop_dispatch(data), 103 - DispatchEvent::ReactionAdd(data) => handler.handle_message_reaction_add_dispatch(data), 104 - DispatchEvent::ReactionRemove(data) => { 105 - handler.handle_message_reaction_remove_dispatch(data) 106 - } 107 - DispatchEvent::SessionReplace(data) => handler.handle_session_replace_dispatch(data), 108 - } 109 - }
+3 -3
fluxer-rs/src/gateway/op_handlers/heartbeat.rs src/gateway/op_handlers/heartbeat.rs
··· 1 1 use ezsockets::{Client, Utf8Bytes}; 2 2 use log::info; 3 3 4 - use crate::fluxerbot::FluxerBot; 4 + use crate::fluxerbot::FluxerWebsocket; 5 5 use crate::gateway::{ 6 6 op_handlers::dispatch::DispatchHandlerTrait, 7 - serde::send_serde::{SendData, SendDataType}, 7 + serde::serialize::{SendData, SendDataType}, 8 8 }; 9 9 10 10 pub async fn heartbeat_handler<T: DispatchHandlerTrait + Send + Sync + 'static>( 11 11 text: Utf8Bytes, 12 - client_handle: &Client<FluxerBot<T>>, 12 + client_handle: &Client<FluxerWebsocket<T>>, 13 13 ) { 14 14 info!("-> {}", text); 15 15
+11 -7
fluxer-rs/src/gateway/op_handlers/identify.rs src/gateway/op_handlers/identify.rs
··· 1 + use crate::fluxerbot::FluxerWebsocket; 2 + use crate::gateway::op_handlers::dispatch::DispatchHandlerTrait; 3 + use crate::gateway::serde::serialize::{OP2D, OP2DProps, SendData, SendDataType}; 1 4 use ezsockets::Client; 2 - use crate::fluxerbot::FluxerBot; 3 - use crate::gateway::op_handlers::dispatch::DispatchHandlerTrait; 4 - use crate::gateway::serde::send_serde::{OP2DProps, SendData, SendDataType, OP2D}; 5 5 6 - pub async fn auth_handler<T: DispatchHandlerTrait + Send + Sync + 'static> (token: String, client_handle: &Client<FluxerBot<T>>){ 6 + pub async fn auth_handler<T: DispatchHandlerTrait + Send + Sync + 'static>( 7 + token: &str, 8 + client_handle: &Client<FluxerWebsocket<T>>, 9 + ) { 7 10 let auth_string = serde_json::to_string(&SendData { 8 11 d: SendDataType::OP2(OP2D { 9 - token, 12 + token: token.to_string(), 10 13 properties: OP2DProps { 11 14 os: "Linux".to_string(), 12 15 browser: "Fluxer-rs".to_string(), ··· 14 17 }, 15 18 }), 16 19 op: 2, 17 - }).unwrap(); 20 + }) 21 + .unwrap(); 18 22 19 23 match client_handle.text(auth_string) { 20 24 Ok(_) => {} ··· 22 26 panic!("{err}") 23 27 } 24 28 }; 25 - } 29 + }
fluxer-rs/src/gateway/op_handlers/mod.rs src/gateway/op_handlers.rs
-5
fluxer-rs/src/gateway/serde/mod.rs
··· 1 - pub mod receive_serde; 2 - pub mod send_serde; 3 - 4 - 5 -
-101
fluxer-rs/src/gateway/serde/receive_serde.rs
··· 1 - use log::info; 2 - use serde::{Deserialize, Serialize, de}; 3 - use serde_json::Value; 4 - 5 - use crate::gateway::dispatch_data::basic::SessionReplaceData; 6 - use crate::gateway::dispatch_data::message::MessageReactData; 7 - use crate::gateway::dispatch_data::ready::ReadyData; 8 - use crate::gateway::{ 9 - dispatch_data::{ 10 - guild::{GuildCreateData, GuildDeleteData}, 11 - message::{MessageEventData, TypingEventData}, 12 - }, 13 - op_handlers::dispatch::DispatchEvent, 14 - }; 15 - 16 - pub struct ReceiveData { 17 - pub d: ReceiveDataType, 18 - pub op: u8, 19 - } 20 - 21 - pub enum ReceiveDataType { 22 - OP0(Box<DispatchEvent>), 23 - OP1(Option<u32>), 24 - OP9(bool), 25 - OP10(OP10D), 26 - OP11, 27 - } 28 - 29 - #[derive(Serialize, Deserialize)] 30 - pub struct OP10D { 31 - pub heartbeat_interval: u32, 32 - } 33 - 34 - impl<'de> Deserialize<'de> for ReceiveData { 35 - fn deserialize<D: de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> { 36 - let value = Value::deserialize(deserializer)?; 37 - let op = value["op"] 38 - .as_u64() 39 - .ok_or_else(|| de::Error::missing_field("op"))? as u8; 40 - 41 - let d = match op { 42 - 0 => { 43 - let dispatch_event = match value["t"].as_str().unwrap() { 44 - "READY" => DispatchEvent::Ready( 45 - ReadyData::deserialize(&value["d"]).map_err(de::Error::custom)?, 46 - ), 47 - "GUILD_DELETE" => DispatchEvent::GuildDelete( 48 - GuildDeleteData::deserialize(&value["d"]).map_err(de::Error::custom)?, 49 - ), 50 - "GUILD_CREATE" => DispatchEvent::GuildCreate(Box::new( 51 - GuildCreateData::deserialize(&value["d"]).map_err(de::Error::custom)?, 52 - )), 53 - "MESSAGE_CREATE" => DispatchEvent::MessageCreate( 54 - MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 55 - ), 56 - "MESSAGE_DELETE" => DispatchEvent::MessageDelete( 57 - MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 58 - ), 59 - "MESSAGE_UPDATE" => DispatchEvent::MessageUpdate( 60 - MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 61 - ), 62 - "TYPING_START" => DispatchEvent::TypingStart( 63 - TypingEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 64 - ), 65 - "TYPING_STOP" => DispatchEvent::TypingStop( 66 - TypingEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 67 - ), 68 - "MESSAGE_REACTION_ADD" => DispatchEvent::ReactionAdd( 69 - MessageReactData::deserialize(&value["d"]).map_err(de::Error::custom)?, 70 - ), 71 - "MESSAGE_REACTION_REMOVE" => DispatchEvent::ReactionRemove( 72 - MessageReactData::deserialize(&value["d"]).map_err(de::Error::custom)?, 73 - ), 74 - "SESSION_REPLACE" => DispatchEvent::SessionReplace( 75 - Vec::<SessionReplaceData>::deserialize(&value["d"]) 76 - .map_err(de::Error::custom)?, 77 - ), 78 - _ => panic!("Unimplemented dispatch event: {}", value), 79 - }; 80 - ReceiveDataType::OP0(Box::new(dispatch_event)) 81 - } 82 - 1 => { 83 - let inner: Option<u32> = 84 - Option::deserialize(&value["d"]).map_err(de::Error::custom)?; 85 - ReceiveDataType::OP1(inner) 86 - } 87 - 9 => { 88 - let inner = bool::deserialize(&value["d"]).map_err(de::Error::custom)?; 89 - ReceiveDataType::OP9(inner) 90 - } 91 - 10 => { 92 - let inner = OP10D::deserialize(&value["d"]).map_err(de::Error::custom)?; 93 - ReceiveDataType::OP10(inner) 94 - } 95 - 11 => ReceiveDataType::OP11, 96 - _ => return Err(de::Error::custom(format!("unknown op: {}", op))), 97 - }; 98 - 99 - Ok(ReceiveData { d, op }) 100 - } 101 - }
+1 -1
fluxer-rs/src/gateway/serde/send_serde.rs src/gateway/serde/serialize.rs
··· 9 9 pub d: SendDataType, 10 10 pub op: u8, 11 11 } 12 - 12 + // TODO: make impl Serialize implementation consistent across all places 13 13 impl Serialize for SendData { 14 14 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> { 15 15 let mut serializer_map = serializer.serialize_map(None)?;
-3
fluxer-rs/src/lib.rs
··· 1 - pub mod gateway; 2 - pub mod fluxerbot; 3 - pub mod api;
+59
src/api.rs
··· 1 + pub mod calls; 2 + pub mod data_structure; 3 + 4 + use log::info; 5 + use minreq::Response; 6 + 7 + pub enum FluxerApiCallType { 8 + Get, 9 + Post, 10 + Patch, 11 + Put, 12 + Delete, 13 + } 14 + 15 + pub trait ApiCall { 16 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request; 17 + fn get_info(&self) -> (String, FluxerApiCallType); 18 + } 19 + 20 + #[derive(Clone, Default)] 21 + pub struct FluxerApiHandler { 22 + pub token: String, 23 + pub api_endpoint: String, 24 + } 25 + 26 + impl FluxerApiHandler { 27 + pub fn execute_call<T: ApiCall>(&self, call: T) -> Result<Response, minreq::Error> { 28 + let (endpoint, call_type) = call.get_info(); 29 + let url = format!("{}{endpoint}", self.api_endpoint); 30 + 31 + let request = match call_type { 32 + FluxerApiCallType::Get => { 33 + let req = minreq::get(url); 34 + call.get_req(req, self.token.to_string()) 35 + } 36 + FluxerApiCallType::Post => { 37 + let req = minreq::post(url); 38 + call.get_req(req, self.token.to_string()) 39 + } 40 + FluxerApiCallType::Patch => { 41 + let req = minreq::patch(url); 42 + call.get_req(req, self.token.to_string()) 43 + } 44 + FluxerApiCallType::Put => { 45 + let req = minreq::put(url); 46 + call.get_req(req, self.token.to_string()) 47 + } 48 + FluxerApiCallType::Delete => { 49 + let req = minreq::delete(url); 50 + call.get_req(req, self.token.to_string()) 51 + } 52 + }; 53 + 54 + info!("REQ CHECK {:?}", request); 55 + let resp = request.send(); 56 + info!("RESP CHECK: {:?}", resp); 57 + resp 58 + } 59 + }
+2
src/api/calls.rs
··· 1 + pub mod channel; 2 + pub mod guilds;
+2
src/api/calls/channel.rs
··· 1 + pub mod message; 2 + pub mod reaction;
+3
src/api/calls/channel/message.rs
··· 1 + pub mod send; 2 + pub mod edit; 3 + pub mod fetch;
+37
src/api/calls/channel/message/edit.rs
··· 1 + use log::info; 2 + use serde::{Serialize, ser::SerializeMap}; 3 + 4 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::message::EditMessage}; 5 + 6 + impl ApiCall for EditMessage { 7 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 8 + let body = serde_json::to_string(self).unwrap(); 9 + info!("BODY CHECK {body}"); 10 + req.with_body(body) 11 + .with_header("Authorization", format!("Bot {token}")) 12 + } 13 + 14 + fn get_info(&self) -> (String, FluxerApiCallType) { 15 + ( 16 + format!("/channels/{}/messages/{}", self.channel_id, self.message_id), 17 + FluxerApiCallType::Patch, 18 + ) 19 + } 20 + } 21 + 22 + impl Serialize for EditMessage { 23 + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 24 + where 25 + S: serde::Serializer, 26 + { 27 + let mut state = serializer.serialize_map(None)?; 28 + state.serialize_entry("content", &self.content)?; 29 + if let Some(embed) = self.embeds.clone() { 30 + state.serialize_entry("embeds", &embed)?; 31 + }; 32 + if let Some(message_reference) = self.message_reference.clone() { 33 + state.serialize_entry("message_reference", &message_reference)?; 34 + } 35 + state.end() 36 + } 37 + }
+23
src/api/calls/channel/message/fetch.rs
··· 1 + use crate::{ 2 + api::{ApiCall, FluxerApiCallType, data_structure::message::FetchMessage}, 3 + gateway::data_structure::message::MessageEventData, 4 + }; 5 + 6 + impl FetchMessage { 7 + pub fn get_resp(body: &str) -> MessageEventData { 8 + serde_json::from_str::<MessageEventData>(body).unwrap() 9 + } 10 + } 11 + 12 + impl ApiCall for FetchMessage { 13 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 14 + req.with_header("Authorization", format!("Bot {token}")) 15 + } 16 + 17 + fn get_info(&self) -> (String, FluxerApiCallType) { 18 + ( 19 + format!("/channels/{}/messages/{}", self.channel_id, self.message_id), 20 + FluxerApiCallType::Get, 21 + ) 22 + } 23 + }
+37
src/api/calls/channel/message/send.rs
··· 1 + use log::info; 2 + use serde::{Serialize, ser::SerializeMap}; 3 + 4 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::message::SendMessage}; 5 + 6 + impl ApiCall for SendMessage { 7 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 8 + let body = serde_json::to_string(self).unwrap(); 9 + info!("BODY CHECK {body}"); 10 + req.with_body(body) 11 + .with_header("Authorization", format!("Bot {token}")) 12 + } 13 + 14 + fn get_info(&self) -> (String, FluxerApiCallType) { 15 + ( 16 + format!("/channels/{}/messages", self.channel_id), 17 + FluxerApiCallType::Post, 18 + ) 19 + } 20 + } 21 + 22 + impl Serialize for SendMessage { 23 + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 24 + where 25 + S: serde::Serializer, 26 + { 27 + let mut state = serializer.serialize_map(None)?; 28 + state.serialize_entry("content", &self.content)?; 29 + if let Some(embed) = self.embeds.clone() { 30 + state.serialize_entry("embeds", &embed)?; 31 + }; 32 + if let Some(message_reference) = self.message_reference.clone() { 33 + state.serialize_entry("message_reference", &message_reference)?; 34 + } 35 + state.end() 36 + } 37 + }
+2
src/api/calls/channel/reaction.rs
··· 1 + pub mod add_own; 2 + pub mod remove_all;
+17
src/api/calls/channel/reaction/add_own.rs
··· 1 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::reaction::AddOwnReaciton}; 2 + 3 + impl ApiCall for AddOwnReaciton { 4 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 5 + req.with_header("Authorization", format!("Bot {token}")) 6 + } 7 + 8 + fn get_info(&self) -> (String, FluxerApiCallType) { 9 + ( 10 + format!( 11 + "/channels/{}/messages/{}/reactions/{}/@me", 12 + self.channel_id, self.message_id, self.emoji 13 + ), 14 + FluxerApiCallType::Put, 15 + ) 16 + } 17 + }
+17
src/api/calls/channel/reaction/remove_all.rs
··· 1 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::reaction::RemoveAllReaction}; 2 + 3 + impl ApiCall for RemoveAllReaction { 4 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 5 + req.with_header("Authorization", format!("Bot {token}")) 6 + } 7 + 8 + fn get_info(&self) -> (String, FluxerApiCallType) { 9 + ( 10 + format!( 11 + "/channels/{}/messages/{}/reactions/{}", 12 + self.channel_id, self.message_id, self.emoji 13 + ), 14 + FluxerApiCallType::Delete, 15 + ) 16 + } 17 + }
+1
src/api/calls/guilds.rs
··· 1 + pub mod role;
+4
src/api/calls/guilds/role.rs
··· 1 + pub mod add_to_member; 2 + pub mod remove_from_member; 3 + pub mod create; 4 + pub mod delete;
+17
src/api/calls/guilds/role/add_to_member.rs
··· 1 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::role::AddRoleToMember}; 2 + 3 + impl ApiCall for AddRoleToMember { 4 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 5 + req.with_header("Authorization", format!("Bot {token}")) 6 + } 7 + 8 + fn get_info(&self) -> (String, FluxerApiCallType) { 9 + ( 10 + format!( 11 + "/guilds/{}/members/{}/roles/{}", 12 + self.guild_id, self.user_id, self.role_id 13 + ), 14 + FluxerApiCallType::Put, 15 + ) 16 + } 17 + }
+33
src/api/calls/guilds/role/create.rs
··· 1 + use log::info; 2 + use serde::{Serialize, ser::SerializeMap}; 3 + 4 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::role::CreateRole}; 5 + 6 + impl ApiCall for CreateRole { 7 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 8 + let body = serde_json::to_string(self).unwrap(); 9 + info!("BODY CHECK {body}"); 10 + req.with_body(body) 11 + .with_header("Authorization", format!("Bot {token}")) 12 + } 13 + 14 + fn get_info(&self) -> (String, FluxerApiCallType) { 15 + ( 16 + format!("/guilds/{}/roles", self.guild_id), 17 + FluxerApiCallType::Post, 18 + ) 19 + } 20 + } 21 + 22 + impl Serialize for CreateRole { 23 + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 24 + where 25 + S: serde::Serializer, 26 + { 27 + let mut state = serializer.serialize_map(None)?; 28 + state.serialize_entry("name", &self.name)?; 29 + state.serialize_entry("color", &self.color)?; 30 + state.serialize_entry("permissions", &self.permission)?; 31 + state.end() 32 + } 33 + }
+14
src/api/calls/guilds/role/delete.rs
··· 1 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::role::DeleteRole}; 2 + 3 + impl ApiCall for DeleteRole { 4 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 5 + req.with_header("Authorization", format!("Bot {token}")) 6 + } 7 + 8 + fn get_info(&self) -> (String, FluxerApiCallType) { 9 + ( 10 + format!("/guilds/{}/roles/{}", self.guild_id, self.role_id), 11 + FluxerApiCallType::Delete, 12 + ) 13 + } 14 + }
+17
src/api/calls/guilds/role/remove_from_member.rs
··· 1 + use crate::api::{ApiCall, FluxerApiCallType, data_structure::role::RemoveRoleFromMember}; 2 + 3 + impl ApiCall for RemoveRoleFromMember { 4 + fn get_req(&self, req: minreq::Request, token: String) -> minreq::Request { 5 + req.with_header("Authorization", format!("Bot {token}")) 6 + } 7 + 8 + fn get_info(&self) -> (String, FluxerApiCallType) { 9 + ( 10 + format!( 11 + "/guilds/{}/members/{}/roles/{}", 12 + self.guild_id, self.user_id, self.role_id 13 + ), 14 + FluxerApiCallType::Delete, 15 + ) 16 + } 17 + }
+4
src/api/data_structure.rs
··· 1 + pub mod embed; 2 + pub mod message; 3 + pub mod reaction; 4 + pub mod role;
+180
src/api/data_structure/embed.rs
··· 1 + use std::mem::take; 2 + 3 + use derive_builder::Builder; 4 + use serde::{Deserialize, Serialize}; 5 + use serde_with::skip_serializing_none; 6 + 7 + #[derive(Serialize, Deserialize, Clone, Debug)] 8 + #[serde(rename_all = "lowercase")] 9 + pub enum EmbedType { 10 + Rich, 11 + Image, 12 + Video, 13 + GifV, 14 + Article, 15 + Link, 16 + } 17 + 18 + #[derive(Serialize, Clone)] 19 + pub enum EmbedMediaFlags { 20 + None, 21 + IsExplicit, 22 + IsAnimated, 23 + IsAnimatedAndExplicit, 24 + } 25 + 26 + #[skip_serializing_none] 27 + #[derive(Serialize, Deserialize, Clone, Default, Builder, Debug)] 28 + #[builder(try_setter, setter(into), default)] 29 + pub struct Embed { 30 + #[serde(rename = "type")] 31 + pub embed_type: Option<EmbedType>, 32 + pub url: Option<String>, 33 + pub title: Option<String>, 34 + pub color: Option<u32>, 35 + pub description: Option<String>, 36 + pub author: Option<EmbedAuthor>, 37 + pub image: Option<EmbedMedia>, 38 + pub thumbnail: Option<EmbedMedia>, 39 + pub footer: Option<EmbedFooter>, 40 + pub fields: Option<Vec<EmbedField>>, 41 + pub provider: Option<EmbedAuthor>, 42 + pub video: Option<EmbedMedia>, 43 + pub audio: Option<EmbedMedia>, 44 + pub nsfw: Option<bool>, 45 + pub children: Option<Vec<EmbedChild>>, 46 + } 47 + 48 + #[skip_serializing_none] 49 + #[derive(Serialize, Deserialize, Clone, Default, Builder, Debug)] 50 + #[builder(try_setter, setter(into), default)] 51 + pub struct EmbedChild { 52 + #[serde(rename = "type")] 53 + pub embed_type: Option<EmbedType>, 54 + pub url: Option<String>, 55 + pub title: Option<String>, 56 + pub color: Option<u32>, 57 + pub description: Option<String>, 58 + pub author: Option<EmbedAuthor>, 59 + pub image: Option<EmbedMedia>, 60 + pub thumbnail: Option<EmbedMedia>, 61 + pub footer: Option<EmbedFooter>, 62 + pub fields: Option<Vec<EmbedField>>, 63 + pub provider: Option<EmbedAuthor>, 64 + pub video: Option<EmbedMedia>, 65 + pub audio: Option<EmbedMedia>, 66 + pub nsfw: Option<bool>, 67 + } 68 + 69 + // Name is a required field even tho the js library makes it nullable 70 + 71 + #[skip_serializing_none] 72 + #[derive(Serialize, Deserialize, Clone, Default, Builder, Debug)] 73 + #[builder(try_setter, setter(into))] 74 + pub struct EmbedAuthor { 75 + pub name: String, 76 + #[builder(default)] 77 + pub url: Option<String>, 78 + #[builder(default)] 79 + pub icon_url: Option<String>, 80 + #[builder(default)] 81 + pub proxy_icon_url: Option<String>, 82 + } 83 + 84 + // Pretty sure the text should be a required field 85 + 86 + #[skip_serializing_none] 87 + #[derive(Serialize, Deserialize, Clone, Default, Builder, Debug)] 88 + #[builder(try_setter, setter(into))] 89 + pub struct EmbedFooter { 90 + pub text: Option<String>, 91 + #[builder(default)] 92 + pub icon_url: Option<String>, 93 + #[builder(default)] 94 + pub proxy_icon_url: Option<String>, 95 + } 96 + 97 + #[skip_serializing_none] 98 + #[derive(Serialize, Deserialize, Clone, Default, Builder, Debug)] 99 + #[builder(try_setter, setter(into))] 100 + pub struct EmbedField { 101 + pub name: String, 102 + pub value: String, 103 + #[builder(default)] 104 + pub inline: Option<bool>, 105 + } 106 + 107 + // WIll implement my own build method for EmbedMedia because i need to manually setup the width and height 108 + // So we don't put Default here as build_fn(skip) makes it so they won't be used 109 + 110 + #[skip_serializing_none] 111 + #[derive(Serialize, Deserialize, Clone, Builder, Debug)] 112 + #[builder(try_setter, setter(into), build_fn(skip))] 113 + pub struct EmbedMedia { 114 + pub url: String, 115 + pub proxy_url: Option<String>, 116 + pub content_type: Option<String>, 117 + pub content_hash: Option<String>, 118 + pub width: Option<u32>, 119 + pub height: Option<u32>, 120 + pub description: Option<String>, 121 + pub placeholder: Option<String>, 122 + pub duration: Option<u64>, 123 + pub flags: Option<u8>, 124 + } 125 + 126 + impl EmbedMediaBuilder { 127 + pub fn build(&mut self) -> Result<EmbedMedia, EmbedMediaBuilderError> { 128 + let media_builder = take(self); 129 + 130 + let url = if let Some(result) = media_builder.url { 131 + result 132 + } else { 133 + return Err(EmbedMediaBuilderError::UninitializedField( 134 + "The url field of the embed media must be used", 135 + )); 136 + }; 137 + 138 + let res_result: Option<(u32, u32)> = 139 + if media_builder.width.is_none() || media_builder.height.is_none() { 140 + let image = minreq::get(&url).send().unwrap(); 141 + let rust_img = image::load_from_memory(image.as_bytes()).unwrap(); 142 + Some((rust_img.width(), rust_img.width())) 143 + } else { 144 + None 145 + }; 146 + 147 + Ok(EmbedMedia { 148 + url, 149 + proxy_url: media_builder.proxy_url.unwrap_or_default(), 150 + content_type: media_builder.content_type.unwrap_or_default(), 151 + content_hash: media_builder.content_hash.unwrap_or_default(), 152 + width: if let Some(width) = media_builder.width { 153 + width 154 + } else { 155 + Some(res_result.unwrap().0) 156 + }, 157 + height: if let Some(height) = media_builder.height { 158 + height 159 + } else { 160 + Some(res_result.unwrap().1) 161 + }, 162 + description: media_builder.description.unwrap_or_default(), 163 + placeholder: media_builder.placeholder.unwrap_or_default(), 164 + duration: media_builder.duration.unwrap_or_default(), 165 + flags: media_builder.flags.unwrap_or(Some(0)), 166 + }) 167 + } 168 + } 169 + 170 + impl From<EmbedMediaFlags> for Option<u8> { 171 + fn from(value: EmbedMediaFlags) -> Self { 172 + let result = match value { 173 + EmbedMediaFlags::None => 0, 174 + EmbedMediaFlags::IsExplicit => 16, 175 + EmbedMediaFlags::IsAnimated => 32, 176 + EmbedMediaFlags::IsAnimatedAndExplicit => 48, 177 + }; 178 + Some(result) 179 + } 180 + }
+51
src/api/data_structure/message.rs
··· 1 + use derive_builder::Builder; 2 + use serde::Serialize; 3 + use serde_with::skip_serializing_none; 4 + 5 + use crate::Embed; 6 + 7 + #[derive(Clone, Builder)] 8 + #[builder(try_setter, setter(into))] 9 + pub struct FetchMessage { 10 + // Path params 11 + pub channel_id: String, 12 + pub message_id: String, 13 + } 14 + 15 + #[derive(Clone, Builder)] 16 + #[builder(try_setter, setter(into))] 17 + pub struct SendMessage { 18 + // Path params 19 + pub channel_id: String, 20 + 21 + pub content: String, 22 + #[builder(default)] 23 + pub embeds: Option<Vec<Embed>>, 24 + #[builder(default)] 25 + pub message_reference: Option<MessageReference>, 26 + } 27 + 28 + #[derive(Clone, Builder)] 29 + #[builder(try_setter, setter(into))] 30 + pub struct EditMessage { 31 + // Path params 32 + pub channel_id: String, 33 + pub message_id: String, 34 + 35 + pub content: String, 36 + #[builder(default)] 37 + pub embeds: Option<Vec<Embed>>, 38 + #[builder(default)] 39 + pub message_reference: Option<MessageReference>, 40 + } 41 + 42 + #[skip_serializing_none] 43 + #[derive(Clone, Serialize, Builder)] 44 + #[builder(try_setter, setter(into))] 45 + pub struct MessageReference { 46 + pub message_id: String, 47 + #[builder(default)] 48 + pub channel_id: Option<String>, 49 + #[builder(default)] 50 + pub guild_id: Option<String>, 51 + }
+17
src/api/data_structure/reaction.rs
··· 1 + use derive_builder::Builder; 2 + 3 + #[derive(Clone, Builder)] 4 + #[builder(try_setter, setter(into))] 5 + pub struct AddOwnReaciton { 6 + pub channel_id: String, 7 + pub message_id: String, 8 + pub emoji: String, 9 + } 10 + 11 + #[derive(Clone, Builder)] 12 + #[builder(try_setter, setter(into))] 13 + pub struct RemoveAllReaction { 14 + pub channel_id: String, 15 + pub message_id: String, 16 + pub emoji: String, 17 + }
+34
src/api/data_structure/role.rs
··· 1 + use derive_builder::Builder; 2 + 3 + #[derive(Clone, Builder)] 4 + #[builder(try_setter, setter(into))] 5 + pub struct AddRoleToMember { 6 + pub guild_id: String, 7 + pub user_id: String, 8 + pub role_id: String, 9 + } 10 + 11 + #[derive(Clone, Builder)] 12 + #[builder(try_setter, setter(into))] 13 + pub struct RemoveRoleFromMember { 14 + pub guild_id: String, 15 + pub user_id: String, 16 + pub role_id: String, 17 + } 18 + 19 + #[derive(Clone, Builder)] 20 + #[builder(try_setter, setter(into))] 21 + pub struct CreateRole { 22 + pub guild_id: String, 23 + 24 + pub name: String, 25 + pub color: u32, 26 + pub permission: String, 27 + } 28 + 29 + #[derive(Clone, Builder)] 30 + #[builder(try_setter, setter(into))] 31 + pub struct DeleteRole { 32 + pub guild_id: String, 33 + pub role_id: String, 34 + }
+4
src/gateway/data_structure.rs
··· 1 + pub mod guild; 2 + pub mod message; 3 + pub mod common; 4 + pub mod user;
+52
src/gateway/data_structure/guild.rs
··· 1 + use crate::gateway::data_structure::common::{ 2 + ChannelData, EmojiData, GuildPropertiesData, MemberData, RoleData, 3 + }; 4 + use serde::Deserialize; 5 + use serde_json::Value; 6 + 7 + #[derive(Deserialize)] 8 + pub struct GuildDeleteData { 9 + #[serde(rename = "id")] 10 + pub guild_id: String, 11 + pub unavailable: bool, 12 + } 13 + 14 + #[derive(Deserialize)] 15 + pub struct GuildCreateData { 16 + pub channels: Vec<ChannelData>, 17 + pub emojis: Vec<Value>, 18 + pub id: String, 19 + pub joined_at: String, 20 + pub member_count: i64, 21 + pub members: Vec<MemberData>, 22 + pub online_count: i64, 23 + pub presences: Vec<Value>, 24 + pub properties: GuildPropertiesData, 25 + pub roles: Vec<RoleData>, 26 + pub stickers: Vec<Value>, 27 + pub voice_states: Vec<Value>, 28 + } 29 + 30 + #[derive(Deserialize, Debug)] 31 + pub struct GuildEmojisUpdateData { 32 + pub guild_id: String, 33 + pub emojis: Vec<EmojiData>, 34 + } 35 + 36 + #[derive(Deserialize, Debug)] 37 + pub struct GuildRoleCreateData { 38 + pub guild_id: String, 39 + pub role: RoleData, 40 + } 41 + 42 + #[derive(Deserialize, Debug)] 43 + pub struct GuildRoleUpdateBulkData { 44 + pub guild_id: String, 45 + pub roles: Vec<RoleData>, 46 + } 47 + 48 + #[derive(Deserialize, Debug)] 49 + pub struct GuildRoleDeleteData { 50 + pub guild_id: String, 51 + pub role_id: String, 52 + }
+228
src/gateway/op_handlers/dispatch.rs
··· 1 + use async_trait::async_trait; 2 + use log::info; 3 + 4 + use crate::gateway::data_structure::common::{ChannelData, GuildPropertiesData, MemberData}; 5 + use crate::gateway::data_structure::guild::{ 6 + GuildEmojisUpdateData, GuildRoleCreateData, GuildRoleDeleteData, GuildRoleUpdateBulkData, 7 + }; 8 + use crate::gateway::data_structure::message::MessageReactData; 9 + use crate::gateway::data_structure::user::ReadyData; 10 + use crate::gateway::data_structure::user::SessionReplaceData; 11 + use crate::gateway::data_structure::{ 12 + guild::{GuildCreateData, GuildDeleteData}, 13 + message::{MessageEventData, TypingEventData}, 14 + }; 15 + 16 + pub enum DispatchEvent { 17 + Ready(Box<ReadyData>), 18 + GuildDelete(GuildDeleteData), 19 + GuildCreate(Box<GuildCreateData>), 20 + GuildUpdate(GuildPropertiesData), 21 + GuildEmojisUpdate(GuildEmojisUpdateData), 22 + GuildRoleCreate(GuildRoleCreateData), 23 + GuildRoleUpdate(GuildRoleCreateData), 24 + GuildRoleUpdateBulk(GuildRoleUpdateBulkData), 25 + GuildRoleDelete(GuildRoleDeleteData), 26 + GuildMemberUpdate(MemberData), 27 + MessageCreate(MessageEventData), 28 + MessageDelete(MessageEventData), 29 + MessageUpdate(MessageEventData), 30 + TypingStart(TypingEventData), 31 + TypingStop(TypingEventData), 32 + MessageReactionAdd(MessageReactData), 33 + MessageReactionRemove(MessageReactData), 34 + MessageReactionRemoveEmoji(MessageReactData), 35 + SessionReplace(Vec<SessionReplaceData>), 36 + ChannelUpdate(ChannelData), 37 + } 38 + 39 + pub trait DispatchHandlerTrait { 40 + fn handle_ready_dispatch(&self, _data: Box<ReadyData>) -> impl Future<Output = ()> + Send { 41 + async move { info!("-> [DISPATCH::READY]") } 42 + } 43 + 44 + fn handle_guild_delete_dispatch( 45 + &self, 46 + _data: GuildDeleteData, 47 + ) -> impl Future<Output = ()> + Send { 48 + async move { info!("-> [DISPATCH::GUILD_DELETE]") } 49 + } 50 + 51 + fn handle_guild_create_dispatch( 52 + &self, 53 + _data: Box<GuildCreateData>, 54 + ) -> impl Future<Output = ()> + Send { 55 + async move { info!("-> [DISPATCH::GUILD_CREATE]") } 56 + } 57 + 58 + fn handle_guild_update_dispatch( 59 + &self, 60 + _data: GuildPropertiesData, 61 + ) -> impl Future<Output = ()> + Send { 62 + async move { info!("-> [DISPATCH::GUILD_UPDATE]") } 63 + } 64 + 65 + fn handle_guild_emojis_update_dispatch( 66 + &self, 67 + _data: GuildEmojisUpdateData, 68 + ) -> impl Future<Output = ()> + Send { 69 + async move { info!("-> [DISPATCH::GUILD_EMOJIS_UPDATE]") } 70 + } 71 + 72 + fn handle_guild_role_create_dispatch( 73 + &self, 74 + _data: GuildRoleCreateData, 75 + ) -> impl Future<Output = ()> + Send { 76 + async move { info!("-> [DISPATCH::GUILD_ROLE_CREATE]") } 77 + } 78 + 79 + fn handle_guild_role_update_dispatch( 80 + &self, 81 + _data: GuildRoleCreateData, 82 + ) -> impl Future<Output = ()> + Send { 83 + async move { info!("-> [DISPATCH::GUILD_ROLE_UPDATE]") } 84 + } 85 + 86 + fn handle_guild_role_update_bulk_dispatch( 87 + &self, 88 + _data: GuildRoleUpdateBulkData, 89 + ) -> impl Future<Output = ()> + Send { 90 + async move { info!("-> [DISPATCH::GUILD_ROLE_UPDATE_BULK]") } 91 + } 92 + 93 + fn handle_guild_role_delete_dispatch( 94 + &self, 95 + _data: GuildRoleDeleteData, 96 + ) -> impl Future<Output = ()> + Send { 97 + async move { info!("-> [DISPATCH::GUILD_ROLE_DELETE]") } 98 + } 99 + 100 + fn handle_guild_member_update_dispatch( 101 + &self, 102 + _data: MemberData, 103 + ) -> impl Future<Output = ()> + Send { 104 + async move { info!("-> [DISPATCH::GUILD_MEMBER_UPDATE]") } 105 + } 106 + 107 + fn handle_message_create_dispatch( 108 + &self, 109 + _data: MessageEventData, 110 + ) -> impl Future<Output = ()> + Send { 111 + async move { info!("-> [DISPATCH::MESSAGE_CREATE]") } 112 + } 113 + 114 + fn handle_message_delete_dispatch( 115 + &self, 116 + _data: MessageEventData, 117 + ) -> impl Future<Output = ()> + Send { 118 + async move { info!("-> [DISPATCH::MESSAGE_DELETE]") } 119 + } 120 + 121 + fn handle_message_update_dispatch( 122 + &self, 123 + _data: MessageEventData, 124 + ) -> impl Future<Output = ()> + Send { 125 + async move { info!("-> [DISPATCH::MESSAGE_UPDATE]") } 126 + } 127 + 128 + fn handle_typing_start_dispatch( 129 + &self, 130 + _data: TypingEventData, 131 + ) -> impl Future<Output = ()> + Send { 132 + async move { info!("-> [DISPATCH::TYPING_START]") } 133 + } 134 + 135 + fn handle_typing_stop_dispatch( 136 + &self, 137 + _data: TypingEventData, 138 + ) -> impl Future<Output = ()> + Send { 139 + async move { info!("-> [DISPATCH::TYPING_STOP]") } 140 + } 141 + 142 + fn handle_message_reaction_add_dispatch( 143 + &self, 144 + _data: MessageReactData, 145 + ) -> impl Future<Output = ()> + Send { 146 + async move { info!("-> [DISPATCH::MESSAGE_REACTION_ADD]") } 147 + } 148 + 149 + fn handle_message_reaction_remove_dispatch( 150 + &self, 151 + _data: MessageReactData, 152 + ) -> impl Future<Output = ()> + Send { 153 + async move { info!("-> [DISPATCH::MESSAGE_REACTION_REMOVE]") } 154 + } 155 + fn handle_message_reaction_remove_emoji_dispatch( 156 + &self, 157 + _data: MessageReactData, 158 + ) -> impl Future<Output = ()> + Send { 159 + async move { info!("-> [DISPATCH::MESSAGE_REACTION_REMOVE_EMOJI]") } 160 + } 161 + 162 + fn handle_session_replace_dispatch( 163 + &self, 164 + _data: Vec<SessionReplaceData>, 165 + ) -> impl Future<Output = ()> + Send { 166 + async move { info!("-> [DISPATCH::SESSION_REPLACE]",) } 167 + } 168 + 169 + fn handle_channel_update_dispatch( 170 + &self, 171 + _data: ChannelData, 172 + ) -> impl Future<Output = ()> + Send { 173 + async move { info!("-> [DISPATCH::CHANNEL_UPDATE]",) } 174 + } 175 + } 176 + 177 + #[derive(Default)] 178 + pub struct DispatchHandler; 179 + #[async_trait] 180 + impl DispatchHandlerTrait for DispatchHandler {} 181 + 182 + pub async fn handle_dispatch_events<T: DispatchHandlerTrait + Send + Sync + 'static>( 183 + dispatch_event: Box<DispatchEvent>, 184 + handler: &T, 185 + ) { 186 + match *dispatch_event { 187 + DispatchEvent::Ready(data) => handler.handle_ready_dispatch(data).await, 188 + DispatchEvent::GuildDelete(data) => handler.handle_guild_delete_dispatch(data).await, 189 + DispatchEvent::GuildCreate(data) => handler.handle_guild_create_dispatch(data).await, 190 + DispatchEvent::GuildUpdate(data) => handler.handle_guild_update_dispatch(data).await, 191 + DispatchEvent::GuildEmojisUpdate(data) => { 192 + handler.handle_guild_emojis_update_dispatch(data).await 193 + } 194 + DispatchEvent::GuildRoleCreate(data) => { 195 + handler.handle_guild_role_create_dispatch(data).await 196 + } 197 + DispatchEvent::GuildRoleUpdate(data) => { 198 + handler.handle_guild_role_update_dispatch(data).await 199 + } 200 + DispatchEvent::GuildRoleUpdateBulk(data) => { 201 + handler.handle_guild_role_update_bulk_dispatch(data).await 202 + } 203 + DispatchEvent::GuildRoleDelete(data) => { 204 + handler.handle_guild_role_delete_dispatch(data).await 205 + } 206 + DispatchEvent::GuildMemberUpdate(data) => { 207 + handler.handle_guild_member_update_dispatch(data).await 208 + } 209 + DispatchEvent::MessageCreate(data) => handler.handle_message_create_dispatch(data).await, 210 + DispatchEvent::MessageDelete(data) => handler.handle_message_delete_dispatch(data).await, 211 + DispatchEvent::MessageUpdate(data) => handler.handle_message_update_dispatch(data).await, 212 + DispatchEvent::MessageReactionRemoveEmoji(data) => { 213 + handler 214 + .handle_message_reaction_remove_emoji_dispatch(data) 215 + .await 216 + } 217 + DispatchEvent::TypingStart(data) => handler.handle_typing_start_dispatch(data).await, 218 + DispatchEvent::TypingStop(data) => handler.handle_typing_stop_dispatch(data).await, 219 + DispatchEvent::MessageReactionAdd(data) => { 220 + handler.handle_message_reaction_add_dispatch(data).await 221 + } 222 + DispatchEvent::MessageReactionRemove(data) => { 223 + handler.handle_message_reaction_remove_dispatch(data).await 224 + } 225 + DispatchEvent::SessionReplace(data) => handler.handle_session_replace_dispatch(data).await, 226 + DispatchEvent::ChannelUpdate(data) => handler.handle_channel_update_dispatch(data).await, 227 + } 228 + }
+2
src/gateway/serde.rs
··· 1 + pub mod deserialize; 2 + pub mod serialize;
+139
src/gateway/serde/deserialize.rs
··· 1 + #[cfg(not(debug_assertions))] 2 + use log::{error, info}; 3 + use serde::{Deserialize, Serialize, de}; 4 + use serde_json::Value; 5 + 6 + use crate::gateway::data_structure::common::{ChannelData, GuildPropertiesData, MemberData}; 7 + use crate::gateway::data_structure::guild::{ 8 + GuildEmojisUpdateData, GuildRoleCreateData, GuildRoleDeleteData, GuildRoleUpdateBulkData, 9 + }; 10 + use crate::gateway::data_structure::message::MessageReactData; 11 + use crate::gateway::data_structure::user::ReadyData; 12 + use crate::gateway::data_structure::user::SessionReplaceData; 13 + use crate::gateway::{ 14 + data_structure::{ 15 + guild::{GuildCreateData, GuildDeleteData}, 16 + message::{MessageEventData, TypingEventData}, 17 + }, 18 + op_handlers::dispatch::DispatchEvent, 19 + }; 20 + 21 + pub struct ReceiveData { 22 + pub d: ReceiveDataType, 23 + pub op: u8, 24 + } 25 + 26 + pub enum ReceiveDataType { 27 + OP0(Box<DispatchEvent>), 28 + OP1(Option<u32>), 29 + OP9(bool), 30 + OP10(OP10D), 31 + OP11, 32 + } 33 + 34 + #[derive(Serialize, Deserialize)] 35 + pub struct OP10D { 36 + pub heartbeat_interval: u32, 37 + } 38 + 39 + impl<'de> Deserialize<'de> for ReceiveData { 40 + fn deserialize<D: de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> { 41 + let value = Value::deserialize(deserializer)?; 42 + let op = value["op"] 43 + .as_u64() 44 + .ok_or_else(|| de::Error::missing_field("op"))? as u8; 45 + 46 + let d = match op { 47 + 0 => { 48 + let dispatch_event = match value["t"].as_str().unwrap() { 49 + "READY" => DispatchEvent::Ready(Box::new( 50 + ReadyData::deserialize(&value["d"]).map_err(de::Error::custom)?, 51 + )), 52 + "GUILD_DELETE" => DispatchEvent::GuildDelete( 53 + GuildDeleteData::deserialize(&value["d"]).map_err(de::Error::custom)?, 54 + ), 55 + "GUILD_CREATE" => DispatchEvent::GuildCreate(Box::new( 56 + GuildCreateData::deserialize(&value["d"]).map_err(de::Error::custom)?, 57 + )), 58 + "GUILD_UPDATE" => DispatchEvent::GuildUpdate( 59 + GuildPropertiesData::deserialize(&value["d"]).map_err(de::Error::custom)?, 60 + ), 61 + "GUILD_EMOJIS_UPDATE" => DispatchEvent::GuildEmojisUpdate( 62 + GuildEmojisUpdateData::deserialize(&value["d"]) 63 + .map_err(de::Error::custom)?, 64 + ), 65 + "GUILD_ROLE_CREATE" => DispatchEvent::GuildRoleCreate( 66 + GuildRoleCreateData::deserialize(&value["d"]).map_err(de::Error::custom)?, 67 + ), 68 + "GUILD_ROLE_UPDATE" => DispatchEvent::GuildRoleUpdate( 69 + GuildRoleCreateData::deserialize(&value["d"]).map_err(de::Error::custom)?, 70 + ), 71 + "GUILD_ROLE_UPDATE_BULK" => DispatchEvent::GuildRoleUpdateBulk( 72 + GuildRoleUpdateBulkData::deserialize(&value["d"]) 73 + .map_err(de::Error::custom)?, 74 + ), 75 + "GUILD_ROLE_DELETE" => DispatchEvent::GuildRoleDelete( 76 + GuildRoleDeleteData::deserialize(&value["d"]).map_err(de::Error::custom)?, 77 + ), 78 + "GUILD_MEMBER_UPDATE" => DispatchEvent::GuildMemberUpdate( 79 + MemberData::deserialize(&value["d"]).map_err(de::Error::custom)?, 80 + ), 81 + "MESSAGE_CREATE" => DispatchEvent::MessageCreate( 82 + MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 83 + ), 84 + "MESSAGE_DELETE" => DispatchEvent::MessageDelete( 85 + MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 86 + ), 87 + "MESSAGE_UPDATE" => DispatchEvent::MessageUpdate( 88 + MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 89 + ), 90 + "TYPING_START" => DispatchEvent::TypingStart( 91 + TypingEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 92 + ), 93 + "TYPING_STOP" => DispatchEvent::TypingStop( 94 + TypingEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 95 + ), 96 + "MESSAGE_REACTION_ADD" => DispatchEvent::MessageReactionAdd( 97 + MessageReactData::deserialize(&value["d"]).map_err(de::Error::custom)?, 98 + ), 99 + "MESSAGE_REACTION_REMOVE" => DispatchEvent::MessageReactionRemove( 100 + MessageReactData::deserialize(&value["d"]).map_err(de::Error::custom)?, 101 + ), 102 + "MESSAGE_REACTION_REMOVE_EMOJI" => DispatchEvent::MessageReactionRemoveEmoji( 103 + MessageReactData::deserialize(&value["d"]).map_err(de::Error::custom)?, 104 + ), 105 + "SESSIONS_REPLACE" => DispatchEvent::SessionReplace( 106 + Vec::<SessionReplaceData>::deserialize(&value["d"]) 107 + .map_err(de::Error::custom)?, 108 + ), 109 + "CHANNEL_UPDATE" => DispatchEvent::ChannelUpdate( 110 + ChannelData::deserialize(&value["d"]).map_err(de::Error::custom)?, 111 + ), 112 + #[cfg(not(debug_assertions))] 113 + _ => error!("Unimplemented dispatch event: {}", value), 114 + 115 + #[cfg(debug_assertions)] 116 + _ => panic!("Unimplemented dispatch event: {}", value), 117 + }; 118 + ReceiveDataType::OP0(Box::new(dispatch_event)) 119 + } 120 + 1 => { 121 + let inner: Option<u32> = 122 + Option::deserialize(&value["d"]).map_err(de::Error::custom)?; 123 + ReceiveDataType::OP1(inner) 124 + } 125 + 9 => { 126 + let inner = bool::deserialize(&value["d"]).map_err(de::Error::custom)?; 127 + ReceiveDataType::OP9(inner) 128 + } 129 + 10 => { 130 + let inner = OP10D::deserialize(&value["d"]).map_err(de::Error::custom)?; 131 + ReceiveDataType::OP10(inner) 132 + } 133 + 11 => ReceiveDataType::OP11, 134 + _ => return Err(de::Error::custom(format!("unknown op: {}", op))), 135 + }; 136 + 137 + Ok(ReceiveData { d, op }) 138 + } 139 + }
+1
src/high_level.rs
··· 1 + pub mod command_handler;
+60
src/high_level/command_handler.rs
··· 1 + use std::{collections::HashMap, pin::Pin}; 2 + 3 + use log::info; 4 + 5 + use crate::gateway::data_structure::message::MessageEventData; 6 + 7 + pub type Command = Box<dyn BoxedCommandTrait + Send + Sync>; 8 + 9 + pub trait CommandTrait: Send + Sync + 'static { 10 + fn execute(&self) -> impl Future<Output = ()> + Send; 11 + } 12 + 13 + pub trait BoxedCommandTrait { 14 + fn execute(&self) -> Pin<Box<dyn Future<Output = ()> + Send + '_>>; 15 + } 16 + 17 + impl<C: CommandTrait> BoxedCommandTrait for C { 18 + fn execute(&self) -> Pin<Box<dyn Future<Output = ()> + Send + '_>> { 19 + Box::pin(CommandTrait::execute(self)) 20 + } 21 + } 22 + 23 + pub struct CommandHandler { 24 + prefix: String, 25 + map: HashMap<String, Command>, 26 + } 27 + 28 + impl CommandHandler { 29 + pub fn init(prefix: String) -> Self { 30 + CommandHandler { 31 + prefix, 32 + map: HashMap::new(), 33 + } 34 + } 35 + 36 + pub fn register_command(&mut self, command_name: String, handler: impl CommandTrait + 'static) { 37 + self.map.insert(command_name, Box::new(handler)); 38 + } 39 + 40 + pub async fn handle(&self, data: &MessageEventData) { 41 + let msg_no_pfx = Self::remove_pfx(&self.prefix, &data.content).await; 42 + if let Some((command, _)) = msg_no_pfx { 43 + match self.map.get(&command) { 44 + Some(handler) => handler.execute().await, 45 + None => info!("Unknown command"), 46 + } 47 + } 48 + } 49 + 50 + pub async fn remove_pfx(prefix: &str, content: &str) -> Option<(String, String)> { 51 + #[allow(clippy::manual_map)] 52 + match content.split_once(prefix) { 53 + Some(content) => match content.1.split_once(" ") { 54 + Some((command, body)) => Some((command.to_string(), body.to_string())), 55 + None => Some((content.1.to_string(), "".to_string())), 56 + }, 57 + None => None, 58 + } 59 + } 60 + }
+5
src/lib.rs
··· 1 + pub mod gateway; 2 + pub mod fluxerbot; 3 + pub mod api; 4 + pub mod high_level; 5 + pub use crate::api::data_structure::embed::*;
-14
src/main.rs
··· 1 - use fluxer_rs::fluxerbot::FluxerBot; 2 - use fluxer_rs::gateway::op_handlers::dispatch::DispatchHandler; 3 - 4 - #[tokio::main] 5 - async fn main() { 6 - env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); 7 - 8 - FluxerBot::start( 9 - "".to_string(), 10 - "wss://gateway.fluxer.app?v=1&encoding=json&compress=none".to_string(), 11 - DispatchHandler, 12 - ) 13 - .await; 14 - }