├── .env.sample ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md └── src ├── config.rs ├── controllers ├── handlers │ ├── mod.rs │ └── raids.rs └── mod.rs ├── core ├── beta_users │ ├── mod.rs │ └── queries.rs ├── db.rs ├── discord │ ├── apis.rs │ ├── bot.rs │ └── mod.rs ├── mod.rs ├── points_calc │ ├── calc.rs │ └── mod.rs ├── staking_raids │ ├── mod.rs │ └── queries.rs ├── staking_raids_user │ ├── mod.rs │ └── queries.rs └── xapis │ ├── following_users.rs │ ├── liking_users.rs │ ├── mod.rs │ ├── replying_users.rs │ └── retweeted_users.rs ├── env.rs ├── lib.rs ├── main.rs └── server.rs /.env.sample: -------------------------------------------------------------------------------- 1 | DATABASE_URL= 2 | APPLICATION_HOST= 3 | PORT= 4 | POSTGRES_HOST= 5 | POSTGRES_PORT= 6 | POSTGRES_USER= 7 | POSTGRES_PASSWORD= 8 | POSTGRES_DATABASE= 9 | RAPID_X_API_KEY= 10 | RAPID_GLAVIER_X_API_HOST= 11 | RAPID_DAVETHEBEAST_X_API_HOST 12 | NATIVE_X_API_KEY= 13 | NATIVE_X_BEARER_TOKEN= 14 | DISCORD_TOKEN= -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .env 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "actix-codec" 7 | version = "0.5.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" 10 | dependencies = [ 11 | "bitflags 2.6.0", 12 | "bytes", 13 | "futures-core", 14 | "futures-sink", 15 | "memchr", 16 | "pin-project-lite", 17 | "tokio", 18 | "tokio-util", 19 | "tracing", 20 | ] 21 | 22 | [[package]] 23 | name = "actix-http" 24 | version = "3.9.0" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" 27 | dependencies = [ 28 | "actix-codec", 29 | "actix-rt", 30 | "actix-service", 31 | "actix-utils", 32 | "ahash 0.8.11", 33 | "base64 0.22.1", 34 | "bitflags 2.6.0", 35 | "brotli", 36 | "bytes", 37 | "bytestring", 38 | "derive_more", 39 | "encoding_rs", 40 | "flate2", 41 | "futures-core", 42 | "h2", 43 | "http 0.2.12", 44 | "httparse", 45 | "httpdate", 46 | "itoa", 47 | "language-tags", 48 | "local-channel", 49 | "mime", 50 | "percent-encoding", 51 | "pin-project-lite", 52 | "rand", 53 | "sha1", 54 | "smallvec", 55 | "tokio", 56 | "tokio-util", 57 | "tracing", 58 | "zstd", 59 | ] 60 | 61 | [[package]] 62 | name = "actix-macros" 63 | version = "0.2.4" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" 66 | dependencies = [ 67 | "quote", 68 | "syn 2.0.79", 69 | ] 70 | 71 | [[package]] 72 | name = "actix-multipart" 73 | version = "0.6.2" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "d974dd6c4f78d102d057c672dcf6faa618fafa9df91d44f9c466688fc1275a3a" 76 | dependencies = [ 77 | "actix-multipart-derive", 78 | "actix-utils", 79 | "actix-web", 80 | "bytes", 81 | "derive_more", 82 | "futures-core", 83 | "futures-util", 84 | "httparse", 85 | "local-waker", 86 | "log", 87 | "memchr", 88 | "mime", 89 | "rand", 90 | "serde", 91 | "serde_json", 92 | "serde_plain", 93 | "tempfile", 94 | "tokio", 95 | ] 96 | 97 | [[package]] 98 | name = "actix-multipart-derive" 99 | version = "0.6.1" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "0a0a77f836d869f700e5b47ac7c3c8b9c8bc82e4aec861954c6198abee3ebd4d" 102 | dependencies = [ 103 | "darling", 104 | "parse-size", 105 | "proc-macro2", 106 | "quote", 107 | "syn 2.0.79", 108 | ] 109 | 110 | [[package]] 111 | name = "actix-router" 112 | version = "0.5.3" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" 115 | dependencies = [ 116 | "bytestring", 117 | "cfg-if", 118 | "http 0.2.12", 119 | "regex", 120 | "regex-lite", 121 | "serde", 122 | "tracing", 123 | ] 124 | 125 | [[package]] 126 | name = "actix-rt" 127 | version = "2.10.0" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" 130 | dependencies = [ 131 | "futures-core", 132 | "tokio", 133 | ] 134 | 135 | [[package]] 136 | name = "actix-server" 137 | version = "2.5.0" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" 140 | dependencies = [ 141 | "actix-rt", 142 | "actix-service", 143 | "actix-utils", 144 | "futures-core", 145 | "futures-util", 146 | "mio", 147 | "socket2", 148 | "tokio", 149 | "tracing", 150 | ] 151 | 152 | [[package]] 153 | name = "actix-service" 154 | version = "2.0.2" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" 157 | dependencies = [ 158 | "futures-core", 159 | "paste", 160 | "pin-project-lite", 161 | ] 162 | 163 | [[package]] 164 | name = "actix-utils" 165 | version = "3.0.1" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" 168 | dependencies = [ 169 | "local-waker", 170 | "pin-project-lite", 171 | ] 172 | 173 | [[package]] 174 | name = "actix-web" 175 | version = "4.9.0" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" 178 | dependencies = [ 179 | "actix-codec", 180 | "actix-http", 181 | "actix-macros", 182 | "actix-router", 183 | "actix-rt", 184 | "actix-server", 185 | "actix-service", 186 | "actix-utils", 187 | "actix-web-codegen", 188 | "ahash 0.8.11", 189 | "bytes", 190 | "bytestring", 191 | "cfg-if", 192 | "cookie", 193 | "derive_more", 194 | "encoding_rs", 195 | "futures-core", 196 | "futures-util", 197 | "impl-more", 198 | "itoa", 199 | "language-tags", 200 | "log", 201 | "mime", 202 | "once_cell", 203 | "pin-project-lite", 204 | "regex", 205 | "regex-lite", 206 | "serde", 207 | "serde_json", 208 | "serde_urlencoded", 209 | "smallvec", 210 | "socket2", 211 | "time", 212 | "url", 213 | ] 214 | 215 | [[package]] 216 | name = "actix-web-codegen" 217 | version = "4.3.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" 220 | dependencies = [ 221 | "actix-router", 222 | "proc-macro2", 223 | "quote", 224 | "syn 2.0.79", 225 | ] 226 | 227 | [[package]] 228 | name = "addr2line" 229 | version = "0.24.2" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 232 | dependencies = [ 233 | "gimli", 234 | ] 235 | 236 | [[package]] 237 | name = "adler2" 238 | version = "2.0.0" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 241 | 242 | [[package]] 243 | name = "ahash" 244 | version = "0.7.8" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" 247 | dependencies = [ 248 | "getrandom", 249 | "once_cell", 250 | "version_check", 251 | ] 252 | 253 | [[package]] 254 | name = "ahash" 255 | version = "0.8.11" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 258 | dependencies = [ 259 | "cfg-if", 260 | "getrandom", 261 | "once_cell", 262 | "version_check", 263 | "zerocopy", 264 | ] 265 | 266 | [[package]] 267 | name = "aho-corasick" 268 | version = "1.1.3" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 271 | dependencies = [ 272 | "memchr", 273 | ] 274 | 275 | [[package]] 276 | name = "alloc-no-stdlib" 277 | version = "2.0.4" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 280 | 281 | [[package]] 282 | name = "alloc-stdlib" 283 | version = "0.2.2" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 286 | dependencies = [ 287 | "alloc-no-stdlib", 288 | ] 289 | 290 | [[package]] 291 | name = "allocator-api2" 292 | version = "0.2.18" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 295 | 296 | [[package]] 297 | name = "android-tzdata" 298 | version = "0.1.1" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 301 | 302 | [[package]] 303 | name = "android_system_properties" 304 | version = "0.1.5" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 307 | dependencies = [ 308 | "libc", 309 | ] 310 | 311 | [[package]] 312 | name = "anyhow" 313 | version = "1.0.89" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" 316 | 317 | [[package]] 318 | name = "apistos" 319 | version = "0.2.6" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "a30d932d9cc7f7fab17da9639ded2c81528a07eeb442c4b337cf5858b6ca4cab" 322 | dependencies = [ 323 | "actix-service", 324 | "actix-web", 325 | "apistos-core", 326 | "apistos-gen", 327 | "apistos-models", 328 | "apistos-plugins", 329 | "apistos-scalar", 330 | "apistos-schemars", 331 | "apistos-swagger-ui", 332 | "indexmap", 333 | "log", 334 | "md5", 335 | "once_cell", 336 | "regex", 337 | "serde", 338 | "serde_json", 339 | ] 340 | 341 | [[package]] 342 | name = "apistos-core" 343 | version = "0.2.6" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "44c1ba759f64d7e1004a966435fa6873d956fd3c85deacdd8fe59c88bb953943" 346 | dependencies = [ 347 | "actix-multipart", 348 | "actix-web", 349 | "apistos-models", 350 | "apistos-schemars", 351 | "chrono", 352 | "garde-actix-web", 353 | "pin-project", 354 | "rust_decimal", 355 | "serde", 356 | "serde_qs", 357 | "url", 358 | "uuid", 359 | ] 360 | 361 | [[package]] 362 | name = "apistos-gen" 363 | version = "0.2.6" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "a1591cc2b3d5fb878a080e174fb59868c705db491181ce64a386f13d1d3fbf3f" 366 | dependencies = [ 367 | "actix-web", 368 | "convert_case 0.6.0", 369 | "darling", 370 | "proc-macro-error", 371 | "proc-macro2", 372 | "quote", 373 | "syn 2.0.79", 374 | ] 375 | 376 | [[package]] 377 | name = "apistos-models" 378 | version = "0.2.6" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "7b39462e59033dbe05818054f48c4bec943101941e0675e1bc534170a2538482" 381 | dependencies = [ 382 | "apistos-schemars", 383 | "indexmap", 384 | "serde", 385 | "serde_json", 386 | ] 387 | 388 | [[package]] 389 | name = "apistos-plugins" 390 | version = "0.2.6" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "a2d5cb7847592bbfada7c90d545369965ebc08f70380cadbf2da04f55f8ca206" 393 | dependencies = [ 394 | "actix-web", 395 | ] 396 | 397 | [[package]] 398 | name = "apistos-scalar" 399 | version = "0.2.6" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | checksum = "599698afb129f8e4c33e0d719c45b5d87d48c872b6797f2ffeb7830f50a058cc" 402 | dependencies = [ 403 | "apistos-plugins", 404 | ] 405 | 406 | [[package]] 407 | name = "apistos-schemars" 408 | version = "0.8.21" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "f75d3c533a415ba9bbedf67bd837f4fc895d1fccd3da3ed7441a6310ac4f1e56" 411 | dependencies = [ 412 | "apistos-schemars_derive", 413 | "chrono", 414 | "dyn-clone", 415 | "rust_decimal", 416 | "serde", 417 | "serde_json", 418 | "url", 419 | "uuid", 420 | ] 421 | 422 | [[package]] 423 | name = "apistos-schemars_derive" 424 | version = "0.8.21" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "6628c03331322ef9a48f4dea21d01cb32832a03fc0ed57f56cf062ee47cd0fdf" 427 | dependencies = [ 428 | "proc-macro2", 429 | "quote", 430 | "serde_derive_internals", 431 | "syn 2.0.79", 432 | ] 433 | 434 | [[package]] 435 | name = "apistos-swagger-ui" 436 | version = "0.2.6" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "54e3dd06449efa0b920b3e04c77a599045ab24cea89f46dec0322125adc4180e" 439 | dependencies = [ 440 | "apistos-plugins", 441 | ] 442 | 443 | [[package]] 444 | name = "arrayvec" 445 | version = "0.7.6" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 448 | dependencies = [ 449 | "serde", 450 | ] 451 | 452 | [[package]] 453 | name = "async-trait" 454 | version = "0.1.83" 455 | source = "registry+https://github.com/rust-lang/crates.io-index" 456 | checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" 457 | dependencies = [ 458 | "proc-macro2", 459 | "quote", 460 | "syn 2.0.79", 461 | ] 462 | 463 | [[package]] 464 | name = "atoi" 465 | version = "2.0.0" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 468 | dependencies = [ 469 | "num-traits", 470 | ] 471 | 472 | [[package]] 473 | name = "autocfg" 474 | version = "1.4.0" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 477 | 478 | [[package]] 479 | name = "backtrace" 480 | version = "0.3.74" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 483 | dependencies = [ 484 | "addr2line", 485 | "cfg-if", 486 | "libc", 487 | "miniz_oxide", 488 | "object", 489 | "rustc-demangle", 490 | "windows-targets 0.52.6", 491 | ] 492 | 493 | [[package]] 494 | name = "base64" 495 | version = "0.21.7" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 498 | 499 | [[package]] 500 | name = "base64" 501 | version = "0.22.1" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 504 | 505 | [[package]] 506 | name = "base64ct" 507 | version = "1.6.0" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" 510 | 511 | [[package]] 512 | name = "bigdecimal" 513 | version = "0.3.1" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" 516 | dependencies = [ 517 | "num-bigint", 518 | "num-integer", 519 | "num-traits", 520 | "serde", 521 | ] 522 | 523 | [[package]] 524 | name = "bitflags" 525 | version = "1.3.2" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 528 | 529 | [[package]] 530 | name = "bitflags" 531 | version = "2.6.0" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 534 | dependencies = [ 535 | "serde", 536 | ] 537 | 538 | [[package]] 539 | name = "bitvec" 540 | version = "1.0.1" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 543 | dependencies = [ 544 | "funty", 545 | "radium", 546 | "tap", 547 | "wyz", 548 | ] 549 | 550 | [[package]] 551 | name = "block-buffer" 552 | version = "0.10.4" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 555 | dependencies = [ 556 | "generic-array", 557 | ] 558 | 559 | [[package]] 560 | name = "borsh" 561 | version = "1.5.1" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" 564 | dependencies = [ 565 | "borsh-derive", 566 | "cfg_aliases", 567 | ] 568 | 569 | [[package]] 570 | name = "borsh-derive" 571 | version = "1.5.1" 572 | source = "registry+https://github.com/rust-lang/crates.io-index" 573 | checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" 574 | dependencies = [ 575 | "once_cell", 576 | "proc-macro-crate", 577 | "proc-macro2", 578 | "quote", 579 | "syn 2.0.79", 580 | "syn_derive", 581 | ] 582 | 583 | [[package]] 584 | name = "brotli" 585 | version = "6.0.0" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" 588 | dependencies = [ 589 | "alloc-no-stdlib", 590 | "alloc-stdlib", 591 | "brotli-decompressor", 592 | ] 593 | 594 | [[package]] 595 | name = "brotli-decompressor" 596 | version = "4.0.1" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" 599 | dependencies = [ 600 | "alloc-no-stdlib", 601 | "alloc-stdlib", 602 | ] 603 | 604 | [[package]] 605 | name = "bumpalo" 606 | version = "3.16.0" 607 | source = "registry+https://github.com/rust-lang/crates.io-index" 608 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 609 | 610 | [[package]] 611 | name = "bytecheck" 612 | version = "0.6.12" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" 615 | dependencies = [ 616 | "bytecheck_derive", 617 | "ptr_meta", 618 | "simdutf8", 619 | ] 620 | 621 | [[package]] 622 | name = "bytecheck_derive" 623 | version = "0.6.12" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" 626 | dependencies = [ 627 | "proc-macro2", 628 | "quote", 629 | "syn 1.0.109", 630 | ] 631 | 632 | [[package]] 633 | name = "byteorder" 634 | version = "1.5.0" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 637 | 638 | [[package]] 639 | name = "bytes" 640 | version = "1.7.2" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" 643 | 644 | [[package]] 645 | name = "bytestring" 646 | version = "1.3.1" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" 649 | dependencies = [ 650 | "bytes", 651 | ] 652 | 653 | [[package]] 654 | name = "castaway" 655 | version = "0.2.3" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" 658 | dependencies = [ 659 | "rustversion", 660 | ] 661 | 662 | [[package]] 663 | name = "cc" 664 | version = "1.1.30" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" 667 | dependencies = [ 668 | "jobserver", 669 | "libc", 670 | "shlex", 671 | ] 672 | 673 | [[package]] 674 | name = "cfg-if" 675 | version = "1.0.0" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 678 | 679 | [[package]] 680 | name = "cfg_aliases" 681 | version = "0.2.1" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 684 | 685 | [[package]] 686 | name = "chrono" 687 | version = "0.4.38" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 690 | dependencies = [ 691 | "android-tzdata", 692 | "iana-time-zone", 693 | "js-sys", 694 | "num-traits", 695 | "serde", 696 | "wasm-bindgen", 697 | "windows-targets 0.52.6", 698 | ] 699 | 700 | [[package]] 701 | name = "compact_str" 702 | version = "0.7.1" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" 705 | dependencies = [ 706 | "castaway", 707 | "cfg-if", 708 | "itoa", 709 | "ryu", 710 | "serde", 711 | "static_assertions", 712 | ] 713 | 714 | [[package]] 715 | name = "const-oid" 716 | version = "0.9.6" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 719 | 720 | [[package]] 721 | name = "convert_case" 722 | version = "0.4.0" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 725 | 726 | [[package]] 727 | name = "convert_case" 728 | version = "0.6.0" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" 731 | dependencies = [ 732 | "unicode-segmentation", 733 | ] 734 | 735 | [[package]] 736 | name = "cookie" 737 | version = "0.16.2" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" 740 | dependencies = [ 741 | "percent-encoding", 742 | "time", 743 | "version_check", 744 | ] 745 | 746 | [[package]] 747 | name = "core-foundation" 748 | version = "0.9.4" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 751 | dependencies = [ 752 | "core-foundation-sys", 753 | "libc", 754 | ] 755 | 756 | [[package]] 757 | name = "core-foundation-sys" 758 | version = "0.8.7" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 761 | 762 | [[package]] 763 | name = "cpufeatures" 764 | version = "0.2.14" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" 767 | dependencies = [ 768 | "libc", 769 | ] 770 | 771 | [[package]] 772 | name = "crc" 773 | version = "3.2.1" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" 776 | dependencies = [ 777 | "crc-catalog", 778 | ] 779 | 780 | [[package]] 781 | name = "crc-catalog" 782 | version = "2.4.0" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 785 | 786 | [[package]] 787 | name = "crc32fast" 788 | version = "1.4.2" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 791 | dependencies = [ 792 | "cfg-if", 793 | ] 794 | 795 | [[package]] 796 | name = "crossbeam-queue" 797 | version = "0.3.11" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" 800 | dependencies = [ 801 | "crossbeam-utils", 802 | ] 803 | 804 | [[package]] 805 | name = "crossbeam-utils" 806 | version = "0.8.20" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 809 | 810 | [[package]] 811 | name = "crypto-common" 812 | version = "0.1.6" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 815 | dependencies = [ 816 | "generic-array", 817 | "typenum", 818 | ] 819 | 820 | [[package]] 821 | name = "darling" 822 | version = "0.20.10" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 825 | dependencies = [ 826 | "darling_core", 827 | "darling_macro", 828 | ] 829 | 830 | [[package]] 831 | name = "darling_core" 832 | version = "0.20.10" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 835 | dependencies = [ 836 | "fnv", 837 | "ident_case", 838 | "proc-macro2", 839 | "quote", 840 | "strsim", 841 | "syn 2.0.79", 842 | ] 843 | 844 | [[package]] 845 | name = "darling_macro" 846 | version = "0.20.10" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 849 | dependencies = [ 850 | "darling_core", 851 | "quote", 852 | "syn 2.0.79", 853 | ] 854 | 855 | [[package]] 856 | name = "data-encoding" 857 | version = "2.6.0" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" 860 | 861 | [[package]] 862 | name = "der" 863 | version = "0.7.9" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" 866 | dependencies = [ 867 | "const-oid", 868 | "pem-rfc7468", 869 | "zeroize", 870 | ] 871 | 872 | [[package]] 873 | name = "deranged" 874 | version = "0.3.11" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 877 | dependencies = [ 878 | "powerfmt", 879 | "serde", 880 | ] 881 | 882 | [[package]] 883 | name = "derive_more" 884 | version = "0.99.18" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" 887 | dependencies = [ 888 | "convert_case 0.4.0", 889 | "proc-macro2", 890 | "quote", 891 | "rustc_version", 892 | "syn 2.0.79", 893 | ] 894 | 895 | [[package]] 896 | name = "digest" 897 | version = "0.10.7" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 900 | dependencies = [ 901 | "block-buffer", 902 | "const-oid", 903 | "crypto-common", 904 | "subtle", 905 | ] 906 | 907 | [[package]] 908 | name = "dotenv" 909 | version = "0.15.0" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" 912 | 913 | [[package]] 914 | name = "dotenvy" 915 | version = "0.15.7" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 918 | 919 | [[package]] 920 | name = "dyn-clone" 921 | version = "1.0.17" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" 924 | 925 | [[package]] 926 | name = "either" 927 | version = "1.13.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 930 | dependencies = [ 931 | "serde", 932 | ] 933 | 934 | [[package]] 935 | name = "encoding_rs" 936 | version = "0.8.34" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 939 | dependencies = [ 940 | "cfg-if", 941 | ] 942 | 943 | [[package]] 944 | name = "equivalent" 945 | version = "1.0.1" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 948 | 949 | [[package]] 950 | name = "errno" 951 | version = "0.3.9" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 954 | dependencies = [ 955 | "libc", 956 | "windows-sys 0.52.0", 957 | ] 958 | 959 | [[package]] 960 | name = "etcetera" 961 | version = "0.8.0" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" 964 | dependencies = [ 965 | "cfg-if", 966 | "home", 967 | "windows-sys 0.48.0", 968 | ] 969 | 970 | [[package]] 971 | name = "event-listener" 972 | version = "2.5.3" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 975 | 976 | [[package]] 977 | name = "fastrand" 978 | version = "2.1.1" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 981 | 982 | [[package]] 983 | name = "flate2" 984 | version = "1.0.34" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" 987 | dependencies = [ 988 | "crc32fast", 989 | "miniz_oxide", 990 | ] 991 | 992 | [[package]] 993 | name = "flume" 994 | version = "0.11.0" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" 997 | dependencies = [ 998 | "futures-core", 999 | "futures-sink", 1000 | "spin", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "fnv" 1005 | version = "1.0.7" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1008 | 1009 | [[package]] 1010 | name = "foreign-types" 1011 | version = "0.3.2" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1014 | dependencies = [ 1015 | "foreign-types-shared", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "foreign-types-shared" 1020 | version = "0.1.1" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1023 | 1024 | [[package]] 1025 | name = "form_urlencoded" 1026 | version = "1.2.1" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 1029 | dependencies = [ 1030 | "percent-encoding", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "funty" 1035 | version = "2.0.0" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 1038 | 1039 | [[package]] 1040 | name = "futures" 1041 | version = "0.3.31" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 1044 | dependencies = [ 1045 | "futures-channel", 1046 | "futures-core", 1047 | "futures-executor", 1048 | "futures-io", 1049 | "futures-sink", 1050 | "futures-task", 1051 | "futures-util", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "futures-channel" 1056 | version = "0.3.31" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 1059 | dependencies = [ 1060 | "futures-core", 1061 | "futures-sink", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "futures-core" 1066 | version = "0.3.31" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1069 | 1070 | [[package]] 1071 | name = "futures-executor" 1072 | version = "0.3.31" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 1075 | dependencies = [ 1076 | "futures-core", 1077 | "futures-task", 1078 | "futures-util", 1079 | ] 1080 | 1081 | [[package]] 1082 | name = "futures-intrusive" 1083 | version = "0.5.0" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" 1086 | dependencies = [ 1087 | "futures-core", 1088 | "lock_api", 1089 | "parking_lot", 1090 | ] 1091 | 1092 | [[package]] 1093 | name = "futures-io" 1094 | version = "0.3.31" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1097 | 1098 | [[package]] 1099 | name = "futures-macro" 1100 | version = "0.3.31" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1103 | dependencies = [ 1104 | "proc-macro2", 1105 | "quote", 1106 | "syn 2.0.79", 1107 | ] 1108 | 1109 | [[package]] 1110 | name = "futures-sink" 1111 | version = "0.3.31" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 1114 | 1115 | [[package]] 1116 | name = "futures-task" 1117 | version = "0.3.31" 1118 | source = "registry+https://github.com/rust-lang/crates.io-index" 1119 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1120 | 1121 | [[package]] 1122 | name = "futures-util" 1123 | version = "0.3.31" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1126 | dependencies = [ 1127 | "futures-channel", 1128 | "futures-core", 1129 | "futures-io", 1130 | "futures-macro", 1131 | "futures-sink", 1132 | "futures-task", 1133 | "memchr", 1134 | "pin-project-lite", 1135 | "pin-utils", 1136 | "slab", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "garde" 1141 | version = "0.18.0" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "d5fa8fb3ffe035745c6194540b2064b2fe275f32367fbb4eb026024b7921e2e5" 1144 | dependencies = [ 1145 | "compact_str", 1146 | "garde_derive", 1147 | "serde", 1148 | "smallvec", 1149 | ] 1150 | 1151 | [[package]] 1152 | name = "garde-actix-web" 1153 | version = "0.7.0" 1154 | source = "registry+https://github.com/rust-lang/crates.io-index" 1155 | checksum = "61a38483e932bdc9060f83b65e829904c5855056d9d60106741d2ad8391ed9ff" 1156 | dependencies = [ 1157 | "actix-http", 1158 | "actix-router", 1159 | "actix-web", 1160 | "derive_more", 1161 | "futures", 1162 | "garde", 1163 | "log", 1164 | "mime", 1165 | "pin-project-lite", 1166 | "serde", 1167 | "serde_qs", 1168 | "serde_urlencoded", 1169 | "thiserror", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "garde_derive" 1174 | version = "0.18.0" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "9cf62650515830c41553b72bd49ec20fb120226f9277c7f2847f071cf998325b" 1177 | dependencies = [ 1178 | "proc-macro2", 1179 | "quote", 1180 | "syn 2.0.79", 1181 | ] 1182 | 1183 | [[package]] 1184 | name = "generic-array" 1185 | version = "0.14.7" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 1188 | dependencies = [ 1189 | "typenum", 1190 | "version_check", 1191 | ] 1192 | 1193 | [[package]] 1194 | name = "getrandom" 1195 | version = "0.2.15" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 1198 | dependencies = [ 1199 | "cfg-if", 1200 | "libc", 1201 | "wasi", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "gimli" 1206 | version = "0.31.1" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 1209 | 1210 | [[package]] 1211 | name = "h2" 1212 | version = "0.3.26" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 1215 | dependencies = [ 1216 | "bytes", 1217 | "fnv", 1218 | "futures-core", 1219 | "futures-sink", 1220 | "futures-util", 1221 | "http 0.2.12", 1222 | "indexmap", 1223 | "slab", 1224 | "tokio", 1225 | "tokio-util", 1226 | "tracing", 1227 | ] 1228 | 1229 | [[package]] 1230 | name = "hashbrown" 1231 | version = "0.12.3" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1234 | dependencies = [ 1235 | "ahash 0.7.8", 1236 | ] 1237 | 1238 | [[package]] 1239 | name = "hashbrown" 1240 | version = "0.14.5" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1243 | dependencies = [ 1244 | "ahash 0.8.11", 1245 | "allocator-api2", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "hashbrown" 1250 | version = "0.15.0" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" 1253 | 1254 | [[package]] 1255 | name = "hashlink" 1256 | version = "0.8.4" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" 1259 | dependencies = [ 1260 | "hashbrown 0.14.5", 1261 | ] 1262 | 1263 | [[package]] 1264 | name = "heck" 1265 | version = "0.4.1" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1268 | dependencies = [ 1269 | "unicode-segmentation", 1270 | ] 1271 | 1272 | [[package]] 1273 | name = "hermit-abi" 1274 | version = "0.3.9" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 1277 | 1278 | [[package]] 1279 | name = "hex" 1280 | version = "0.4.3" 1281 | source = "registry+https://github.com/rust-lang/crates.io-index" 1282 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1283 | 1284 | [[package]] 1285 | name = "hkdf" 1286 | version = "0.12.4" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" 1289 | dependencies = [ 1290 | "hmac", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "hmac" 1295 | version = "0.12.1" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1298 | dependencies = [ 1299 | "digest", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "home" 1304 | version = "0.5.9" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" 1307 | dependencies = [ 1308 | "windows-sys 0.52.0", 1309 | ] 1310 | 1311 | [[package]] 1312 | name = "http" 1313 | version = "0.2.12" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1316 | dependencies = [ 1317 | "bytes", 1318 | "fnv", 1319 | "itoa", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "http" 1324 | version = "1.1.0" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 1327 | dependencies = [ 1328 | "bytes", 1329 | "fnv", 1330 | "itoa", 1331 | ] 1332 | 1333 | [[package]] 1334 | name = "http-body" 1335 | version = "0.4.6" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 1338 | dependencies = [ 1339 | "bytes", 1340 | "http 0.2.12", 1341 | "pin-project-lite", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "httparse" 1346 | version = "1.9.5" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 1349 | 1350 | [[package]] 1351 | name = "httpdate" 1352 | version = "1.0.3" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1355 | 1356 | [[package]] 1357 | name = "hyper" 1358 | version = "0.14.31" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" 1361 | dependencies = [ 1362 | "bytes", 1363 | "futures-channel", 1364 | "futures-core", 1365 | "futures-util", 1366 | "h2", 1367 | "http 0.2.12", 1368 | "http-body", 1369 | "httparse", 1370 | "httpdate", 1371 | "itoa", 1372 | "pin-project-lite", 1373 | "socket2", 1374 | "tokio", 1375 | "tower-service", 1376 | "tracing", 1377 | "want", 1378 | ] 1379 | 1380 | [[package]] 1381 | name = "hyper-rustls" 1382 | version = "0.24.2" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" 1385 | dependencies = [ 1386 | "futures-util", 1387 | "http 0.2.12", 1388 | "hyper", 1389 | "rustls 0.21.12", 1390 | "tokio", 1391 | "tokio-rustls 0.24.1", 1392 | ] 1393 | 1394 | [[package]] 1395 | name = "hyper-tls" 1396 | version = "0.5.0" 1397 | source = "registry+https://github.com/rust-lang/crates.io-index" 1398 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 1399 | dependencies = [ 1400 | "bytes", 1401 | "hyper", 1402 | "native-tls", 1403 | "tokio", 1404 | "tokio-native-tls", 1405 | ] 1406 | 1407 | [[package]] 1408 | name = "iana-time-zone" 1409 | version = "0.1.61" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 1412 | dependencies = [ 1413 | "android_system_properties", 1414 | "core-foundation-sys", 1415 | "iana-time-zone-haiku", 1416 | "js-sys", 1417 | "wasm-bindgen", 1418 | "windows-core", 1419 | ] 1420 | 1421 | [[package]] 1422 | name = "iana-time-zone-haiku" 1423 | version = "0.1.2" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1426 | dependencies = [ 1427 | "cc", 1428 | ] 1429 | 1430 | [[package]] 1431 | name = "ident_case" 1432 | version = "1.0.1" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1435 | 1436 | [[package]] 1437 | name = "idna" 1438 | version = "0.5.0" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1441 | dependencies = [ 1442 | "unicode-bidi", 1443 | "unicode-normalization", 1444 | ] 1445 | 1446 | [[package]] 1447 | name = "impl-more" 1448 | version = "0.1.8" 1449 | source = "registry+https://github.com/rust-lang/crates.io-index" 1450 | checksum = "aae21c3177a27788957044151cc2800043d127acaa460a47ebb9b84dfa2c6aa0" 1451 | 1452 | [[package]] 1453 | name = "indexmap" 1454 | version = "2.6.0" 1455 | source = "registry+https://github.com/rust-lang/crates.io-index" 1456 | checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" 1457 | dependencies = [ 1458 | "equivalent", 1459 | "hashbrown 0.15.0", 1460 | "serde", 1461 | ] 1462 | 1463 | [[package]] 1464 | name = "ipnet" 1465 | version = "2.10.1" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" 1468 | 1469 | [[package]] 1470 | name = "itoa" 1471 | version = "1.0.11" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1474 | 1475 | [[package]] 1476 | name = "jobserver" 1477 | version = "0.1.32" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1480 | dependencies = [ 1481 | "libc", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "js-sys" 1486 | version = "0.3.72" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" 1489 | dependencies = [ 1490 | "wasm-bindgen", 1491 | ] 1492 | 1493 | [[package]] 1494 | name = "language-tags" 1495 | version = "0.3.2" 1496 | source = "registry+https://github.com/rust-lang/crates.io-index" 1497 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" 1498 | 1499 | [[package]] 1500 | name = "lazy_static" 1501 | version = "1.5.0" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1504 | dependencies = [ 1505 | "spin", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "libc" 1510 | version = "0.2.160" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | checksum = "f0b21006cd1874ae9e650973c565615676dc4a274c965bb0a73796dac838ce4f" 1513 | 1514 | [[package]] 1515 | name = "libm" 1516 | version = "0.2.8" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" 1519 | 1520 | [[package]] 1521 | name = "libsqlite3-sys" 1522 | version = "0.27.0" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" 1525 | dependencies = [ 1526 | "cc", 1527 | "pkg-config", 1528 | "vcpkg", 1529 | ] 1530 | 1531 | [[package]] 1532 | name = "linux-raw-sys" 1533 | version = "0.4.14" 1534 | source = "registry+https://github.com/rust-lang/crates.io-index" 1535 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1536 | 1537 | [[package]] 1538 | name = "local-channel" 1539 | version = "0.1.5" 1540 | source = "registry+https://github.com/rust-lang/crates.io-index" 1541 | checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" 1542 | dependencies = [ 1543 | "futures-core", 1544 | "futures-sink", 1545 | "local-waker", 1546 | ] 1547 | 1548 | [[package]] 1549 | name = "local-waker" 1550 | version = "0.1.4" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" 1553 | 1554 | [[package]] 1555 | name = "lock_api" 1556 | version = "0.4.12" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1559 | dependencies = [ 1560 | "autocfg", 1561 | "scopeguard", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "log" 1566 | version = "0.4.22" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 1569 | 1570 | [[package]] 1571 | name = "md-5" 1572 | version = "0.10.6" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 1575 | dependencies = [ 1576 | "cfg-if", 1577 | "digest", 1578 | ] 1579 | 1580 | [[package]] 1581 | name = "md5" 1582 | version = "0.7.0" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" 1585 | 1586 | [[package]] 1587 | name = "memchr" 1588 | version = "2.7.4" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1591 | 1592 | [[package]] 1593 | name = "mime" 1594 | version = "0.3.17" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1597 | 1598 | [[package]] 1599 | name = "mime_guess" 1600 | version = "2.0.5" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1603 | dependencies = [ 1604 | "mime", 1605 | "unicase", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "minimal-lexical" 1610 | version = "0.2.1" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1613 | 1614 | [[package]] 1615 | name = "miniz_oxide" 1616 | version = "0.8.0" 1617 | source = "registry+https://github.com/rust-lang/crates.io-index" 1618 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 1619 | dependencies = [ 1620 | "adler2", 1621 | ] 1622 | 1623 | [[package]] 1624 | name = "mio" 1625 | version = "1.0.2" 1626 | source = "registry+https://github.com/rust-lang/crates.io-index" 1627 | checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" 1628 | dependencies = [ 1629 | "hermit-abi", 1630 | "libc", 1631 | "log", 1632 | "wasi", 1633 | "windows-sys 0.52.0", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "native-tls" 1638 | version = "0.2.12" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 1641 | dependencies = [ 1642 | "libc", 1643 | "log", 1644 | "openssl", 1645 | "openssl-probe", 1646 | "openssl-sys", 1647 | "schannel", 1648 | "security-framework", 1649 | "security-framework-sys", 1650 | "tempfile", 1651 | ] 1652 | 1653 | [[package]] 1654 | name = "nom" 1655 | version = "7.1.3" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1658 | dependencies = [ 1659 | "memchr", 1660 | "minimal-lexical", 1661 | ] 1662 | 1663 | [[package]] 1664 | name = "num-bigint" 1665 | version = "0.4.6" 1666 | source = "registry+https://github.com/rust-lang/crates.io-index" 1667 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 1668 | dependencies = [ 1669 | "num-integer", 1670 | "num-traits", 1671 | ] 1672 | 1673 | [[package]] 1674 | name = "num-bigint-dig" 1675 | version = "0.8.4" 1676 | source = "registry+https://github.com/rust-lang/crates.io-index" 1677 | checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 1678 | dependencies = [ 1679 | "byteorder", 1680 | "lazy_static", 1681 | "libm", 1682 | "num-integer", 1683 | "num-iter", 1684 | "num-traits", 1685 | "rand", 1686 | "smallvec", 1687 | "zeroize", 1688 | ] 1689 | 1690 | [[package]] 1691 | name = "num-conv" 1692 | version = "0.1.0" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1695 | 1696 | [[package]] 1697 | name = "num-integer" 1698 | version = "0.1.46" 1699 | source = "registry+https://github.com/rust-lang/crates.io-index" 1700 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1701 | dependencies = [ 1702 | "num-traits", 1703 | ] 1704 | 1705 | [[package]] 1706 | name = "num-iter" 1707 | version = "0.1.45" 1708 | source = "registry+https://github.com/rust-lang/crates.io-index" 1709 | checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 1710 | dependencies = [ 1711 | "autocfg", 1712 | "num-integer", 1713 | "num-traits", 1714 | ] 1715 | 1716 | [[package]] 1717 | name = "num-traits" 1718 | version = "0.2.19" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1721 | dependencies = [ 1722 | "autocfg", 1723 | "libm", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "object" 1728 | version = "0.36.5" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 1731 | dependencies = [ 1732 | "memchr", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "once_cell" 1737 | version = "1.20.2" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1740 | 1741 | [[package]] 1742 | name = "openssl" 1743 | version = "0.10.68" 1744 | source = "registry+https://github.com/rust-lang/crates.io-index" 1745 | checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" 1746 | dependencies = [ 1747 | "bitflags 2.6.0", 1748 | "cfg-if", 1749 | "foreign-types", 1750 | "libc", 1751 | "once_cell", 1752 | "openssl-macros", 1753 | "openssl-sys", 1754 | ] 1755 | 1756 | [[package]] 1757 | name = "openssl-macros" 1758 | version = "0.1.1" 1759 | source = "registry+https://github.com/rust-lang/crates.io-index" 1760 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1761 | dependencies = [ 1762 | "proc-macro2", 1763 | "quote", 1764 | "syn 2.0.79", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "openssl-probe" 1769 | version = "0.1.5" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1772 | 1773 | [[package]] 1774 | name = "openssl-sys" 1775 | version = "0.9.104" 1776 | source = "registry+https://github.com/rust-lang/crates.io-index" 1777 | checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" 1778 | dependencies = [ 1779 | "cc", 1780 | "libc", 1781 | "pkg-config", 1782 | "vcpkg", 1783 | ] 1784 | 1785 | [[package]] 1786 | name = "parking_lot" 1787 | version = "0.12.3" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1790 | dependencies = [ 1791 | "lock_api", 1792 | "parking_lot_core", 1793 | ] 1794 | 1795 | [[package]] 1796 | name = "parking_lot_core" 1797 | version = "0.9.10" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1800 | dependencies = [ 1801 | "cfg-if", 1802 | "libc", 1803 | "redox_syscall", 1804 | "smallvec", 1805 | "windows-targets 0.52.6", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "parse-size" 1810 | version = "1.0.0" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "944553dd59c802559559161f9816429058b869003836120e262e8caec061b7ae" 1813 | 1814 | [[package]] 1815 | name = "paste" 1816 | version = "1.0.15" 1817 | source = "registry+https://github.com/rust-lang/crates.io-index" 1818 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1819 | 1820 | [[package]] 1821 | name = "pem-rfc7468" 1822 | version = "0.7.0" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 1825 | dependencies = [ 1826 | "base64ct", 1827 | ] 1828 | 1829 | [[package]] 1830 | name = "percent-encoding" 1831 | version = "2.3.1" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1834 | 1835 | [[package]] 1836 | name = "pin-project" 1837 | version = "1.1.6" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" 1840 | dependencies = [ 1841 | "pin-project-internal", 1842 | ] 1843 | 1844 | [[package]] 1845 | name = "pin-project-internal" 1846 | version = "1.1.6" 1847 | source = "registry+https://github.com/rust-lang/crates.io-index" 1848 | checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" 1849 | dependencies = [ 1850 | "proc-macro2", 1851 | "quote", 1852 | "syn 2.0.79", 1853 | ] 1854 | 1855 | [[package]] 1856 | name = "pin-project-lite" 1857 | version = "0.2.14" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 1860 | 1861 | [[package]] 1862 | name = "pin-utils" 1863 | version = "0.1.0" 1864 | source = "registry+https://github.com/rust-lang/crates.io-index" 1865 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1866 | 1867 | [[package]] 1868 | name = "pkcs1" 1869 | version = "0.7.5" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 1872 | dependencies = [ 1873 | "der", 1874 | "pkcs8", 1875 | "spki", 1876 | ] 1877 | 1878 | [[package]] 1879 | name = "pkcs8" 1880 | version = "0.10.2" 1881 | source = "registry+https://github.com/rust-lang/crates.io-index" 1882 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 1883 | dependencies = [ 1884 | "der", 1885 | "spki", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "pkg-config" 1890 | version = "0.3.31" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1893 | 1894 | [[package]] 1895 | name = "powerfmt" 1896 | version = "0.2.0" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1899 | 1900 | [[package]] 1901 | name = "ppv-lite86" 1902 | version = "0.2.20" 1903 | source = "registry+https://github.com/rust-lang/crates.io-index" 1904 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1905 | dependencies = [ 1906 | "zerocopy", 1907 | ] 1908 | 1909 | [[package]] 1910 | name = "proc-macro-crate" 1911 | version = "3.2.0" 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" 1913 | checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" 1914 | dependencies = [ 1915 | "toml_edit", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "proc-macro-error" 1920 | version = "1.0.4" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1923 | dependencies = [ 1924 | "proc-macro-error-attr", 1925 | "proc-macro2", 1926 | "quote", 1927 | "syn 1.0.109", 1928 | "version_check", 1929 | ] 1930 | 1931 | [[package]] 1932 | name = "proc-macro-error-attr" 1933 | version = "1.0.4" 1934 | source = "registry+https://github.com/rust-lang/crates.io-index" 1935 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1936 | dependencies = [ 1937 | "proc-macro2", 1938 | "quote", 1939 | "version_check", 1940 | ] 1941 | 1942 | [[package]] 1943 | name = "proc-macro2" 1944 | version = "1.0.88" 1945 | source = "registry+https://github.com/rust-lang/crates.io-index" 1946 | checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" 1947 | dependencies = [ 1948 | "unicode-ident", 1949 | ] 1950 | 1951 | [[package]] 1952 | name = "ptr_meta" 1953 | version = "0.1.4" 1954 | source = "registry+https://github.com/rust-lang/crates.io-index" 1955 | checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" 1956 | dependencies = [ 1957 | "ptr_meta_derive", 1958 | ] 1959 | 1960 | [[package]] 1961 | name = "ptr_meta_derive" 1962 | version = "0.1.4" 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" 1964 | checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" 1965 | dependencies = [ 1966 | "proc-macro2", 1967 | "quote", 1968 | "syn 1.0.109", 1969 | ] 1970 | 1971 | [[package]] 1972 | name = "quote" 1973 | version = "1.0.37" 1974 | source = "registry+https://github.com/rust-lang/crates.io-index" 1975 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1976 | dependencies = [ 1977 | "proc-macro2", 1978 | ] 1979 | 1980 | [[package]] 1981 | name = "radium" 1982 | version = "0.7.0" 1983 | source = "registry+https://github.com/rust-lang/crates.io-index" 1984 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 1985 | 1986 | [[package]] 1987 | name = "rand" 1988 | version = "0.8.5" 1989 | source = "registry+https://github.com/rust-lang/crates.io-index" 1990 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1991 | dependencies = [ 1992 | "libc", 1993 | "rand_chacha", 1994 | "rand_core", 1995 | ] 1996 | 1997 | [[package]] 1998 | name = "rand_chacha" 1999 | version = "0.3.1" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2002 | dependencies = [ 2003 | "ppv-lite86", 2004 | "rand_core", 2005 | ] 2006 | 2007 | [[package]] 2008 | name = "rand_core" 2009 | version = "0.6.4" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2012 | dependencies = [ 2013 | "getrandom", 2014 | ] 2015 | 2016 | [[package]] 2017 | name = "redox_syscall" 2018 | version = "0.5.7" 2019 | source = "registry+https://github.com/rust-lang/crates.io-index" 2020 | checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" 2021 | dependencies = [ 2022 | "bitflags 2.6.0", 2023 | ] 2024 | 2025 | [[package]] 2026 | name = "regex" 2027 | version = "1.11.0" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" 2030 | dependencies = [ 2031 | "aho-corasick", 2032 | "memchr", 2033 | "regex-automata", 2034 | "regex-syntax", 2035 | ] 2036 | 2037 | [[package]] 2038 | name = "regex-automata" 2039 | version = "0.4.8" 2040 | source = "registry+https://github.com/rust-lang/crates.io-index" 2041 | checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" 2042 | dependencies = [ 2043 | "aho-corasick", 2044 | "memchr", 2045 | "regex-syntax", 2046 | ] 2047 | 2048 | [[package]] 2049 | name = "regex-lite" 2050 | version = "0.1.6" 2051 | source = "registry+https://github.com/rust-lang/crates.io-index" 2052 | checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" 2053 | 2054 | [[package]] 2055 | name = "regex-syntax" 2056 | version = "0.8.5" 2057 | source = "registry+https://github.com/rust-lang/crates.io-index" 2058 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 2059 | 2060 | [[package]] 2061 | name = "rend" 2062 | version = "0.4.2" 2063 | source = "registry+https://github.com/rust-lang/crates.io-index" 2064 | checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" 2065 | dependencies = [ 2066 | "bytecheck", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "reqwest" 2071 | version = "0.11.27" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" 2074 | dependencies = [ 2075 | "base64 0.21.7", 2076 | "bytes", 2077 | "encoding_rs", 2078 | "futures-core", 2079 | "futures-util", 2080 | "h2", 2081 | "http 0.2.12", 2082 | "http-body", 2083 | "hyper", 2084 | "hyper-rustls", 2085 | "hyper-tls", 2086 | "ipnet", 2087 | "js-sys", 2088 | "log", 2089 | "mime", 2090 | "mime_guess", 2091 | "native-tls", 2092 | "once_cell", 2093 | "percent-encoding", 2094 | "pin-project-lite", 2095 | "rustls 0.21.12", 2096 | "rustls-pemfile", 2097 | "serde", 2098 | "serde_json", 2099 | "serde_urlencoded", 2100 | "sync_wrapper", 2101 | "system-configuration", 2102 | "tokio", 2103 | "tokio-native-tls", 2104 | "tokio-rustls 0.24.1", 2105 | "tokio-util", 2106 | "tower-service", 2107 | "url", 2108 | "wasm-bindgen", 2109 | "wasm-bindgen-futures", 2110 | "wasm-streams", 2111 | "web-sys", 2112 | "webpki-roots 0.25.4", 2113 | "winreg", 2114 | ] 2115 | 2116 | [[package]] 2117 | name = "ring" 2118 | version = "0.17.8" 2119 | source = "registry+https://github.com/rust-lang/crates.io-index" 2120 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 2121 | dependencies = [ 2122 | "cc", 2123 | "cfg-if", 2124 | "getrandom", 2125 | "libc", 2126 | "spin", 2127 | "untrusted", 2128 | "windows-sys 0.52.0", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "rkyv" 2133 | version = "0.7.45" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" 2136 | dependencies = [ 2137 | "bitvec", 2138 | "bytecheck", 2139 | "bytes", 2140 | "hashbrown 0.12.3", 2141 | "ptr_meta", 2142 | "rend", 2143 | "rkyv_derive", 2144 | "seahash", 2145 | "tinyvec", 2146 | "uuid", 2147 | ] 2148 | 2149 | [[package]] 2150 | name = "rkyv_derive" 2151 | version = "0.7.45" 2152 | source = "registry+https://github.com/rust-lang/crates.io-index" 2153 | checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" 2154 | dependencies = [ 2155 | "proc-macro2", 2156 | "quote", 2157 | "syn 1.0.109", 2158 | ] 2159 | 2160 | [[package]] 2161 | name = "rsa" 2162 | version = "0.9.6" 2163 | source = "registry+https://github.com/rust-lang/crates.io-index" 2164 | checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" 2165 | dependencies = [ 2166 | "const-oid", 2167 | "digest", 2168 | "num-bigint-dig", 2169 | "num-integer", 2170 | "num-traits", 2171 | "pkcs1", 2172 | "pkcs8", 2173 | "rand_core", 2174 | "signature", 2175 | "spki", 2176 | "subtle", 2177 | "zeroize", 2178 | ] 2179 | 2180 | [[package]] 2181 | name = "rust_decimal" 2182 | version = "1.36.0" 2183 | source = "registry+https://github.com/rust-lang/crates.io-index" 2184 | checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" 2185 | dependencies = [ 2186 | "arrayvec", 2187 | "borsh", 2188 | "bytes", 2189 | "num-traits", 2190 | "rand", 2191 | "rkyv", 2192 | "serde", 2193 | "serde_json", 2194 | ] 2195 | 2196 | [[package]] 2197 | name = "rustc-demangle" 2198 | version = "0.1.24" 2199 | source = "registry+https://github.com/rust-lang/crates.io-index" 2200 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 2201 | 2202 | [[package]] 2203 | name = "rustc_version" 2204 | version = "0.4.1" 2205 | source = "registry+https://github.com/rust-lang/crates.io-index" 2206 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2207 | dependencies = [ 2208 | "semver", 2209 | ] 2210 | 2211 | [[package]] 2212 | name = "rustix" 2213 | version = "0.38.37" 2214 | source = "registry+https://github.com/rust-lang/crates.io-index" 2215 | checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" 2216 | dependencies = [ 2217 | "bitflags 2.6.0", 2218 | "errno", 2219 | "libc", 2220 | "linux-raw-sys", 2221 | "windows-sys 0.52.0", 2222 | ] 2223 | 2224 | [[package]] 2225 | name = "rustls" 2226 | version = "0.21.12" 2227 | source = "registry+https://github.com/rust-lang/crates.io-index" 2228 | checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 2229 | dependencies = [ 2230 | "log", 2231 | "ring", 2232 | "rustls-webpki 0.101.7", 2233 | "sct", 2234 | ] 2235 | 2236 | [[package]] 2237 | name = "rustls" 2238 | version = "0.22.4" 2239 | source = "registry+https://github.com/rust-lang/crates.io-index" 2240 | checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" 2241 | dependencies = [ 2242 | "log", 2243 | "ring", 2244 | "rustls-pki-types", 2245 | "rustls-webpki 0.102.8", 2246 | "subtle", 2247 | "zeroize", 2248 | ] 2249 | 2250 | [[package]] 2251 | name = "rustls-pemfile" 2252 | version = "1.0.4" 2253 | source = "registry+https://github.com/rust-lang/crates.io-index" 2254 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 2255 | dependencies = [ 2256 | "base64 0.21.7", 2257 | ] 2258 | 2259 | [[package]] 2260 | name = "rustls-pki-types" 2261 | version = "1.10.0" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" 2264 | 2265 | [[package]] 2266 | name = "rustls-webpki" 2267 | version = "0.101.7" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 2270 | dependencies = [ 2271 | "ring", 2272 | "untrusted", 2273 | ] 2274 | 2275 | [[package]] 2276 | name = "rustls-webpki" 2277 | version = "0.102.8" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 2280 | dependencies = [ 2281 | "ring", 2282 | "rustls-pki-types", 2283 | "untrusted", 2284 | ] 2285 | 2286 | [[package]] 2287 | name = "rustversion" 2288 | version = "1.0.18" 2289 | source = "registry+https://github.com/rust-lang/crates.io-index" 2290 | checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" 2291 | 2292 | [[package]] 2293 | name = "ryu" 2294 | version = "1.0.18" 2295 | source = "registry+https://github.com/rust-lang/crates.io-index" 2296 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 2297 | 2298 | [[package]] 2299 | name = "schannel" 2300 | version = "0.1.26" 2301 | source = "registry+https://github.com/rust-lang/crates.io-index" 2302 | checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" 2303 | dependencies = [ 2304 | "windows-sys 0.59.0", 2305 | ] 2306 | 2307 | [[package]] 2308 | name = "scopeguard" 2309 | version = "1.2.0" 2310 | source = "registry+https://github.com/rust-lang/crates.io-index" 2311 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2312 | 2313 | [[package]] 2314 | name = "sct" 2315 | version = "0.7.1" 2316 | source = "registry+https://github.com/rust-lang/crates.io-index" 2317 | checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 2318 | dependencies = [ 2319 | "ring", 2320 | "untrusted", 2321 | ] 2322 | 2323 | [[package]] 2324 | name = "seahash" 2325 | version = "4.1.0" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" 2328 | 2329 | [[package]] 2330 | name = "secrecy" 2331 | version = "0.8.0" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" 2334 | dependencies = [ 2335 | "serde", 2336 | "zeroize", 2337 | ] 2338 | 2339 | [[package]] 2340 | name = "security-framework" 2341 | version = "2.11.1" 2342 | source = "registry+https://github.com/rust-lang/crates.io-index" 2343 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2344 | dependencies = [ 2345 | "bitflags 2.6.0", 2346 | "core-foundation", 2347 | "core-foundation-sys", 2348 | "libc", 2349 | "security-framework-sys", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "security-framework-sys" 2354 | version = "2.12.0" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" 2357 | dependencies = [ 2358 | "core-foundation-sys", 2359 | "libc", 2360 | ] 2361 | 2362 | [[package]] 2363 | name = "semver" 2364 | version = "1.0.23" 2365 | source = "registry+https://github.com/rust-lang/crates.io-index" 2366 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 2367 | 2368 | [[package]] 2369 | name = "serde" 2370 | version = "1.0.210" 2371 | source = "registry+https://github.com/rust-lang/crates.io-index" 2372 | checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" 2373 | dependencies = [ 2374 | "serde_derive", 2375 | ] 2376 | 2377 | [[package]] 2378 | name = "serde_cow" 2379 | version = "0.1.2" 2380 | source = "registry+https://github.com/rust-lang/crates.io-index" 2381 | checksum = "1e7bbbec7196bfde255ab54b65e34087c0849629280028238e67ee25d6a4b7da" 2382 | dependencies = [ 2383 | "serde", 2384 | ] 2385 | 2386 | [[package]] 2387 | name = "serde_derive" 2388 | version = "1.0.210" 2389 | source = "registry+https://github.com/rust-lang/crates.io-index" 2390 | checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" 2391 | dependencies = [ 2392 | "proc-macro2", 2393 | "quote", 2394 | "syn 2.0.79", 2395 | ] 2396 | 2397 | [[package]] 2398 | name = "serde_derive_internals" 2399 | version = "0.29.1" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" 2402 | dependencies = [ 2403 | "proc-macro2", 2404 | "quote", 2405 | "syn 2.0.79", 2406 | ] 2407 | 2408 | [[package]] 2409 | name = "serde_json" 2410 | version = "1.0.128" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" 2413 | dependencies = [ 2414 | "itoa", 2415 | "memchr", 2416 | "ryu", 2417 | "serde", 2418 | ] 2419 | 2420 | [[package]] 2421 | name = "serde_plain" 2422 | version = "1.0.2" 2423 | source = "registry+https://github.com/rust-lang/crates.io-index" 2424 | checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" 2425 | dependencies = [ 2426 | "serde", 2427 | ] 2428 | 2429 | [[package]] 2430 | name = "serde_qs" 2431 | version = "0.13.0" 2432 | source = "registry+https://github.com/rust-lang/crates.io-index" 2433 | checksum = "cd34f36fe4c5ba9654417139a9b3a20d2e1de6012ee678ad14d240c22c78d8d6" 2434 | dependencies = [ 2435 | "actix-web", 2436 | "futures", 2437 | "percent-encoding", 2438 | "serde", 2439 | "thiserror", 2440 | ] 2441 | 2442 | [[package]] 2443 | name = "serde_urlencoded" 2444 | version = "0.7.1" 2445 | source = "registry+https://github.com/rust-lang/crates.io-index" 2446 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2447 | dependencies = [ 2448 | "form_urlencoded", 2449 | "itoa", 2450 | "ryu", 2451 | "serde", 2452 | ] 2453 | 2454 | [[package]] 2455 | name = "serenity" 2456 | version = "0.12.2" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "880a04106592d0a8f5bdacb1d935889bfbccb4a14f7074984d9cd857235d34ac" 2459 | dependencies = [ 2460 | "arrayvec", 2461 | "async-trait", 2462 | "base64 0.22.1", 2463 | "bitflags 2.6.0", 2464 | "bytes", 2465 | "flate2", 2466 | "futures", 2467 | "mime_guess", 2468 | "percent-encoding", 2469 | "reqwest", 2470 | "secrecy", 2471 | "serde", 2472 | "serde_cow", 2473 | "serde_json", 2474 | "time", 2475 | "tokio", 2476 | "tokio-tungstenite", 2477 | "tracing", 2478 | "typemap_rev", 2479 | "url", 2480 | ] 2481 | 2482 | [[package]] 2483 | name = "sha1" 2484 | version = "0.10.6" 2485 | source = "registry+https://github.com/rust-lang/crates.io-index" 2486 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2487 | dependencies = [ 2488 | "cfg-if", 2489 | "cpufeatures", 2490 | "digest", 2491 | ] 2492 | 2493 | [[package]] 2494 | name = "sha2" 2495 | version = "0.10.8" 2496 | source = "registry+https://github.com/rust-lang/crates.io-index" 2497 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 2498 | dependencies = [ 2499 | "cfg-if", 2500 | "cpufeatures", 2501 | "digest", 2502 | ] 2503 | 2504 | [[package]] 2505 | name = "shlex" 2506 | version = "1.3.0" 2507 | source = "registry+https://github.com/rust-lang/crates.io-index" 2508 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2509 | 2510 | [[package]] 2511 | name = "signal-hook-registry" 2512 | version = "1.4.2" 2513 | source = "registry+https://github.com/rust-lang/crates.io-index" 2514 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2515 | dependencies = [ 2516 | "libc", 2517 | ] 2518 | 2519 | [[package]] 2520 | name = "signature" 2521 | version = "2.2.0" 2522 | source = "registry+https://github.com/rust-lang/crates.io-index" 2523 | checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 2524 | dependencies = [ 2525 | "digest", 2526 | "rand_core", 2527 | ] 2528 | 2529 | [[package]] 2530 | name = "simdutf8" 2531 | version = "0.1.5" 2532 | source = "registry+https://github.com/rust-lang/crates.io-index" 2533 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 2534 | 2535 | [[package]] 2536 | name = "slab" 2537 | version = "0.4.9" 2538 | source = "registry+https://github.com/rust-lang/crates.io-index" 2539 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2540 | dependencies = [ 2541 | "autocfg", 2542 | ] 2543 | 2544 | [[package]] 2545 | name = "smallvec" 2546 | version = "1.13.2" 2547 | source = "registry+https://github.com/rust-lang/crates.io-index" 2548 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2549 | dependencies = [ 2550 | "serde", 2551 | ] 2552 | 2553 | [[package]] 2554 | name = "socket2" 2555 | version = "0.5.7" 2556 | source = "registry+https://github.com/rust-lang/crates.io-index" 2557 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 2558 | dependencies = [ 2559 | "libc", 2560 | "windows-sys 0.52.0", 2561 | ] 2562 | 2563 | [[package]] 2564 | name = "spin" 2565 | version = "0.9.8" 2566 | source = "registry+https://github.com/rust-lang/crates.io-index" 2567 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2568 | dependencies = [ 2569 | "lock_api", 2570 | ] 2571 | 2572 | [[package]] 2573 | name = "spki" 2574 | version = "0.7.3" 2575 | source = "registry+https://github.com/rust-lang/crates.io-index" 2576 | checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 2577 | dependencies = [ 2578 | "base64ct", 2579 | "der", 2580 | ] 2581 | 2582 | [[package]] 2583 | name = "sqlformat" 2584 | version = "0.2.6" 2585 | source = "registry+https://github.com/rust-lang/crates.io-index" 2586 | checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" 2587 | dependencies = [ 2588 | "nom", 2589 | "unicode_categories", 2590 | ] 2591 | 2592 | [[package]] 2593 | name = "sqlx" 2594 | version = "0.7.4" 2595 | source = "registry+https://github.com/rust-lang/crates.io-index" 2596 | checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" 2597 | dependencies = [ 2598 | "sqlx-core", 2599 | "sqlx-macros", 2600 | "sqlx-mysql", 2601 | "sqlx-postgres", 2602 | "sqlx-sqlite", 2603 | ] 2604 | 2605 | [[package]] 2606 | name = "sqlx-core" 2607 | version = "0.7.4" 2608 | source = "registry+https://github.com/rust-lang/crates.io-index" 2609 | checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" 2610 | dependencies = [ 2611 | "ahash 0.8.11", 2612 | "atoi", 2613 | "bigdecimal", 2614 | "byteorder", 2615 | "bytes", 2616 | "chrono", 2617 | "crc", 2618 | "crossbeam-queue", 2619 | "either", 2620 | "event-listener", 2621 | "futures-channel", 2622 | "futures-core", 2623 | "futures-intrusive", 2624 | "futures-io", 2625 | "futures-util", 2626 | "hashlink", 2627 | "hex", 2628 | "indexmap", 2629 | "log", 2630 | "memchr", 2631 | "once_cell", 2632 | "paste", 2633 | "percent-encoding", 2634 | "rustls 0.21.12", 2635 | "rustls-pemfile", 2636 | "serde", 2637 | "serde_json", 2638 | "sha2", 2639 | "smallvec", 2640 | "sqlformat", 2641 | "thiserror", 2642 | "tokio", 2643 | "tokio-stream", 2644 | "tracing", 2645 | "url", 2646 | "uuid", 2647 | "webpki-roots 0.25.4", 2648 | ] 2649 | 2650 | [[package]] 2651 | name = "sqlx-macros" 2652 | version = "0.7.4" 2653 | source = "registry+https://github.com/rust-lang/crates.io-index" 2654 | checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" 2655 | dependencies = [ 2656 | "proc-macro2", 2657 | "quote", 2658 | "sqlx-core", 2659 | "sqlx-macros-core", 2660 | "syn 1.0.109", 2661 | ] 2662 | 2663 | [[package]] 2664 | name = "sqlx-macros-core" 2665 | version = "0.7.4" 2666 | source = "registry+https://github.com/rust-lang/crates.io-index" 2667 | checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" 2668 | dependencies = [ 2669 | "dotenvy", 2670 | "either", 2671 | "heck", 2672 | "hex", 2673 | "once_cell", 2674 | "proc-macro2", 2675 | "quote", 2676 | "serde", 2677 | "serde_json", 2678 | "sha2", 2679 | "sqlx-core", 2680 | "sqlx-mysql", 2681 | "sqlx-postgres", 2682 | "sqlx-sqlite", 2683 | "syn 1.0.109", 2684 | "tempfile", 2685 | "tokio", 2686 | "url", 2687 | ] 2688 | 2689 | [[package]] 2690 | name = "sqlx-mysql" 2691 | version = "0.7.4" 2692 | source = "registry+https://github.com/rust-lang/crates.io-index" 2693 | checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" 2694 | dependencies = [ 2695 | "atoi", 2696 | "base64 0.21.7", 2697 | "bigdecimal", 2698 | "bitflags 2.6.0", 2699 | "byteorder", 2700 | "bytes", 2701 | "chrono", 2702 | "crc", 2703 | "digest", 2704 | "dotenvy", 2705 | "either", 2706 | "futures-channel", 2707 | "futures-core", 2708 | "futures-io", 2709 | "futures-util", 2710 | "generic-array", 2711 | "hex", 2712 | "hkdf", 2713 | "hmac", 2714 | "itoa", 2715 | "log", 2716 | "md-5", 2717 | "memchr", 2718 | "once_cell", 2719 | "percent-encoding", 2720 | "rand", 2721 | "rsa", 2722 | "serde", 2723 | "sha1", 2724 | "sha2", 2725 | "smallvec", 2726 | "sqlx-core", 2727 | "stringprep", 2728 | "thiserror", 2729 | "tracing", 2730 | "uuid", 2731 | "whoami", 2732 | ] 2733 | 2734 | [[package]] 2735 | name = "sqlx-postgres" 2736 | version = "0.7.4" 2737 | source = "registry+https://github.com/rust-lang/crates.io-index" 2738 | checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" 2739 | dependencies = [ 2740 | "atoi", 2741 | "base64 0.21.7", 2742 | "bigdecimal", 2743 | "bitflags 2.6.0", 2744 | "byteorder", 2745 | "chrono", 2746 | "crc", 2747 | "dotenvy", 2748 | "etcetera", 2749 | "futures-channel", 2750 | "futures-core", 2751 | "futures-io", 2752 | "futures-util", 2753 | "hex", 2754 | "hkdf", 2755 | "hmac", 2756 | "home", 2757 | "itoa", 2758 | "log", 2759 | "md-5", 2760 | "memchr", 2761 | "num-bigint", 2762 | "once_cell", 2763 | "rand", 2764 | "serde", 2765 | "serde_json", 2766 | "sha2", 2767 | "smallvec", 2768 | "sqlx-core", 2769 | "stringprep", 2770 | "thiserror", 2771 | "tracing", 2772 | "uuid", 2773 | "whoami", 2774 | ] 2775 | 2776 | [[package]] 2777 | name = "sqlx-sqlite" 2778 | version = "0.7.4" 2779 | source = "registry+https://github.com/rust-lang/crates.io-index" 2780 | checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" 2781 | dependencies = [ 2782 | "atoi", 2783 | "chrono", 2784 | "flume", 2785 | "futures-channel", 2786 | "futures-core", 2787 | "futures-executor", 2788 | "futures-intrusive", 2789 | "futures-util", 2790 | "libsqlite3-sys", 2791 | "log", 2792 | "percent-encoding", 2793 | "serde", 2794 | "sqlx-core", 2795 | "tracing", 2796 | "url", 2797 | "urlencoding", 2798 | "uuid", 2799 | ] 2800 | 2801 | [[package]] 2802 | name = "stakit-raids" 2803 | version = "0.1.0" 2804 | dependencies = [ 2805 | "actix-web", 2806 | "anyhow", 2807 | "apistos", 2808 | "apistos-schemars", 2809 | "bigdecimal", 2810 | "chrono", 2811 | "dotenv", 2812 | "log", 2813 | "reqwest", 2814 | "serde", 2815 | "serde_json", 2816 | "serenity", 2817 | "sqlx", 2818 | "tokio", 2819 | "uuid", 2820 | ] 2821 | 2822 | [[package]] 2823 | name = "static_assertions" 2824 | version = "1.1.0" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2827 | 2828 | [[package]] 2829 | name = "stringprep" 2830 | version = "0.1.5" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 2833 | dependencies = [ 2834 | "unicode-bidi", 2835 | "unicode-normalization", 2836 | "unicode-properties", 2837 | ] 2838 | 2839 | [[package]] 2840 | name = "strsim" 2841 | version = "0.11.1" 2842 | source = "registry+https://github.com/rust-lang/crates.io-index" 2843 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2844 | 2845 | [[package]] 2846 | name = "subtle" 2847 | version = "2.6.1" 2848 | source = "registry+https://github.com/rust-lang/crates.io-index" 2849 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2850 | 2851 | [[package]] 2852 | name = "syn" 2853 | version = "1.0.109" 2854 | source = "registry+https://github.com/rust-lang/crates.io-index" 2855 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2856 | dependencies = [ 2857 | "proc-macro2", 2858 | "quote", 2859 | "unicode-ident", 2860 | ] 2861 | 2862 | [[package]] 2863 | name = "syn" 2864 | version = "2.0.79" 2865 | source = "registry+https://github.com/rust-lang/crates.io-index" 2866 | checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" 2867 | dependencies = [ 2868 | "proc-macro2", 2869 | "quote", 2870 | "unicode-ident", 2871 | ] 2872 | 2873 | [[package]] 2874 | name = "syn_derive" 2875 | version = "0.1.8" 2876 | source = "registry+https://github.com/rust-lang/crates.io-index" 2877 | checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" 2878 | dependencies = [ 2879 | "proc-macro-error", 2880 | "proc-macro2", 2881 | "quote", 2882 | "syn 2.0.79", 2883 | ] 2884 | 2885 | [[package]] 2886 | name = "sync_wrapper" 2887 | version = "0.1.2" 2888 | source = "registry+https://github.com/rust-lang/crates.io-index" 2889 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2890 | 2891 | [[package]] 2892 | name = "system-configuration" 2893 | version = "0.5.1" 2894 | source = "registry+https://github.com/rust-lang/crates.io-index" 2895 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 2896 | dependencies = [ 2897 | "bitflags 1.3.2", 2898 | "core-foundation", 2899 | "system-configuration-sys", 2900 | ] 2901 | 2902 | [[package]] 2903 | name = "system-configuration-sys" 2904 | version = "0.5.0" 2905 | source = "registry+https://github.com/rust-lang/crates.io-index" 2906 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 2907 | dependencies = [ 2908 | "core-foundation-sys", 2909 | "libc", 2910 | ] 2911 | 2912 | [[package]] 2913 | name = "tap" 2914 | version = "1.0.1" 2915 | source = "registry+https://github.com/rust-lang/crates.io-index" 2916 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 2917 | 2918 | [[package]] 2919 | name = "tempfile" 2920 | version = "3.13.0" 2921 | source = "registry+https://github.com/rust-lang/crates.io-index" 2922 | checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" 2923 | dependencies = [ 2924 | "cfg-if", 2925 | "fastrand", 2926 | "once_cell", 2927 | "rustix", 2928 | "windows-sys 0.59.0", 2929 | ] 2930 | 2931 | [[package]] 2932 | name = "thiserror" 2933 | version = "1.0.64" 2934 | source = "registry+https://github.com/rust-lang/crates.io-index" 2935 | checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" 2936 | dependencies = [ 2937 | "thiserror-impl", 2938 | ] 2939 | 2940 | [[package]] 2941 | name = "thiserror-impl" 2942 | version = "1.0.64" 2943 | source = "registry+https://github.com/rust-lang/crates.io-index" 2944 | checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" 2945 | dependencies = [ 2946 | "proc-macro2", 2947 | "quote", 2948 | "syn 2.0.79", 2949 | ] 2950 | 2951 | [[package]] 2952 | name = "time" 2953 | version = "0.3.36" 2954 | source = "registry+https://github.com/rust-lang/crates.io-index" 2955 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 2956 | dependencies = [ 2957 | "deranged", 2958 | "itoa", 2959 | "num-conv", 2960 | "powerfmt", 2961 | "serde", 2962 | "time-core", 2963 | "time-macros", 2964 | ] 2965 | 2966 | [[package]] 2967 | name = "time-core" 2968 | version = "0.1.2" 2969 | source = "registry+https://github.com/rust-lang/crates.io-index" 2970 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 2971 | 2972 | [[package]] 2973 | name = "time-macros" 2974 | version = "0.2.18" 2975 | source = "registry+https://github.com/rust-lang/crates.io-index" 2976 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 2977 | dependencies = [ 2978 | "num-conv", 2979 | "time-core", 2980 | ] 2981 | 2982 | [[package]] 2983 | name = "tinyvec" 2984 | version = "1.8.0" 2985 | source = "registry+https://github.com/rust-lang/crates.io-index" 2986 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 2987 | dependencies = [ 2988 | "tinyvec_macros", 2989 | ] 2990 | 2991 | [[package]] 2992 | name = "tinyvec_macros" 2993 | version = "0.1.1" 2994 | source = "registry+https://github.com/rust-lang/crates.io-index" 2995 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2996 | 2997 | [[package]] 2998 | name = "tokio" 2999 | version = "1.40.0" 3000 | source = "registry+https://github.com/rust-lang/crates.io-index" 3001 | checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" 3002 | dependencies = [ 3003 | "backtrace", 3004 | "bytes", 3005 | "libc", 3006 | "mio", 3007 | "parking_lot", 3008 | "pin-project-lite", 3009 | "signal-hook-registry", 3010 | "socket2", 3011 | "tokio-macros", 3012 | "windows-sys 0.52.0", 3013 | ] 3014 | 3015 | [[package]] 3016 | name = "tokio-macros" 3017 | version = "2.4.0" 3018 | source = "registry+https://github.com/rust-lang/crates.io-index" 3019 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 3020 | dependencies = [ 3021 | "proc-macro2", 3022 | "quote", 3023 | "syn 2.0.79", 3024 | ] 3025 | 3026 | [[package]] 3027 | name = "tokio-native-tls" 3028 | version = "0.3.1" 3029 | source = "registry+https://github.com/rust-lang/crates.io-index" 3030 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 3031 | dependencies = [ 3032 | "native-tls", 3033 | "tokio", 3034 | ] 3035 | 3036 | [[package]] 3037 | name = "tokio-rustls" 3038 | version = "0.24.1" 3039 | source = "registry+https://github.com/rust-lang/crates.io-index" 3040 | checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" 3041 | dependencies = [ 3042 | "rustls 0.21.12", 3043 | "tokio", 3044 | ] 3045 | 3046 | [[package]] 3047 | name = "tokio-rustls" 3048 | version = "0.25.0" 3049 | source = "registry+https://github.com/rust-lang/crates.io-index" 3050 | checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" 3051 | dependencies = [ 3052 | "rustls 0.22.4", 3053 | "rustls-pki-types", 3054 | "tokio", 3055 | ] 3056 | 3057 | [[package]] 3058 | name = "tokio-stream" 3059 | version = "0.1.16" 3060 | source = "registry+https://github.com/rust-lang/crates.io-index" 3061 | checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" 3062 | dependencies = [ 3063 | "futures-core", 3064 | "pin-project-lite", 3065 | "tokio", 3066 | ] 3067 | 3068 | [[package]] 3069 | name = "tokio-tungstenite" 3070 | version = "0.21.0" 3071 | source = "registry+https://github.com/rust-lang/crates.io-index" 3072 | checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" 3073 | dependencies = [ 3074 | "futures-util", 3075 | "log", 3076 | "rustls 0.22.4", 3077 | "rustls-pki-types", 3078 | "tokio", 3079 | "tokio-rustls 0.25.0", 3080 | "tungstenite", 3081 | "webpki-roots 0.26.6", 3082 | ] 3083 | 3084 | [[package]] 3085 | name = "tokio-util" 3086 | version = "0.7.12" 3087 | source = "registry+https://github.com/rust-lang/crates.io-index" 3088 | checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" 3089 | dependencies = [ 3090 | "bytes", 3091 | "futures-core", 3092 | "futures-sink", 3093 | "pin-project-lite", 3094 | "tokio", 3095 | ] 3096 | 3097 | [[package]] 3098 | name = "toml_datetime" 3099 | version = "0.6.8" 3100 | source = "registry+https://github.com/rust-lang/crates.io-index" 3101 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 3102 | 3103 | [[package]] 3104 | name = "toml_edit" 3105 | version = "0.22.22" 3106 | source = "registry+https://github.com/rust-lang/crates.io-index" 3107 | checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" 3108 | dependencies = [ 3109 | "indexmap", 3110 | "toml_datetime", 3111 | "winnow", 3112 | ] 3113 | 3114 | [[package]] 3115 | name = "tower-service" 3116 | version = "0.3.3" 3117 | source = "registry+https://github.com/rust-lang/crates.io-index" 3118 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3119 | 3120 | [[package]] 3121 | name = "tracing" 3122 | version = "0.1.40" 3123 | source = "registry+https://github.com/rust-lang/crates.io-index" 3124 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 3125 | dependencies = [ 3126 | "log", 3127 | "pin-project-lite", 3128 | "tracing-attributes", 3129 | "tracing-core", 3130 | ] 3131 | 3132 | [[package]] 3133 | name = "tracing-attributes" 3134 | version = "0.1.27" 3135 | source = "registry+https://github.com/rust-lang/crates.io-index" 3136 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 3137 | dependencies = [ 3138 | "proc-macro2", 3139 | "quote", 3140 | "syn 2.0.79", 3141 | ] 3142 | 3143 | [[package]] 3144 | name = "tracing-core" 3145 | version = "0.1.32" 3146 | source = "registry+https://github.com/rust-lang/crates.io-index" 3147 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 3148 | dependencies = [ 3149 | "once_cell", 3150 | ] 3151 | 3152 | [[package]] 3153 | name = "try-lock" 3154 | version = "0.2.5" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3157 | 3158 | [[package]] 3159 | name = "tungstenite" 3160 | version = "0.21.0" 3161 | source = "registry+https://github.com/rust-lang/crates.io-index" 3162 | checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" 3163 | dependencies = [ 3164 | "byteorder", 3165 | "bytes", 3166 | "data-encoding", 3167 | "http 1.1.0", 3168 | "httparse", 3169 | "log", 3170 | "rand", 3171 | "rustls 0.22.4", 3172 | "rustls-pki-types", 3173 | "sha1", 3174 | "thiserror", 3175 | "url", 3176 | "utf-8", 3177 | ] 3178 | 3179 | [[package]] 3180 | name = "typemap_rev" 3181 | version = "0.3.0" 3182 | source = "registry+https://github.com/rust-lang/crates.io-index" 3183 | checksum = "74b08b0c1257381af16a5c3605254d529d3e7e109f3c62befc5d168968192998" 3184 | 3185 | [[package]] 3186 | name = "typenum" 3187 | version = "1.17.0" 3188 | source = "registry+https://github.com/rust-lang/crates.io-index" 3189 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 3190 | 3191 | [[package]] 3192 | name = "unicase" 3193 | version = "2.8.0" 3194 | source = "registry+https://github.com/rust-lang/crates.io-index" 3195 | checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" 3196 | 3197 | [[package]] 3198 | name = "unicode-bidi" 3199 | version = "0.3.17" 3200 | source = "registry+https://github.com/rust-lang/crates.io-index" 3201 | checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" 3202 | 3203 | [[package]] 3204 | name = "unicode-ident" 3205 | version = "1.0.13" 3206 | source = "registry+https://github.com/rust-lang/crates.io-index" 3207 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 3208 | 3209 | [[package]] 3210 | name = "unicode-normalization" 3211 | version = "0.1.24" 3212 | source = "registry+https://github.com/rust-lang/crates.io-index" 3213 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 3214 | dependencies = [ 3215 | "tinyvec", 3216 | ] 3217 | 3218 | [[package]] 3219 | name = "unicode-properties" 3220 | version = "0.1.3" 3221 | source = "registry+https://github.com/rust-lang/crates.io-index" 3222 | checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 3223 | 3224 | [[package]] 3225 | name = "unicode-segmentation" 3226 | version = "1.12.0" 3227 | source = "registry+https://github.com/rust-lang/crates.io-index" 3228 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3229 | 3230 | [[package]] 3231 | name = "unicode_categories" 3232 | version = "0.1.1" 3233 | source = "registry+https://github.com/rust-lang/crates.io-index" 3234 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" 3235 | 3236 | [[package]] 3237 | name = "untrusted" 3238 | version = "0.9.0" 3239 | source = "registry+https://github.com/rust-lang/crates.io-index" 3240 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3241 | 3242 | [[package]] 3243 | name = "url" 3244 | version = "2.5.2" 3245 | source = "registry+https://github.com/rust-lang/crates.io-index" 3246 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 3247 | dependencies = [ 3248 | "form_urlencoded", 3249 | "idna", 3250 | "percent-encoding", 3251 | "serde", 3252 | ] 3253 | 3254 | [[package]] 3255 | name = "urlencoding" 3256 | version = "2.1.3" 3257 | source = "registry+https://github.com/rust-lang/crates.io-index" 3258 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 3259 | 3260 | [[package]] 3261 | name = "utf-8" 3262 | version = "0.7.6" 3263 | source = "registry+https://github.com/rust-lang/crates.io-index" 3264 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3265 | 3266 | [[package]] 3267 | name = "uuid" 3268 | version = "1.11.0" 3269 | source = "registry+https://github.com/rust-lang/crates.io-index" 3270 | checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" 3271 | dependencies = [ 3272 | "getrandom", 3273 | "serde", 3274 | ] 3275 | 3276 | [[package]] 3277 | name = "vcpkg" 3278 | version = "0.2.15" 3279 | source = "registry+https://github.com/rust-lang/crates.io-index" 3280 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3281 | 3282 | [[package]] 3283 | name = "version_check" 3284 | version = "0.9.5" 3285 | source = "registry+https://github.com/rust-lang/crates.io-index" 3286 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3287 | 3288 | [[package]] 3289 | name = "want" 3290 | version = "0.3.1" 3291 | source = "registry+https://github.com/rust-lang/crates.io-index" 3292 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3293 | dependencies = [ 3294 | "try-lock", 3295 | ] 3296 | 3297 | [[package]] 3298 | name = "wasi" 3299 | version = "0.11.0+wasi-snapshot-preview1" 3300 | source = "registry+https://github.com/rust-lang/crates.io-index" 3301 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3302 | 3303 | [[package]] 3304 | name = "wasite" 3305 | version = "0.1.0" 3306 | source = "registry+https://github.com/rust-lang/crates.io-index" 3307 | checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 3308 | 3309 | [[package]] 3310 | name = "wasm-bindgen" 3311 | version = "0.2.95" 3312 | source = "registry+https://github.com/rust-lang/crates.io-index" 3313 | checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" 3314 | dependencies = [ 3315 | "cfg-if", 3316 | "once_cell", 3317 | "wasm-bindgen-macro", 3318 | ] 3319 | 3320 | [[package]] 3321 | name = "wasm-bindgen-backend" 3322 | version = "0.2.95" 3323 | source = "registry+https://github.com/rust-lang/crates.io-index" 3324 | checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" 3325 | dependencies = [ 3326 | "bumpalo", 3327 | "log", 3328 | "once_cell", 3329 | "proc-macro2", 3330 | "quote", 3331 | "syn 2.0.79", 3332 | "wasm-bindgen-shared", 3333 | ] 3334 | 3335 | [[package]] 3336 | name = "wasm-bindgen-futures" 3337 | version = "0.4.45" 3338 | source = "registry+https://github.com/rust-lang/crates.io-index" 3339 | checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" 3340 | dependencies = [ 3341 | "cfg-if", 3342 | "js-sys", 3343 | "wasm-bindgen", 3344 | "web-sys", 3345 | ] 3346 | 3347 | [[package]] 3348 | name = "wasm-bindgen-macro" 3349 | version = "0.2.95" 3350 | source = "registry+https://github.com/rust-lang/crates.io-index" 3351 | checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" 3352 | dependencies = [ 3353 | "quote", 3354 | "wasm-bindgen-macro-support", 3355 | ] 3356 | 3357 | [[package]] 3358 | name = "wasm-bindgen-macro-support" 3359 | version = "0.2.95" 3360 | source = "registry+https://github.com/rust-lang/crates.io-index" 3361 | checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" 3362 | dependencies = [ 3363 | "proc-macro2", 3364 | "quote", 3365 | "syn 2.0.79", 3366 | "wasm-bindgen-backend", 3367 | "wasm-bindgen-shared", 3368 | ] 3369 | 3370 | [[package]] 3371 | name = "wasm-bindgen-shared" 3372 | version = "0.2.95" 3373 | source = "registry+https://github.com/rust-lang/crates.io-index" 3374 | checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" 3375 | 3376 | [[package]] 3377 | name = "wasm-streams" 3378 | version = "0.4.2" 3379 | source = "registry+https://github.com/rust-lang/crates.io-index" 3380 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 3381 | dependencies = [ 3382 | "futures-util", 3383 | "js-sys", 3384 | "wasm-bindgen", 3385 | "wasm-bindgen-futures", 3386 | "web-sys", 3387 | ] 3388 | 3389 | [[package]] 3390 | name = "web-sys" 3391 | version = "0.3.72" 3392 | source = "registry+https://github.com/rust-lang/crates.io-index" 3393 | checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" 3394 | dependencies = [ 3395 | "js-sys", 3396 | "wasm-bindgen", 3397 | ] 3398 | 3399 | [[package]] 3400 | name = "webpki-roots" 3401 | version = "0.25.4" 3402 | source = "registry+https://github.com/rust-lang/crates.io-index" 3403 | checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 3404 | 3405 | [[package]] 3406 | name = "webpki-roots" 3407 | version = "0.26.6" 3408 | source = "registry+https://github.com/rust-lang/crates.io-index" 3409 | checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" 3410 | dependencies = [ 3411 | "rustls-pki-types", 3412 | ] 3413 | 3414 | [[package]] 3415 | name = "whoami" 3416 | version = "1.5.2" 3417 | source = "registry+https://github.com/rust-lang/crates.io-index" 3418 | checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" 3419 | dependencies = [ 3420 | "redox_syscall", 3421 | "wasite", 3422 | ] 3423 | 3424 | [[package]] 3425 | name = "windows-core" 3426 | version = "0.52.0" 3427 | source = "registry+https://github.com/rust-lang/crates.io-index" 3428 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 3429 | dependencies = [ 3430 | "windows-targets 0.52.6", 3431 | ] 3432 | 3433 | [[package]] 3434 | name = "windows-sys" 3435 | version = "0.48.0" 3436 | source = "registry+https://github.com/rust-lang/crates.io-index" 3437 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3438 | dependencies = [ 3439 | "windows-targets 0.48.5", 3440 | ] 3441 | 3442 | [[package]] 3443 | name = "windows-sys" 3444 | version = "0.52.0" 3445 | source = "registry+https://github.com/rust-lang/crates.io-index" 3446 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3447 | dependencies = [ 3448 | "windows-targets 0.52.6", 3449 | ] 3450 | 3451 | [[package]] 3452 | name = "windows-sys" 3453 | version = "0.59.0" 3454 | source = "registry+https://github.com/rust-lang/crates.io-index" 3455 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3456 | dependencies = [ 3457 | "windows-targets 0.52.6", 3458 | ] 3459 | 3460 | [[package]] 3461 | name = "windows-targets" 3462 | version = "0.48.5" 3463 | source = "registry+https://github.com/rust-lang/crates.io-index" 3464 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3465 | dependencies = [ 3466 | "windows_aarch64_gnullvm 0.48.5", 3467 | "windows_aarch64_msvc 0.48.5", 3468 | "windows_i686_gnu 0.48.5", 3469 | "windows_i686_msvc 0.48.5", 3470 | "windows_x86_64_gnu 0.48.5", 3471 | "windows_x86_64_gnullvm 0.48.5", 3472 | "windows_x86_64_msvc 0.48.5", 3473 | ] 3474 | 3475 | [[package]] 3476 | name = "windows-targets" 3477 | version = "0.52.6" 3478 | source = "registry+https://github.com/rust-lang/crates.io-index" 3479 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3480 | dependencies = [ 3481 | "windows_aarch64_gnullvm 0.52.6", 3482 | "windows_aarch64_msvc 0.52.6", 3483 | "windows_i686_gnu 0.52.6", 3484 | "windows_i686_gnullvm", 3485 | "windows_i686_msvc 0.52.6", 3486 | "windows_x86_64_gnu 0.52.6", 3487 | "windows_x86_64_gnullvm 0.52.6", 3488 | "windows_x86_64_msvc 0.52.6", 3489 | ] 3490 | 3491 | [[package]] 3492 | name = "windows_aarch64_gnullvm" 3493 | version = "0.48.5" 3494 | source = "registry+https://github.com/rust-lang/crates.io-index" 3495 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3496 | 3497 | [[package]] 3498 | name = "windows_aarch64_gnullvm" 3499 | version = "0.52.6" 3500 | source = "registry+https://github.com/rust-lang/crates.io-index" 3501 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3502 | 3503 | [[package]] 3504 | name = "windows_aarch64_msvc" 3505 | version = "0.48.5" 3506 | source = "registry+https://github.com/rust-lang/crates.io-index" 3507 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3508 | 3509 | [[package]] 3510 | name = "windows_aarch64_msvc" 3511 | version = "0.52.6" 3512 | source = "registry+https://github.com/rust-lang/crates.io-index" 3513 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3514 | 3515 | [[package]] 3516 | name = "windows_i686_gnu" 3517 | version = "0.48.5" 3518 | source = "registry+https://github.com/rust-lang/crates.io-index" 3519 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3520 | 3521 | [[package]] 3522 | name = "windows_i686_gnu" 3523 | version = "0.52.6" 3524 | source = "registry+https://github.com/rust-lang/crates.io-index" 3525 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3526 | 3527 | [[package]] 3528 | name = "windows_i686_gnullvm" 3529 | version = "0.52.6" 3530 | source = "registry+https://github.com/rust-lang/crates.io-index" 3531 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3532 | 3533 | [[package]] 3534 | name = "windows_i686_msvc" 3535 | version = "0.48.5" 3536 | source = "registry+https://github.com/rust-lang/crates.io-index" 3537 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3538 | 3539 | [[package]] 3540 | name = "windows_i686_msvc" 3541 | version = "0.52.6" 3542 | source = "registry+https://github.com/rust-lang/crates.io-index" 3543 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3544 | 3545 | [[package]] 3546 | name = "windows_x86_64_gnu" 3547 | version = "0.48.5" 3548 | source = "registry+https://github.com/rust-lang/crates.io-index" 3549 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3550 | 3551 | [[package]] 3552 | name = "windows_x86_64_gnu" 3553 | version = "0.52.6" 3554 | source = "registry+https://github.com/rust-lang/crates.io-index" 3555 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3556 | 3557 | [[package]] 3558 | name = "windows_x86_64_gnullvm" 3559 | version = "0.48.5" 3560 | source = "registry+https://github.com/rust-lang/crates.io-index" 3561 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3562 | 3563 | [[package]] 3564 | name = "windows_x86_64_gnullvm" 3565 | version = "0.52.6" 3566 | source = "registry+https://github.com/rust-lang/crates.io-index" 3567 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3568 | 3569 | [[package]] 3570 | name = "windows_x86_64_msvc" 3571 | version = "0.48.5" 3572 | source = "registry+https://github.com/rust-lang/crates.io-index" 3573 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3574 | 3575 | [[package]] 3576 | name = "windows_x86_64_msvc" 3577 | version = "0.52.6" 3578 | source = "registry+https://github.com/rust-lang/crates.io-index" 3579 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3580 | 3581 | [[package]] 3582 | name = "winnow" 3583 | version = "0.6.20" 3584 | source = "registry+https://github.com/rust-lang/crates.io-index" 3585 | checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" 3586 | dependencies = [ 3587 | "memchr", 3588 | ] 3589 | 3590 | [[package]] 3591 | name = "winreg" 3592 | version = "0.50.0" 3593 | source = "registry+https://github.com/rust-lang/crates.io-index" 3594 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 3595 | dependencies = [ 3596 | "cfg-if", 3597 | "windows-sys 0.48.0", 3598 | ] 3599 | 3600 | [[package]] 3601 | name = "wyz" 3602 | version = "0.5.1" 3603 | source = "registry+https://github.com/rust-lang/crates.io-index" 3604 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 3605 | dependencies = [ 3606 | "tap", 3607 | ] 3608 | 3609 | [[package]] 3610 | name = "zerocopy" 3611 | version = "0.7.35" 3612 | source = "registry+https://github.com/rust-lang/crates.io-index" 3613 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3614 | dependencies = [ 3615 | "byteorder", 3616 | "zerocopy-derive", 3617 | ] 3618 | 3619 | [[package]] 3620 | name = "zerocopy-derive" 3621 | version = "0.7.35" 3622 | source = "registry+https://github.com/rust-lang/crates.io-index" 3623 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3624 | dependencies = [ 3625 | "proc-macro2", 3626 | "quote", 3627 | "syn 2.0.79", 3628 | ] 3629 | 3630 | [[package]] 3631 | name = "zeroize" 3632 | version = "1.8.1" 3633 | source = "registry+https://github.com/rust-lang/crates.io-index" 3634 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3635 | 3636 | [[package]] 3637 | name = "zstd" 3638 | version = "0.13.2" 3639 | source = "registry+https://github.com/rust-lang/crates.io-index" 3640 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 3641 | dependencies = [ 3642 | "zstd-safe", 3643 | ] 3644 | 3645 | [[package]] 3646 | name = "zstd-safe" 3647 | version = "7.2.1" 3648 | source = "registry+https://github.com/rust-lang/crates.io-index" 3649 | checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" 3650 | dependencies = [ 3651 | "zstd-sys", 3652 | ] 3653 | 3654 | [[package]] 3655 | name = "zstd-sys" 3656 | version = "2.0.13+zstd.1.5.6" 3657 | source = "registry+https://github.com/rust-lang/crates.io-index" 3658 | checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" 3659 | dependencies = [ 3660 | "cc", 3661 | "pkg-config", 3662 | ] 3663 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "stakit-raids" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [lib] 7 | path = "src/lib.rs" 8 | 9 | [dependencies] 10 | anyhow = "1.0.71" 11 | actix-web = "4.3.1" 12 | dotenv = "0.15.0" 13 | serde = { version = "1.0.167", features = ["derive"] } 14 | reqwest = { version = "0.11.18", default-features = false, features = [ 15 | "json", 16 | "default-tls", 17 | "rustls-tls", 18 | "tokio-native-tls", 19 | ] } 20 | serde_json = "1.0.100" 21 | log = "0.4.19" 22 | apistos = { version = "0.2", features = [ 23 | "extras", 24 | "qs_query", 25 | "scalar", 26 | "multipart", 27 | "swagger-ui", 28 | ] } 29 | sqlx = { version = "0.7.0", default-features = false, features = [ 30 | "postgres", 31 | "macros", 32 | "chrono", 33 | "json", 34 | "uuid", 35 | "runtime-tokio-rustls", 36 | "bigdecimal", 37 | "migrate", 38 | ] } 39 | uuid = { version = "1.4.0", features = ["serde", "v4"] } 40 | chrono = { version = "0.4.26", features = ["serde"] } 41 | tokio = { version = "1.29.1", features = ["full"] } 42 | bigdecimal = { version = "0.3.0", features = ["serde"] } 43 | serenity = { version = "0.12.0", default-features = false, features = ["client", "gateway", "rustls_backend", "model"] } 44 | schemars = { package = "apistos-schemars", version = "0.8" } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Raiding Points System 2 | 3 | ## Overview 4 | 5 | The **Raiding Points System** allows projects to define custom raiding incentives that enable users to earn points through various social media interactions. Projects can configure how many points users will earn for specific actions such as: 6 | 7 | - Following a page 8 | - Liking posts 9 | - Reposting tweets 10 | - Commenting with a specific number of tags 11 | 12 | The system tracks the accumulation of points based on these user actions. It allows projects to customize the points awarded for each action and select different types of rewards, such as BRC-20 tokens, Runes, Inscriptions, or off-chain points. 13 | 14 | ### Key Features 15 | 16 | 1. **Raiding Points System** 17 | - Users earn points based on configurable actions like following, liking, reposting, and commenting. 18 | - Projects can define how many points are awarded for each action. 19 | - New tables will be created to store the user actions and points earned, alongside the existing user and project data. 20 | 21 | 2. **Customizable Rewards** 22 | - Projects can define the type of rewards users can earn based on their accumulated points. 23 | - Rewards can include on-chain tokens (e.g., BRC-20), runes, inscriptions, or off-chain points. 24 | - The system itself will handle only the point accrual process, leaving reward distribution as a separate feature handled by other components. 25 | 26 | 3. **Leaderboards** 27 | - Users can view leaderboards that show top participants based on the number of points they've earned. 28 | - Leaderboards are updated as users accumulate points from different interactions. 29 | 30 | ## Author 31 | [AnotherRusty](https://t.me/idioRusty) 32 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | pub enum Action { 2 | Following, 3 | Retweet, 4 | Like, 5 | Reply, 6 | } 7 | 8 | #[derive(Debug, Clone)] 9 | pub struct UserPoints { 10 | pub user_id: String, 11 | pub points: i32, 12 | } 13 | 14 | impl UserPoints { 15 | pub fn new(user_id: String, points: i32) -> Self { 16 | Self { user_id, points } 17 | } 18 | 19 | pub fn points(&self) -> i32 { 20 | self.points 21 | } 22 | 23 | pub fn set_points(&mut self, points: i32) { 24 | self.points = points; 25 | } 26 | 27 | pub fn add_points(&mut self, points: i32) { 28 | self.points += points; 29 | } 30 | } -------------------------------------------------------------------------------- /src/controllers/handlers/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod raids; -------------------------------------------------------------------------------- /src/controllers/handlers/raids.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{ 2 | web::{self, Data}, 3 | Error as ActixError, HttpResponse, 4 | }; 5 | use apistos::{api_operation, ApiComponent}; 6 | use schemars::JsonSchema; 7 | use serde::{Deserialize, Serialize}; 8 | use serde_json::Value; 9 | 10 | use crate::core::{ 11 | db::PgDb, 12 | discord::apis::{send_msg_channel, send_msg_to_owner}, 13 | staking_raids::queries::add_new_project, 14 | staking_raids_user::queries::{add_new_user, get_points_by_user_and_project, get_leaderboard_by_project}, 15 | }; 16 | 17 | #[derive(Serialize, Deserialize, JsonSchema, ApiComponent)] 18 | pub struct SendMsgRequest { 19 | guild_id: String, 20 | message_content: Value, 21 | } 22 | 23 | #[derive(Serialize, Deserialize, JsonSchema, ApiComponent)] 24 | pub struct ChannelMsgRequest { 25 | channel_id: String, 26 | message_content: Value, 27 | } 28 | 29 | #[derive(Serialize, Deserialize, JsonSchema, ApiComponent)] 30 | pub struct NewProject { 31 | project_id: String, 32 | tweet_ids: Option>, 33 | } 34 | 35 | #[derive(Serialize, Deserialize, JsonSchema, ApiComponent)] 36 | pub struct UserJoinPath { 37 | user_id: String, 38 | project_id: String, 39 | } 40 | 41 | #[derive(Serialize, Deserialize, JsonSchema, ApiComponent)] 42 | pub struct UserPointsPath { 43 | user_id: String, 44 | raid_id: String, 45 | } 46 | 47 | #[api_operation(summary = "Send message to server owner", tag = "user")] 48 | pub async fn post_send_msg_to_owner( 49 | payload: web::Json, 50 | ) -> Result { 51 | let guild_id = &payload.guild_id; 52 | let message_content = payload.message_content.clone(); 53 | 54 | match send_msg_to_owner(guild_id, message_content).await { 55 | Ok(_) => Ok(HttpResponse::Ok().json("Message sent successfully to the server owner.")), 56 | Err(e) => { 57 | eprintln!( 58 | "Failed to send message to the server owner. Guild ID: {}, Error: {}", 59 | guild_id, e 60 | ); 61 | Ok(HttpResponse::InternalServerError() 62 | .json("Failed to send message to the server owner.")) 63 | } 64 | } 65 | } 66 | 67 | #[api_operation(summary = "Send message to channel", tag = "user")] 68 | pub async fn post_send_msg_to_channel( 69 | payload: web::Json, 70 | ) -> Result { 71 | let channel_id = &payload.channel_id; 72 | let message_content = payload.message_content.clone(); 73 | 74 | match send_msg_channel(channel_id, message_content).await { 75 | Ok(_) => Ok(HttpResponse::Ok().json("Message sent successfully to the channel.")), 76 | Err(e) => { 77 | eprintln!( 78 | "Failed to send message to channel. Channel ID: {}, Error: {}", 79 | channel_id, e 80 | ); 81 | Ok(HttpResponse::InternalServerError().json("Failed to send message to the channel.")) 82 | } 83 | } 84 | } 85 | 86 | #[api_operation(summary = "create new project", tag = "user")] 87 | pub async fn create_new_project( 88 | db: Data, 89 | payload: web::Json, 90 | ) -> Result { 91 | let project_id = &payload.project_id; 92 | let tw_ids = &payload.tweet_ids; 93 | 94 | match add_new_project(db.pool(), project_id.clone(), tw_ids.clone()).await { 95 | Ok(raid) => Ok(HttpResponse::Ok().json(raid)), 96 | Err(e) => { 97 | eprintln!( 98 | "Failed to add new project to staking_raids table, Error: {}", 99 | e 100 | ); 101 | Ok(HttpResponse::InternalServerError() 102 | .json("Failed to add new project to staking_raids table")) 103 | } 104 | } 105 | } 106 | 107 | #[api_operation(summary = "join new project", tag = "user")] 108 | pub async fn join_project( 109 | db: Data, 110 | path: web::Path, 111 | ) -> Result { 112 | let user_id = &path.user_id; 113 | let project_id = &path.raid_id; 114 | 115 | match add_new_user(db.pool(), user_id.clone(), project_id.clone()).await { 116 | Ok(raid_user) => Ok(HttpResponse::Ok().json(raid_user)), 117 | Err(e) => { 118 | eprintln!( 119 | "Failed to add new user to staking_raids_user table, Error: {}", 120 | e 121 | ); 122 | Ok(HttpResponse::InternalServerError() 123 | .json("Failed to add new user to staking_raids_user")) 124 | } 125 | } 126 | } 127 | 128 | #[api_operation(summary = "get points by project and user", tag = "user")] 129 | pub async fn get_points( 130 | db: Data, 131 | path: web::Path, 132 | ) -> Result { 133 | let user_id = &path.user_id; 134 | let project_id = &path.project_id; 135 | 136 | match get_points_by_user_and_project(db.pool(), user_id.clone(), project_id.clone()).await { 137 | Ok(raid_user) => Ok(HttpResponse::Ok().json(raid_user)), 138 | Err(e) => { 139 | eprintln!("Failed to get user's points, Error: {}", e); 140 | Ok(HttpResponse::InternalServerError().json("Failed to get user's points")) 141 | } 142 | } 143 | } 144 | 145 | #[api_operation(summary = "track leaderboard by project", tag = "user")] 146 | pub async fn track_leaderboard( 147 | db: Data, 148 | path: web::Path, 149 | ) -> Result { 150 | let project_id = &path.into_inner(); 151 | 152 | match get_leaderboard_by_project(db.pool(), project_id.clone()).await { 153 | Ok(leaderboard) => Ok(HttpResponse::Ok().json(leaderboard)), 154 | Err(e) => { 155 | eprintln!( 156 | "Error retrieving leaderboard for project ID: {}: {:?}", 157 | project_id, e 158 | ); 159 | Ok(HttpResponse::InternalServerError().json("Error retrieving leaderboard")) 160 | } 161 | } 162 | } -------------------------------------------------------------------------------- /src/controllers/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod handlers; 2 | 3 | use apistos::web::{get, post, scope, Scope}; 4 | use handlers::raids::{ 5 | create_new_project, get_points, join_project, post_send_msg_to_channel, post_send_msg_to_owner, track_leaderboard, 6 | }; 7 | 8 | pub trait Controller { 9 | fn get_scope(path: &str) -> Scope; 10 | } 11 | pub struct RaidsController; 12 | 13 | impl Controller for RaidsController { 14 | fn get_scope(path: &str) -> Scope { 15 | scope(path) 16 | .service( 17 | Scope::new("/msg") 18 | .route("/owner", post().to(post_send_msg_to_owner)) 19 | .route("/channel", post().to(post_send_msg_to_channel)), 20 | ) 21 | .service(Scope::new("/create").route("", post().to(create_new_project))) 22 | .service( 23 | Scope::new("/project/join") 24 | .route("/{user_id}/{project_id}", get().to(join_project)), 25 | ) 26 | .service(Scope::new("/points").route("/{user_id}/{project_id}", get().to(get_points))) 27 | .service(Scope::new("/leaderboard").route("/{project_id}", get().to(track_leaderboard))) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/core/beta_users/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod queries; -------------------------------------------------------------------------------- /src/core/beta_users/queries.rs: -------------------------------------------------------------------------------- 1 | use chrono::NaiveDate; 2 | use serde::Serialize; 3 | use sqlx::PgPool; 4 | use uuid::Uuid; 5 | 6 | #[derive(Debug, Serialize)] 7 | pub struct User { 8 | pub id: Uuid, 9 | pub first_name: Option, 10 | pub last_name: Option, 11 | pub email: String, 12 | pub wallet_address: Option, 13 | pub twitter_id: Option, 14 | pub twitter_username: Option, 15 | pub username: Option, 16 | pub profile_img: Option, 17 | pub bio: Option, 18 | pub discord_username: Option, 19 | pub discord_follows: Option, 20 | pub telegram_id: Option, 21 | pub telegram_username: Option, 22 | pub linkedin_username: Option, 23 | pub approved: Option, 24 | pub signature: Option, 25 | pub birthday: Option, 26 | } 27 | 28 | pub async fn get_all_beta_users_twitter_ids(pool: &PgPool) -> Vec { 29 | let twitter_ids = sqlx::query_scalar!( 30 | r#" 31 | SELECT twitter_id 32 | FROM beta_users 33 | "# 34 | ) 35 | .fetch_all(pool) 36 | .await 37 | .unwrap_or_else(|_| Vec::new()); 38 | 39 | twitter_ids.into_iter().filter_map(|id| id).collect() 40 | } 41 | -------------------------------------------------------------------------------- /src/core/db.rs: -------------------------------------------------------------------------------- 1 | use anyhow::{Context, Result}; 2 | use sqlx::{ 3 | pool::PoolConnection, 4 | postgres::{PgPool, PgPoolOptions}, 5 | Postgres, 6 | }; 7 | 8 | #[derive(Debug)] 9 | pub struct PgDb(PgPool); 10 | 11 | impl PgDb { 12 | pub async fn new(connection_uri: &String) -> Result { 13 | let pool = PgPoolOptions::new() 14 | .max_connections(10) 15 | .connect(&connection_uri) 16 | .await 17 | .context("Failed to connect to PostgreSQL.")?; 18 | Ok(Self(pool)) 19 | } 20 | 21 | pub fn pool(&self) -> &PgPool { 22 | &self.0 23 | } 24 | 25 | pub async fn conn(&self) -> Result> { 26 | let conn = self 27 | .0 28 | .acquire() 29 | .await 30 | .context("Failed to acquire connection.")?; 31 | Ok(conn) 32 | } 33 | } -------------------------------------------------------------------------------- /src/core/discord/apis.rs: -------------------------------------------------------------------------------- 1 | use crate::env::Vars; 2 | use log::{debug, error, info}; 3 | use reqwest::Client; 4 | use serde_json::{json, Value}; 5 | use std::{error::Error, fmt}; 6 | 7 | #[derive(Debug)] 8 | pub struct DiscordError(String); 9 | 10 | impl fmt::Display for DiscordError { 11 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 12 | write!(f, "{}", self.0) 13 | } 14 | } 15 | 16 | impl Error for DiscordError {} 17 | 18 | pub async fn send_msg_channel( 19 | channel_id: &str, 20 | message_content: Value, 21 | ) -> Result<(), Box> { 22 | // Load bot token from environment variables. 23 | let bot_token = Vars::load() 24 | .map_err(|_| DiscordError("Failed to load environment variables".into()))? 25 | .discord_bot_token; 26 | 27 | // Construct Discord API endpoint URL. 28 | let discord_api_url = format!( 29 | "https://discord.com/api/v10/channels/{}/messages", 30 | channel_id 31 | ); 32 | 33 | // Create an HTTP client instance. 34 | let client = Client::new(); 35 | 36 | // Send a POST request to the Discord API with JSON payload. 37 | let response = client 38 | .post(&discord_api_url) 39 | .header("Authorization", format!("Bot {}", bot_token)) 40 | .header("Content-Type", "application/json") 41 | .json(&message_content) // Pass the structured JSON content directly. 42 | .send() 43 | .await 44 | .map_err(|e| DiscordError(format!("Failed to send request: {}", e)))?; 45 | 46 | if response.status().is_success() { 47 | println!("Message sent successfully to channel ID: {}", channel_id); 48 | } else { 49 | let error_text = response 50 | .text() 51 | .await 52 | .unwrap_or_else(|_| "Unknown error".into()); 53 | return Err(Box::new(DiscordError(format!( 54 | "Failed to send message: {}", 55 | error_text 56 | )))); 57 | } 58 | 59 | Ok(()) 60 | } 61 | 62 | pub async fn send_msg_to_owner( 63 | guild_id: &str, 64 | message_content: Value, 65 | ) -> Result<(), Box> { 66 | let bot_token = Vars::load() 67 | .map_err(|_| DiscordError("Failed to load environment variables".into()))? 68 | .discord_bot_token; 69 | 70 | let client = Client::new(); 71 | 72 | // Retrieve server (guild) information to get owner ID 73 | let guild_url = format!("https://discord.com/api/v10/guilds/{}", guild_id); 74 | let guild_response = client 75 | .get(&guild_url) 76 | .header("Authorization", format!("Bot {}", bot_token)) 77 | .send() 78 | .await 79 | .map_err(|e| { 80 | error!("Failed to fetch guild information: {}", e); 81 | DiscordError("Failed to fetch guild information".into()) 82 | })? 83 | .json::() 84 | .await?; 85 | 86 | let owner_id = guild_response["owner_id"] 87 | .as_str() 88 | .ok_or_else(|| DiscordError("Owner ID not found in guild response".into()))?; 89 | 90 | debug!("Retrieved owner ID: {}", owner_id); 91 | 92 | // Create a DM channel with the owner 93 | let dm_channel_url = "https://discord.com/api/v10/users/@me/channels"; 94 | let dm_response = client 95 | .post(dm_channel_url) 96 | .header("Authorization", format!("Bot {}", bot_token)) 97 | .json(&json!({ "recipient_id": owner_id })) 98 | .send() 99 | .await 100 | .map_err(|e| { 101 | error!("Failed to create DM channel with owner: {}", e); 102 | DiscordError("Failed to create DM channel".into()) 103 | })? 104 | .json::() 105 | .await?; 106 | 107 | let dm_channel_id = dm_response["id"] 108 | .as_str() 109 | .ok_or_else(|| DiscordError("DM Channel ID not found in response".into()))?; 110 | 111 | debug!("DM Channel ID for owner: {}", dm_channel_id); 112 | 113 | // Send a message to the DM channel 114 | let message_url = format!( 115 | "https://discord.com/api/v10/channels/{}/messages", 116 | dm_channel_id 117 | ); 118 | let response = client 119 | .post(&message_url) 120 | .header("Authorization", format!("Bot {}", bot_token)) 121 | .header("Content-Type", "application/json") 122 | .json(&message_content) 123 | .send() 124 | .await 125 | .map_err(|e| { 126 | error!("Failed to send message to DM channel: {}", e); 127 | DiscordError("Failed to send message to DM channel".into()) 128 | })?; 129 | 130 | if response.status().is_success() { 131 | info!("Message sent successfully to the server owner."); 132 | } else { 133 | error!( 134 | "Failed to send message, status: {}, response: {:?}", 135 | response.status(), 136 | response.text().await 137 | ); 138 | } 139 | 140 | Ok(()) 141 | } 142 | -------------------------------------------------------------------------------- /src/core/discord/bot.rs: -------------------------------------------------------------------------------- 1 | use crate::env::Vars; 2 | use serenity::async_trait; 3 | use serenity::model::channel::Message; 4 | use serenity::model::gateway::Ready; 5 | use serenity::prelude::*; 6 | 7 | struct Handler; 8 | 9 | #[async_trait] 10 | impl EventHandler for Handler { 11 | async fn message(&self, ctx: Context, msg: Message) { 12 | if msg.content == "!ping" { 13 | if let Err(why) = msg.channel_id.say(&ctx.http, "Pong!").await { 14 | println!("Error sending message: {why:?}"); 15 | } 16 | } 17 | } 18 | 19 | async fn ready(&self, _: Context, ready: Ready) { 20 | println!("{} is connected!", ready.user.name); 21 | } 22 | } 23 | 24 | pub async fn run_bot() { 25 | // Attempt to load environment variables 26 | let vars = match Vars::load() { 27 | Ok(vars) => vars, 28 | Err(_) => { 29 | println!("Failed to load environment variables"); 30 | return; 31 | } 32 | }; 33 | 34 | // Get the Discord bot token 35 | let token = &vars.discord_bot_token; 36 | 37 | // Define the intents required for the bot 38 | let intents = GatewayIntents::GUILD_MESSAGES 39 | | GatewayIntents::DIRECT_MESSAGES 40 | | GatewayIntents::MESSAGE_CONTENT; 41 | 42 | // Create a new instance of the client 43 | let mut client = match Client::builder(token, intents).event_handler(Handler).await { 44 | Ok(client) => client, 45 | Err(why) => { 46 | println!("Error creating client: {why:?}"); 47 | return; 48 | } 49 | }; 50 | 51 | // Start the client and handle any potential errors 52 | if let Err(why) = client.start().await { 53 | println!("Client error: {why:?}"); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/core/discord/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod bot; 2 | pub mod apis; -------------------------------------------------------------------------------- /src/core/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod points_calc; 2 | pub mod staking_raids; 3 | pub mod staking_raids_user; 4 | pub mod beta_users; 5 | pub mod xapis; 6 | pub mod db; 7 | pub mod discord; -------------------------------------------------------------------------------- /src/core/points_calc/calc.rs: -------------------------------------------------------------------------------- 1 | use tokio::time::{interval, Duration}; 2 | use crate::{ 3 | config::Action, 4 | core::{ 5 | db::PgDb, 6 | staking_raids::queries::get_all_raids, 7 | staking_raids_user::queries::{ 8 | add_new_user_with_following_pts, add_new_user_with_tw_retweet_pts, get_all_raid_users, get_raid_user_by_project_and_user, update_raid_user_following_pts, update_raid_user_tw_replying_pts, update_raid_user_tw_retweet_pts 9 | }, 10 | xapis::{ 11 | following_users::get_following_users, replying_users::get_replying_users, 12 | retweeted_users::get_retweeted_users, 13 | }, 14 | }, 15 | }; 16 | use actix_web::web::Data; 17 | use bigdecimal::BigDecimal; 18 | 19 | fn get_bonus_points(action: &Action) -> BigDecimal { 20 | match action { 21 | Action::Following => BigDecimal::from(10), 22 | Action::Retweet => BigDecimal::from(5), 23 | Action::Like => BigDecimal::from(3), 24 | Action::Reply => BigDecimal::from(4), 25 | } 26 | } 27 | 28 | async fn add_following_points( 29 | db: Data, 30 | user_id: String, 31 | project_id: String 32 | ) { 33 | let followers = get_following_users(&project_id).await; 34 | 35 | if followers.contains(&user_id) { 36 | // Attempt to fetch the raid user 37 | let raid_user = match get_raid_user_by_project_and_user( 38 | db.pool(), 39 | user_id.clone(), // clone beta_user for the query 40 | project_id.clone(), // clone project_id for the query 41 | ) 42 | .await 43 | { 44 | Ok(user) => user, 45 | Err(e) => { 46 | eprintln!("Error fetching raid user by project and user ID: {:?}", e); 47 | return; 48 | } 49 | }; 50 | 51 | match raid_user { 52 | Some(raid_user) => { 53 | if let Err(e) = update_raid_user_following_pts( 54 | db.pool(), 55 | raid_user.user_id, 56 | raid_user.project_id, 57 | get_bonus_points(&Action::Following), 58 | ) 59 | .await 60 | { 61 | eprintln!("Failed to update following points. Error: {:?}", e); 62 | } 63 | } 64 | None => { 65 | if let Err(e) = add_new_user_with_following_pts( 66 | db.pool(), 67 | user_id.clone(), 68 | project_id.clone(), 69 | get_bonus_points(&Action::Following), 70 | ) 71 | .await 72 | { 73 | eprintln!("Failed to add new raid user with following points for beta user. Error: {:?}", e); 74 | } 75 | } 76 | } 77 | } 78 | } 79 | 80 | async fn add_tweet_replying_points( 81 | db: Data, 82 | user_id: String, 83 | project_id: String, 84 | tweet_id: String, 85 | ) { 86 | let replying_users = get_replying_users(&tweet_id).await; 87 | 88 | if replying_users.contains(&user_id) { 89 | let raid_user = match get_raid_user_by_project_and_user( 90 | db.pool(), 91 | user_id.clone(), // clone beta_user for the query 92 | project_id.clone(), // clone project_id for the query 93 | ) 94 | .await 95 | { 96 | Ok(user) => user, 97 | Err(e) => { 98 | eprintln!("Error fetching raid user by project and user ID: {:?}", e); 99 | return; 100 | } 101 | }; 102 | match raid_user { 103 | Some(raid_user) => { 104 | if let Err(e) = update_raid_user_tw_replying_pts( 105 | db.pool(), 106 | raid_user.user_id, 107 | raid_user.project_id, 108 | get_bonus_points(&Action::Reply), 109 | ) 110 | .await 111 | { 112 | eprintln!("Failed to update following points. Error: {:?}", e); 113 | } 114 | } 115 | None => { 116 | if let Err(e) = add_new_user_with_following_pts( 117 | db.pool(), 118 | user_id.clone(), 119 | project_id.clone(), 120 | get_bonus_points(&Action::Reply), 121 | ) 122 | .await 123 | { 124 | eprintln!("Failed to add new raid user with following points for beta user. Error: {:?}", e); 125 | } 126 | } 127 | } 128 | } 129 | } 130 | 131 | async fn add_tw_retweet_points( 132 | db: Data, 133 | user_id: String, 134 | project_id: String, 135 | tweet_id: String, 136 | ) { 137 | let retweet_users = get_retweeted_users(&tweet_id).await; 138 | 139 | if retweet_users.contains(&user_id) { 140 | let raid_user = match get_raid_user_by_project_and_user( 141 | db.pool(), 142 | user_id.clone(), // clone beta_user for the query 143 | project_id.clone(), // clone project_id for the query 144 | ) 145 | .await 146 | { 147 | Ok(user) => user, 148 | Err(e) => { 149 | eprintln!("Error fetching raid user by project and user ID: {:?}", e); 150 | return; 151 | } 152 | }; 153 | match raid_user { 154 | Some(raid_user) => { 155 | if let Err(e) = update_raid_user_tw_retweet_pts( 156 | db.pool(), 157 | raid_user.user_id, 158 | raid_user.project_id, 159 | get_bonus_points(&Action::Retweet), 160 | ) 161 | .await 162 | { 163 | eprintln!("Failed to update following points. Error: {:?}", e); 164 | } 165 | } 166 | None => { 167 | if let Err(e) = add_new_user_with_tw_retweet_pts( 168 | db.pool(), 169 | user_id.clone(), 170 | project_id.clone(), 171 | get_bonus_points(&Action::Retweet), 172 | ) 173 | .await 174 | { 175 | eprintln!("Failed to add new raid user with following points for beta user. Error: {:?}", e); 176 | } 177 | } 178 | } 179 | } 180 | } 181 | 182 | async fn add_points(db: Data) { 183 | let raids = match get_all_raids(db.pool()).await { 184 | Ok(raids) => raids, 185 | Err(e) => { 186 | eprintln!("Error fetching all raids: {:?}", e); 187 | return; 188 | } 189 | }; 190 | 191 | let raid_users = match get_all_raid_users(db.pool()).await { 192 | Ok(raid_users) => raid_users, 193 | Err(e) => { 194 | eprintln!("Error fetching all raid users: {:?}", e); 195 | return; 196 | } 197 | }; 198 | 199 | for raid in &raids { 200 | for raid_user in &raid_users { 201 | if raid.project_id == raid_user.project_id { 202 | let _ = add_following_points(db.clone(), raid_user.user_id.clone(), raid.project_id.clone()); 203 | if let Some(tw_ids) = &raid.tw_ids { 204 | for tw_id in tw_ids { 205 | let _= add_tweet_replying_points(db.clone(), raid_user.user_id.clone(), raid.project_id.clone(), tw_id.clone()); 206 | let _= add_tw_retweet_points(db.clone(), raid_user.user_id.clone(), raid.project_id.clone(), tw_id.clone()); 207 | } 208 | } 209 | } 210 | } 211 | } 212 | } 213 | 214 | pub async fn run_points_calc_system(db: Data) { 215 | let mut interval = interval(Duration::from_secs(1800)); 216 | 217 | loop { 218 | interval.tick().await; 219 | 220 | let db_clone = db.clone(); 221 | 222 | tokio::spawn(async move { 223 | let _= add_points(db_clone); 224 | }); 225 | } 226 | } 227 | -------------------------------------------------------------------------------- /src/core/points_calc/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod calc; -------------------------------------------------------------------------------- /src/core/staking_raids/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod queries; -------------------------------------------------------------------------------- /src/core/staking_raids/queries.rs: -------------------------------------------------------------------------------- 1 | use bigdecimal::BigDecimal; 2 | use serde::Serialize; 3 | use sqlx::{PgPool, Result}; 4 | use uuid::Uuid; 5 | 6 | #[derive(Debug, Serialize)] 7 | pub struct LeaderBoard { 8 | user_id: Option, 9 | total_pt: Option, 10 | rank: Option, 11 | } 12 | 13 | #[derive(Debug, Serialize)] 14 | pub struct Raid { 15 | pub id: Uuid, 16 | pub project_id: String, 17 | pub tw_ids: Option>, 18 | } 19 | 20 | pub async fn add_new_project( 21 | pool: &PgPool, 22 | project_id: String, 23 | tw_ids: Option>, 24 | ) -> Result { 25 | let inserted_row = sqlx::query_as!( 26 | Raid, 27 | r#" 28 | INSERT INTO staking_raids (project_id, tw_ids) 29 | VALUES ($1, $2) 30 | RETURNING id, project_id, tw_ids 31 | "#, 32 | project_id, 33 | tw_ids.as_deref() 34 | ) 35 | .fetch_one(pool) 36 | .await?; 37 | 38 | Ok(inserted_row) 39 | } 40 | 41 | pub async fn get_all_raids( 42 | pool: &PgPool, 43 | ) -> Result> { 44 | let raids = sqlx::query_as!( 45 | Raid, 46 | r#" 47 | SELECT * 48 | FROM staking_raids 49 | "#, 50 | ) 51 | .fetch_all(pool) 52 | .await?; 53 | 54 | Ok(raids) 55 | } 56 | -------------------------------------------------------------------------------- /src/core/staking_raids_user/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod queries; -------------------------------------------------------------------------------- /src/core/staking_raids_user/queries.rs: -------------------------------------------------------------------------------- 1 | use bigdecimal::BigDecimal; 2 | use sqlx::{PgPool, Result}; 3 | use serde::Serialize; 4 | 5 | #[derive(Debug, Serialize)] 6 | pub struct RaidUser { 7 | pub user_id: String, 8 | pub pt_by_following: BigDecimal, 9 | pub pt_by_liking: BigDecimal, 10 | pub pt_by_retweet: BigDecimal, 11 | pub pt_by_replying: BigDecimal, 12 | pub total_pt: BigDecimal, 13 | pub project_id: String, 14 | } 15 | 16 | pub async fn add_new_user( 17 | pool: &PgPool, 18 | user_id: String, 19 | project_id: String, 20 | ) -> Result { 21 | let inserted_raid_user = sqlx::query_as!( 22 | RaidUser, 23 | r#" 24 | INSERT INTO staking_raids_user (user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id) 25 | VALUES ($1, $2, $3, $4, $5, $6, $7) 26 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 27 | "#, 28 | user_id, 29 | BigDecimal::from(0), 30 | BigDecimal::from(0), 31 | BigDecimal::from(0), 32 | BigDecimal::from(0), 33 | BigDecimal::from(0), 34 | project_id 35 | ) 36 | .fetch_one(pool) 37 | .await?; 38 | 39 | Ok(inserted_raid_user) 40 | } 41 | 42 | pub async fn add_new_user_with_following_pts( 43 | pool: &PgPool, 44 | user_id: String, 45 | project_id: String, 46 | new_following_points: BigDecimal 47 | ) -> Result { 48 | let inserted_raid_user = sqlx::query_as!( 49 | RaidUser, 50 | r#" 51 | INSERT INTO staking_raids_user (user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id) 52 | VALUES ($1, $2, $3, $4, $5, $6, $7) 53 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 54 | "#, 55 | user_id, 56 | BigDecimal::from(0), 57 | BigDecimal::from(0), 58 | BigDecimal::from(0), 59 | new_following_points, 60 | new_following_points, 61 | project_id 62 | ) 63 | .fetch_one(pool) 64 | .await?; 65 | 66 | Ok(inserted_raid_user) 67 | } 68 | 69 | pub async fn add_new_user_with_tw_replying_pts( 70 | pool: &PgPool, 71 | user_id: String, 72 | project_id: String, 73 | new_tw_replying_points: BigDecimal 74 | ) -> Result { 75 | let inserted_raid_user = sqlx::query_as!( 76 | RaidUser, 77 | r#" 78 | INSERT INTO staking_raids_user (user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id) 79 | VALUES ($1, $2, $3, $4, $5, $6, $7) 80 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 81 | "#, 82 | user_id, 83 | BigDecimal::from(0), 84 | BigDecimal::from(0), 85 | BigDecimal::from(0), 86 | new_tw_replying_points, 87 | new_tw_replying_points, 88 | project_id 89 | ) 90 | .fetch_one(pool) 91 | .await?; 92 | 93 | Ok(inserted_raid_user) 94 | } 95 | 96 | pub async fn add_new_user_with_tw_retweet_pts( 97 | pool: &PgPool, 98 | user_id: String, 99 | project_id: String, 100 | new_tw_retweet_points: BigDecimal 101 | ) -> Result { 102 | let inserted_raid_user = sqlx::query_as!( 103 | RaidUser, 104 | r#" 105 | INSERT INTO staking_raids_user (user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id) 106 | VALUES ($1, $2, $3, $4, $5, $6, $7) 107 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 108 | "#, 109 | user_id, 110 | BigDecimal::from(0), 111 | BigDecimal::from(0), 112 | new_tw_retweet_points, 113 | BigDecimal::from(0), 114 | new_tw_retweet_points, 115 | project_id 116 | ) 117 | .fetch_one(pool) 118 | .await?; 119 | 120 | Ok(inserted_raid_user) 121 | } 122 | 123 | pub async fn get_all_raid_users( 124 | pool: &PgPool, 125 | ) -> Result> { 126 | let raid_users = sqlx::query_as!( 127 | RaidUser, 128 | r#" 129 | SELECT * 130 | FROM staking_raids_user 131 | "#, 132 | ) 133 | .fetch_all(pool) 134 | .await?; 135 | 136 | Ok(raid_users) 137 | } 138 | 139 | pub async fn get_points_by_user_and_project( 140 | pool: &PgPool, 141 | user_id: String, 142 | project_id: String, 143 | ) -> Result { 144 | let points = sqlx::query_as!( 145 | RaidUser, 146 | r#" 147 | SELECT * 148 | FROM staking_raids_user 149 | WHERE user_id = $1 AND project_id = $2 150 | "#, 151 | user_id, 152 | project_id 153 | ) 154 | .fetch_one(pool) 155 | .await?; 156 | 157 | Ok(points) 158 | } 159 | 160 | pub async fn get_raid_user_by_project_and_user( 161 | pool: &PgPool, 162 | user_id: String, 163 | project_id: String 164 | ) -> Result> { 165 | let user = sqlx::query_as!( 166 | RaidUser, 167 | r#" 168 | SELECT * 169 | FROM staking_raids_user 170 | WHERE user_id = $1 AND project_id = $2 171 | "#, 172 | user_id, 173 | project_id 174 | ) 175 | .fetch_optional(pool) 176 | .await?; 177 | 178 | Ok(user) 179 | } 180 | 181 | pub async fn get_leaderboard_by_project( 182 | pool: &PgPool, 183 | project_id: String, 184 | ) -> Result, sqlx::Error> { 185 | let users = sqlx::query_as!( 186 | RaidUser, 187 | r#" 188 | SELECT * 189 | FROM staking_raids_user 190 | WHERE project_id = $1 191 | ORDER BY total_pt DESC 192 | LIMIT 1 193 | "#, 194 | project_id 195 | ) 196 | .fetch_all(pool) 197 | .await?; 198 | 199 | Ok(users) 200 | } 201 | 202 | pub async fn update_raid_user_following_pts( 203 | pool: &PgPool, 204 | user_id: String, 205 | project_id: String, 206 | new_following_pts: BigDecimal, 207 | ) -> Result { 208 | let updated_raid_user = sqlx::query_as!( 209 | RaidUser, 210 | r#" 211 | UPDATE staking_raids_user 212 | SET pt_by_following = $1 213 | WHERE user_id = $2 AND project_id = $3 214 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 215 | "#, 216 | new_following_pts, 217 | user_id, 218 | project_id 219 | ) 220 | .fetch_one(pool) 221 | .await?; 222 | 223 | Ok(updated_raid_user) 224 | } 225 | 226 | pub async fn update_raid_user_tw_replying_pts( 227 | pool: &PgPool, 228 | user_id: String, 229 | project_id: String, 230 | new_tw_replying_pts: BigDecimal, 231 | ) -> Result { 232 | let updated_raid_user = sqlx::query_as!( 233 | RaidUser, 234 | r#" 235 | UPDATE staking_raids_user 236 | SET pt_by_replying = $1 237 | WHERE user_id = $2 AND project_id = $3 238 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 239 | "#, 240 | new_tw_replying_pts, 241 | user_id, 242 | project_id 243 | ) 244 | .fetch_one(pool) 245 | .await?; 246 | 247 | Ok(updated_raid_user) 248 | } 249 | 250 | pub async fn update_raid_user_tw_retweet_pts( 251 | pool: &PgPool, 252 | user_id: String, 253 | project_id: String, 254 | new_tw_retweet_pts: BigDecimal 255 | ) -> Result { 256 | let updated_raid_user = sqlx::query_as!( 257 | RaidUser, 258 | r#" 259 | UPDATE staking_raids_user 260 | SET pt_by_retweet = $1 261 | WHERE user_id = $2 AND project_id = $3 262 | RETURNING user_id, pt_by_following, pt_by_liking, pt_by_retweet, pt_by_replying, total_pt, project_id 263 | "#, 264 | new_tw_retweet_pts, 265 | user_id, 266 | project_id 267 | ) 268 | .fetch_one(pool) 269 | .await?; 270 | 271 | Ok(updated_raid_user) 272 | } 273 | 274 | -------------------------------------------------------------------------------- /src/core/xapis/following_users.rs: -------------------------------------------------------------------------------- 1 | use crate::env::Vars; 2 | use reqwest; 3 | use reqwest::header::{HeaderMap, HeaderValue}; 4 | use serde_json::Value; 5 | use tokio::time::{sleep, Duration}; 6 | 7 | pub async fn get_following_users(user_id: &str) -> Vec { 8 | // Load Env Variables 9 | let vars = match Vars::load() { 10 | Ok(vars) => vars, 11 | Err(_) => { 12 | println!("Failed to load environment variables"); 13 | return Vec::new(); 14 | } 15 | }; 16 | 17 | let mut followers_id: Vec = Vec::new(); 18 | let mut cursor: String = String::new(); 19 | let mut has_next_cursor: bool = true; 20 | 21 | while has_next_cursor { 22 | /* 23 | please contact the author of this project. 24 | 25 | Contact info 26 | 27 | Telegram: https://t.me/idioRusty 28 | */ 29 | } 30 | println!("length: {}", followers_id.len()); 31 | followers_id 32 | } 33 | -------------------------------------------------------------------------------- /src/core/xapis/liking_users.rs: -------------------------------------------------------------------------------- 1 | /* 2 | please contact the author of this project. 3 | 4 | Contact info 5 | 6 | Telegram: https://t.me/idioRusty 7 | */ -------------------------------------------------------------------------------- /src/core/xapis/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod retweeted_users; 2 | pub mod liking_users; 3 | pub mod replying_users; 4 | pub mod following_users; -------------------------------------------------------------------------------- /src/core/xapis/replying_users.rs: -------------------------------------------------------------------------------- 1 | use crate::env::Vars; 2 | use reqwest::{ 3 | self, 4 | header::{HeaderMap, HeaderValue}, 5 | }; 6 | use serde_json::Value; 7 | use tokio::time::{sleep, Duration}; 8 | 9 | pub async fn get_replying_users(tweet_id: &str) -> Vec { 10 | let vars = match Vars::load() { 11 | Ok(vars) => vars, 12 | Err(_) => { 13 | println!("Failed to load environment variables."); 14 | return Vec::new(); 15 | } 16 | }; 17 | 18 | let mut user_ids: Vec = Vec::new(); 19 | let mut has_next_cursor = true; 20 | let mut cursor = String::new(); 21 | 22 | while has_next_cursor { 23 | /* 24 | please contact the author of this project. 25 | 26 | Contact info 27 | 28 | Telegram: https://t.me/idioRusty 29 | */ 30 | } 31 | 32 | user_ids 33 | } 34 | -------------------------------------------------------------------------------- /src/core/xapis/retweeted_users.rs: -------------------------------------------------------------------------------- 1 | use crate::env::Vars; 2 | use reqwest; 3 | use reqwest::header::{HeaderMap, HeaderValue}; 4 | use serde_json::Value; 5 | use tokio::time::{sleep, Duration}; 6 | 7 | pub async fn get_retweeted_users(tweet_id: &str) -> Vec { 8 | // Load Env Variables 9 | let vars = match Vars::load() { 10 | Ok(vars) => vars, 11 | Err(_) => { 12 | println!("Failed to load environment variables"); 13 | return Vec::new(); 14 | } 15 | }; 16 | 17 | let count = 50; 18 | let mut user_ids: Vec = Vec::new(); 19 | let mut cursor = String::new(); 20 | let mut has_next_cursor = true; 21 | 22 | while has_next_cursor { 23 | /* 24 | please contact the author of this project. 25 | 26 | Contact info 27 | 28 | Telegram: https://t.me/idioRusty 29 | */ 30 | } 31 | 32 | println!("Length: {}", user_ids.len()); 33 | user_ids 34 | } 35 | -------------------------------------------------------------------------------- /src/env.rs: -------------------------------------------------------------------------------- 1 | use std::str::FromStr; 2 | 3 | #[derive(Debug, Clone)] 4 | pub struct Vars { 5 | pub application_host: String, 6 | pub application_port: u16, 7 | pub postgres_host: String, 8 | pub postgres_port: u16, 9 | pub postgres_user: String, 10 | pub postgres_password: String, 11 | pub postgres_database: String, 12 | pub rapid_api_key: String, 13 | pub rapid_galvier_api_host: String, 14 | pub rapid_davethebeast_api_host: String, 15 | pub native_x_api_key: String, 16 | pub native_x_bear_token: String, 17 | pub discord_bot_token: String, 18 | } 19 | 20 | impl Vars { 21 | pub fn load() -> Result { 22 | Ok(Self { 23 | application_host: load_var("APPLICATION_HOST")?, 24 | application_port: load_var("PORT")?, 25 | postgres_user: load_var("POSTGRES_USER")?, 26 | postgres_password: load_var("POSTGRES_PASSWORD")?, 27 | postgres_host: load_var("POSTGRES_HOST")?, 28 | postgres_port: load_var("POSTGRES_PORT")?, 29 | postgres_database: load_var("POSTGRES_DATABASE")?, 30 | rapid_api_key: load_var("RAPID_X_API_KEY")?, 31 | rapid_galvier_api_host: load_var("RAPID_GLAVIER_X_API_HOST")?, 32 | rapid_davethebeast_api_host: load_var("RAPID_DAVETHEBEAST_X_API_HOST")?, 33 | native_x_api_key: load_var("NATIVE_X_API_KEY")?, 34 | native_x_bear_token: load_var("NATIVE_X_BEARER_TOKEN")?, 35 | discord_bot_token: load_var("DISCORD_TOKEN")? 36 | }) 37 | } 38 | 39 | pub fn get_postgres_connection_uri(&self) -> String { 40 | format!( 41 | "postgres://{}:{}@{}:{}/{}", 42 | self.postgres_user, 43 | self.postgres_password, 44 | self.postgres_host, 45 | self.postgres_port, 46 | self.postgres_database 47 | ) 48 | } 49 | } 50 | 51 | fn load_var(name: &str) -> Result 52 | where 53 | ::Err: Sync + Send + std::error::Error + 'static, 54 | T: FromStr, 55 | { 56 | std::env::var(name) 57 | .map_err(|e| { 58 | std::io::Error::new( 59 | std::io::ErrorKind::Other, 60 | format!("Error loading env var '{}': {}", name, e), 61 | ) 62 | }) 63 | .and_then(|value| { 64 | value.parse().map_err(|e| { 65 | std::io::Error::new( 66 | std::io::ErrorKind::Other, 67 | format!("Error parsing env var '{}': {}", name, e), 68 | ) 69 | }) 70 | }) 71 | } -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod core; 2 | pub mod controllers; 3 | pub mod server; 4 | pub mod env; 5 | pub mod config; -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use stakit_raids::env::Vars; 2 | use stakit_raids::server::Application; 3 | 4 | #[actix_web::main] 5 | pub async fn main() -> Result<(), std::io::Error> { 6 | dotenv::dotenv().ok(); 7 | println!("Loading environment variables..."); 8 | let vars = Vars::load()?; 9 | 10 | let application = Application::build(vars).await?; 11 | 12 | let vars = Vars::load()?; 13 | println!("Starting API on port {}...", vars.application_port); 14 | application.run_until_stopped().await?; 15 | Ok(()) 16 | } 17 | -------------------------------------------------------------------------------- /src/server.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{dev::Server, web::Data, App, HttpServer}; 2 | use std::net::TcpListener; 3 | 4 | use crate::{ 5 | controllers::{Controller, RaidsController}, 6 | env::Vars, 7 | }; 8 | 9 | use crate::core::db::PgDb; 10 | 11 | pub struct Application { 12 | port: u16, 13 | server: Server, 14 | } 15 | 16 | impl Application { 17 | pub async fn build(vars: Vars) -> Result { 18 | let postgres_uri = vars.get_postgres_connection_uri(); 19 | println!("Connecting to Postgres: {}", postgres_uri); 20 | let pg_db = PgDb::new(&vars.get_postgres_connection_uri()) 21 | .await 22 | .expect("Failed to connect to PostgreSQL."); 23 | let address = format!("{}:{}", vars.application_host, vars.application_port); 24 | let listener = TcpListener::bind(address).expect("Failed to bind address."); 25 | let port = listener.local_addr().unwrap().port(); 26 | 27 | let server = run(listener, pg_db)?; 28 | 29 | Ok(Self { port, server }) 30 | } 31 | 32 | pub fn port(&self) -> u16 { 33 | self.port 34 | } 35 | 36 | pub async fn run_until_stopped(self) -> Result<(), std::io::Error> { 37 | self.server.await 38 | } 39 | } 40 | 41 | pub fn run(listener: TcpListener, pg_pool: PgDb) -> Result { 42 | let pg_db = Data::new(pg_pool); 43 | let server = HttpServer::new(move || { 44 | App::new() 45 | .app_data(pg_db.clone()) 46 | .service(RaidsController::get_scope("/raids")) 47 | }) 48 | .listen(listener)? 49 | .run(); 50 | 51 | Ok(server) 52 | } 53 | --------------------------------------------------------------------------------