this repo has no description
3
fork

Configure Feed

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

Initial commit

roufpup e2dd5a0c

+2555
+3
.cargo/config.toml
··· 1 + [target.x86_64-unknown-linux-gnu] 2 + linker = "clang" 3 + rustflags = ["-Clink-arg=--ld-path=wild"]
+1
.envrc
··· 1 + use_nix
+2
.gitignore
··· 1 + /target 2 + .direnv/
+1675
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "aho-corasick" 7 + version = "1.1.4" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 10 + dependencies = [ 11 + "memchr", 12 + ] 13 + 14 + [[package]] 15 + name = "anstream" 16 + version = "0.6.21" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 19 + dependencies = [ 20 + "anstyle", 21 + "anstyle-parse", 22 + "anstyle-query", 23 + "anstyle-wincon", 24 + "colorchoice", 25 + "is_terminal_polyfill", 26 + "utf8parse", 27 + ] 28 + 29 + [[package]] 30 + name = "anstyle" 31 + version = "1.0.13" 32 + source = "registry+https://github.com/rust-lang/crates.io-index" 33 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 34 + 35 + [[package]] 36 + name = "anstyle-parse" 37 + version = "0.2.7" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 40 + dependencies = [ 41 + "utf8parse", 42 + ] 43 + 44 + [[package]] 45 + name = "anstyle-query" 46 + version = "1.1.5" 47 + source = "registry+https://github.com/rust-lang/crates.io-index" 48 + checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" 49 + dependencies = [ 50 + "windows-sys 0.61.2", 51 + ] 52 + 53 + [[package]] 54 + name = "anstyle-wincon" 55 + version = "3.0.11" 56 + source = "registry+https://github.com/rust-lang/crates.io-index" 57 + checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" 58 + dependencies = [ 59 + "anstyle", 60 + "once_cell_polyfill", 61 + "windows-sys 0.61.2", 62 + ] 63 + 64 + [[package]] 65 + name = "async-channel" 66 + version = "1.9.0" 67 + source = "registry+https://github.com/rust-lang/crates.io-index" 68 + checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" 69 + dependencies = [ 70 + "concurrent-queue", 71 + "event-listener", 72 + "futures-core", 73 + ] 74 + 75 + [[package]] 76 + name = "async-trait" 77 + version = "0.1.89" 78 + source = "registry+https://github.com/rust-lang/crates.io-index" 79 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 80 + dependencies = [ 81 + "proc-macro2", 82 + "quote", 83 + "syn 2.0.116", 84 + ] 85 + 86 + [[package]] 87 + name = "atomic_enum" 88 + version = "0.2.0" 89 + source = "registry+https://github.com/rust-lang/crates.io-index" 90 + checksum = "6227a8d6fdb862bcb100c4314d0d9579e5cd73fa6df31a2e6f6e1acd3c5f1207" 91 + dependencies = [ 92 + "proc-macro2", 93 + "quote", 94 + "syn 1.0.109", 95 + ] 96 + 97 + [[package]] 98 + name = "aws-lc-rs" 99 + version = "1.15.4" 100 + source = "registry+https://github.com/rust-lang/crates.io-index" 101 + checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" 102 + dependencies = [ 103 + "aws-lc-sys", 104 + "zeroize", 105 + ] 106 + 107 + [[package]] 108 + name = "aws-lc-sys" 109 + version = "0.37.1" 110 + source = "registry+https://github.com/rust-lang/crates.io-index" 111 + checksum = "b092fe214090261288111db7a2b2c2118e5a7f30dc2569f1732c4069a6840549" 112 + dependencies = [ 113 + "cc", 114 + "cmake", 115 + "dunce", 116 + "fs_extra", 117 + ] 118 + 119 + [[package]] 120 + name = "base64" 121 + version = "0.21.7" 122 + source = "registry+https://github.com/rust-lang/crates.io-index" 123 + checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 124 + 125 + [[package]] 126 + name = "bitflags" 127 + version = "2.11.0" 128 + source = "registry+https://github.com/rust-lang/crates.io-index" 129 + checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 130 + 131 + [[package]] 132 + name = "block-buffer" 133 + version = "0.10.4" 134 + source = "registry+https://github.com/rust-lang/crates.io-index" 135 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 136 + dependencies = [ 137 + "generic-array", 138 + ] 139 + 140 + [[package]] 141 + name = "bumpalo" 142 + version = "3.19.1" 143 + source = "registry+https://github.com/rust-lang/crates.io-index" 144 + checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" 145 + 146 + [[package]] 147 + name = "bytes" 148 + version = "1.11.1" 149 + source = "registry+https://github.com/rust-lang/crates.io-index" 150 + checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" 151 + 152 + [[package]] 153 + name = "cc" 154 + version = "1.2.56" 155 + source = "registry+https://github.com/rust-lang/crates.io-index" 156 + checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" 157 + dependencies = [ 158 + "find-msvc-tools", 159 + "jobserver", 160 + "libc", 161 + "shlex", 162 + ] 163 + 164 + [[package]] 165 + name = "cfg-if" 166 + version = "1.0.4" 167 + source = "registry+https://github.com/rust-lang/crates.io-index" 168 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 169 + 170 + [[package]] 171 + name = "cmake" 172 + version = "0.1.57" 173 + source = "registry+https://github.com/rust-lang/crates.io-index" 174 + checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" 175 + dependencies = [ 176 + "cc", 177 + ] 178 + 179 + [[package]] 180 + name = "colorbot" 181 + version = "0.1.0" 182 + dependencies = [ 183 + "env_logger", 184 + "fluxer-rs", 185 + "log", 186 + "tokio", 187 + ] 188 + 189 + [[package]] 190 + name = "colorchoice" 191 + version = "1.0.4" 192 + source = "registry+https://github.com/rust-lang/crates.io-index" 193 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 194 + 195 + [[package]] 196 + name = "concurrent-queue" 197 + version = "2.5.0" 198 + source = "registry+https://github.com/rust-lang/crates.io-index" 199 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 200 + dependencies = [ 201 + "crossbeam-utils", 202 + ] 203 + 204 + [[package]] 205 + name = "cpufeatures" 206 + version = "0.2.17" 207 + source = "registry+https://github.com/rust-lang/crates.io-index" 208 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 209 + dependencies = [ 210 + "libc", 211 + ] 212 + 213 + [[package]] 214 + name = "crossbeam-utils" 215 + version = "0.8.21" 216 + source = "registry+https://github.com/rust-lang/crates.io-index" 217 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 218 + 219 + [[package]] 220 + name = "crypto-common" 221 + version = "0.1.7" 222 + source = "registry+https://github.com/rust-lang/crates.io-index" 223 + checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" 224 + dependencies = [ 225 + "generic-array", 226 + "typenum", 227 + ] 228 + 229 + [[package]] 230 + name = "data-encoding" 231 + version = "2.10.0" 232 + source = "registry+https://github.com/rust-lang/crates.io-index" 233 + checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" 234 + 235 + [[package]] 236 + name = "digest" 237 + version = "0.10.7" 238 + source = "registry+https://github.com/rust-lang/crates.io-index" 239 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 240 + dependencies = [ 241 + "block-buffer", 242 + "crypto-common", 243 + ] 244 + 245 + [[package]] 246 + name = "displaydoc" 247 + version = "0.2.5" 248 + source = "registry+https://github.com/rust-lang/crates.io-index" 249 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 250 + dependencies = [ 251 + "proc-macro2", 252 + "quote", 253 + "syn 2.0.116", 254 + ] 255 + 256 + [[package]] 257 + name = "dunce" 258 + version = "1.0.5" 259 + source = "registry+https://github.com/rust-lang/crates.io-index" 260 + checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 261 + 262 + [[package]] 263 + name = "enfync" 264 + version = "0.1.6" 265 + source = "registry+https://github.com/rust-lang/crates.io-index" 266 + checksum = "5ce8c1fbec15a38aced3838c4d7ea90a1403bd50364b5cfe8008e679df0c8dde" 267 + dependencies = [ 268 + "async-trait", 269 + "futures", 270 + "tokio", 271 + "wasm-bindgen", 272 + "wasm-bindgen-futures", 273 + "wasmtimer", 274 + ] 275 + 276 + [[package]] 277 + name = "env_filter" 278 + version = "1.0.0" 279 + source = "registry+https://github.com/rust-lang/crates.io-index" 280 + checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" 281 + dependencies = [ 282 + "log", 283 + "regex", 284 + ] 285 + 286 + [[package]] 287 + name = "env_logger" 288 + version = "0.11.9" 289 + source = "registry+https://github.com/rust-lang/crates.io-index" 290 + checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" 291 + dependencies = [ 292 + "anstream", 293 + "anstyle", 294 + "env_filter", 295 + "jiff", 296 + "log", 297 + ] 298 + 299 + [[package]] 300 + name = "event-listener" 301 + version = "2.5.3" 302 + source = "registry+https://github.com/rust-lang/crates.io-index" 303 + checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 304 + 305 + [[package]] 306 + name = "ezsockets" 307 + version = "0.7.1" 308 + source = "registry+https://github.com/rust-lang/crates.io-index" 309 + checksum = "0f99230cd4b340f0590dab3dd65a9f3edc0da4c759922f303467eefde08a7eb7" 310 + dependencies = [ 311 + "async-channel", 312 + "async-trait", 313 + "atomic_enum", 314 + "base64", 315 + "bytes", 316 + "cfg-if", 317 + "enfync", 318 + "futures", 319 + "futures-util", 320 + "getrandom 0.2.17", 321 + "http", 322 + "tokio", 323 + "tokio-rustls", 324 + "tokio-tungstenite", 325 + "tokio-tungstenite-wasm", 326 + "tracing", 327 + "tungstenite", 328 + "url", 329 + "wasm-bindgen-futures", 330 + "wasmtimer", 331 + ] 332 + 333 + [[package]] 334 + name = "find-msvc-tools" 335 + version = "0.1.9" 336 + source = "registry+https://github.com/rust-lang/crates.io-index" 337 + checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" 338 + 339 + [[package]] 340 + name = "fluxer-rs" 341 + version = "0.1.0" 342 + dependencies = [ 343 + "async-trait", 344 + "ezsockets", 345 + "log", 346 + "serde", 347 + "serde_json", 348 + "tokio", 349 + ] 350 + 351 + [[package]] 352 + name = "form_urlencoded" 353 + version = "1.2.2" 354 + source = "registry+https://github.com/rust-lang/crates.io-index" 355 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 356 + dependencies = [ 357 + "percent-encoding", 358 + ] 359 + 360 + [[package]] 361 + name = "fs_extra" 362 + version = "1.3.0" 363 + source = "registry+https://github.com/rust-lang/crates.io-index" 364 + checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 365 + 366 + [[package]] 367 + name = "futures" 368 + version = "0.3.32" 369 + source = "registry+https://github.com/rust-lang/crates.io-index" 370 + checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" 371 + dependencies = [ 372 + "futures-channel", 373 + "futures-core", 374 + "futures-executor", 375 + "futures-io", 376 + "futures-sink", 377 + "futures-task", 378 + "futures-util", 379 + ] 380 + 381 + [[package]] 382 + name = "futures-channel" 383 + version = "0.3.32" 384 + source = "registry+https://github.com/rust-lang/crates.io-index" 385 + checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" 386 + dependencies = [ 387 + "futures-core", 388 + "futures-sink", 389 + ] 390 + 391 + [[package]] 392 + name = "futures-core" 393 + version = "0.3.32" 394 + source = "registry+https://github.com/rust-lang/crates.io-index" 395 + checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" 396 + 397 + [[package]] 398 + name = "futures-executor" 399 + version = "0.3.32" 400 + source = "registry+https://github.com/rust-lang/crates.io-index" 401 + checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" 402 + dependencies = [ 403 + "futures-core", 404 + "futures-task", 405 + "futures-util", 406 + ] 407 + 408 + [[package]] 409 + name = "futures-io" 410 + version = "0.3.32" 411 + source = "registry+https://github.com/rust-lang/crates.io-index" 412 + checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" 413 + 414 + [[package]] 415 + name = "futures-macro" 416 + version = "0.3.32" 417 + source = "registry+https://github.com/rust-lang/crates.io-index" 418 + checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" 419 + dependencies = [ 420 + "proc-macro2", 421 + "quote", 422 + "syn 2.0.116", 423 + ] 424 + 425 + [[package]] 426 + name = "futures-sink" 427 + version = "0.3.32" 428 + source = "registry+https://github.com/rust-lang/crates.io-index" 429 + checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" 430 + 431 + [[package]] 432 + name = "futures-task" 433 + version = "0.3.32" 434 + source = "registry+https://github.com/rust-lang/crates.io-index" 435 + checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" 436 + 437 + [[package]] 438 + name = "futures-util" 439 + version = "0.3.32" 440 + source = "registry+https://github.com/rust-lang/crates.io-index" 441 + checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" 442 + dependencies = [ 443 + "futures-channel", 444 + "futures-core", 445 + "futures-io", 446 + "futures-macro", 447 + "futures-sink", 448 + "futures-task", 449 + "memchr", 450 + "pin-project-lite", 451 + "slab", 452 + ] 453 + 454 + [[package]] 455 + name = "generic-array" 456 + version = "0.14.7" 457 + source = "registry+https://github.com/rust-lang/crates.io-index" 458 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 459 + dependencies = [ 460 + "typenum", 461 + "version_check", 462 + ] 463 + 464 + [[package]] 465 + name = "getrandom" 466 + version = "0.2.17" 467 + source = "registry+https://github.com/rust-lang/crates.io-index" 468 + checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" 469 + dependencies = [ 470 + "cfg-if", 471 + "js-sys", 472 + "libc", 473 + "wasi", 474 + "wasm-bindgen", 475 + ] 476 + 477 + [[package]] 478 + name = "getrandom" 479 + version = "0.3.4" 480 + source = "registry+https://github.com/rust-lang/crates.io-index" 481 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 482 + dependencies = [ 483 + "cfg-if", 484 + "libc", 485 + "r-efi", 486 + "wasip2", 487 + ] 488 + 489 + [[package]] 490 + name = "http" 491 + version = "1.4.0" 492 + source = "registry+https://github.com/rust-lang/crates.io-index" 493 + checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" 494 + dependencies = [ 495 + "bytes", 496 + "itoa", 497 + ] 498 + 499 + [[package]] 500 + name = "httparse" 501 + version = "1.10.1" 502 + source = "registry+https://github.com/rust-lang/crates.io-index" 503 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 504 + 505 + [[package]] 506 + name = "icu_collections" 507 + version = "2.1.1" 508 + source = "registry+https://github.com/rust-lang/crates.io-index" 509 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 510 + dependencies = [ 511 + "displaydoc", 512 + "potential_utf", 513 + "yoke", 514 + "zerofrom", 515 + "zerovec", 516 + ] 517 + 518 + [[package]] 519 + name = "icu_locale_core" 520 + version = "2.1.1" 521 + source = "registry+https://github.com/rust-lang/crates.io-index" 522 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 523 + dependencies = [ 524 + "displaydoc", 525 + "litemap", 526 + "tinystr", 527 + "writeable", 528 + "zerovec", 529 + ] 530 + 531 + [[package]] 532 + name = "icu_normalizer" 533 + version = "2.1.1" 534 + source = "registry+https://github.com/rust-lang/crates.io-index" 535 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 536 + dependencies = [ 537 + "icu_collections", 538 + "icu_normalizer_data", 539 + "icu_properties", 540 + "icu_provider", 541 + "smallvec", 542 + "zerovec", 543 + ] 544 + 545 + [[package]] 546 + name = "icu_normalizer_data" 547 + version = "2.1.1" 548 + source = "registry+https://github.com/rust-lang/crates.io-index" 549 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 550 + 551 + [[package]] 552 + name = "icu_properties" 553 + version = "2.1.2" 554 + source = "registry+https://github.com/rust-lang/crates.io-index" 555 + checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" 556 + dependencies = [ 557 + "icu_collections", 558 + "icu_locale_core", 559 + "icu_properties_data", 560 + "icu_provider", 561 + "zerotrie", 562 + "zerovec", 563 + ] 564 + 565 + [[package]] 566 + name = "icu_properties_data" 567 + version = "2.1.2" 568 + source = "registry+https://github.com/rust-lang/crates.io-index" 569 + checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" 570 + 571 + [[package]] 572 + name = "icu_provider" 573 + version = "2.1.1" 574 + source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 576 + dependencies = [ 577 + "displaydoc", 578 + "icu_locale_core", 579 + "writeable", 580 + "yoke", 581 + "zerofrom", 582 + "zerotrie", 583 + "zerovec", 584 + ] 585 + 586 + [[package]] 587 + name = "idna" 588 + version = "1.1.0" 589 + source = "registry+https://github.com/rust-lang/crates.io-index" 590 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 591 + dependencies = [ 592 + "idna_adapter", 593 + "smallvec", 594 + "utf8_iter", 595 + ] 596 + 597 + [[package]] 598 + name = "idna_adapter" 599 + version = "1.2.1" 600 + source = "registry+https://github.com/rust-lang/crates.io-index" 601 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 602 + dependencies = [ 603 + "icu_normalizer", 604 + "icu_properties", 605 + ] 606 + 607 + [[package]] 608 + name = "is_terminal_polyfill" 609 + version = "1.70.2" 610 + source = "registry+https://github.com/rust-lang/crates.io-index" 611 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 612 + 613 + [[package]] 614 + name = "itoa" 615 + version = "1.0.17" 616 + source = "registry+https://github.com/rust-lang/crates.io-index" 617 + checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 618 + 619 + [[package]] 620 + name = "jiff" 621 + version = "0.2.20" 622 + source = "registry+https://github.com/rust-lang/crates.io-index" 623 + checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" 624 + dependencies = [ 625 + "jiff-static", 626 + "log", 627 + "portable-atomic", 628 + "portable-atomic-util", 629 + "serde_core", 630 + ] 631 + 632 + [[package]] 633 + name = "jiff-static" 634 + version = "0.2.20" 635 + source = "registry+https://github.com/rust-lang/crates.io-index" 636 + checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" 637 + dependencies = [ 638 + "proc-macro2", 639 + "quote", 640 + "syn 2.0.116", 641 + ] 642 + 643 + [[package]] 644 + name = "jobserver" 645 + version = "0.1.34" 646 + source = "registry+https://github.com/rust-lang/crates.io-index" 647 + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 648 + dependencies = [ 649 + "getrandom 0.3.4", 650 + "libc", 651 + ] 652 + 653 + [[package]] 654 + name = "js-sys" 655 + version = "0.3.85" 656 + source = "registry+https://github.com/rust-lang/crates.io-index" 657 + checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" 658 + dependencies = [ 659 + "once_cell", 660 + "wasm-bindgen", 661 + ] 662 + 663 + [[package]] 664 + name = "libc" 665 + version = "0.2.182" 666 + source = "registry+https://github.com/rust-lang/crates.io-index" 667 + checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" 668 + 669 + [[package]] 670 + name = "litemap" 671 + version = "0.8.1" 672 + source = "registry+https://github.com/rust-lang/crates.io-index" 673 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 674 + 675 + [[package]] 676 + name = "lock_api" 677 + version = "0.4.14" 678 + source = "registry+https://github.com/rust-lang/crates.io-index" 679 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 680 + dependencies = [ 681 + "scopeguard", 682 + ] 683 + 684 + [[package]] 685 + name = "log" 686 + version = "0.4.29" 687 + source = "registry+https://github.com/rust-lang/crates.io-index" 688 + checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 689 + 690 + [[package]] 691 + name = "memchr" 692 + version = "2.8.0" 693 + source = "registry+https://github.com/rust-lang/crates.io-index" 694 + checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 695 + 696 + [[package]] 697 + name = "mio" 698 + version = "1.1.1" 699 + source = "registry+https://github.com/rust-lang/crates.io-index" 700 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 701 + dependencies = [ 702 + "libc", 703 + "wasi", 704 + "windows-sys 0.61.2", 705 + ] 706 + 707 + [[package]] 708 + name = "once_cell" 709 + version = "1.21.3" 710 + source = "registry+https://github.com/rust-lang/crates.io-index" 711 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 712 + 713 + [[package]] 714 + name = "once_cell_polyfill" 715 + version = "1.70.2" 716 + source = "registry+https://github.com/rust-lang/crates.io-index" 717 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 718 + 719 + [[package]] 720 + name = "parking_lot" 721 + version = "0.12.5" 722 + source = "registry+https://github.com/rust-lang/crates.io-index" 723 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 724 + dependencies = [ 725 + "lock_api", 726 + "parking_lot_core", 727 + ] 728 + 729 + [[package]] 730 + name = "parking_lot_core" 731 + version = "0.9.12" 732 + source = "registry+https://github.com/rust-lang/crates.io-index" 733 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 734 + dependencies = [ 735 + "cfg-if", 736 + "libc", 737 + "redox_syscall", 738 + "smallvec", 739 + "windows-link", 740 + ] 741 + 742 + [[package]] 743 + name = "percent-encoding" 744 + version = "2.3.2" 745 + source = "registry+https://github.com/rust-lang/crates.io-index" 746 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 747 + 748 + [[package]] 749 + name = "pin-project-lite" 750 + version = "0.2.16" 751 + source = "registry+https://github.com/rust-lang/crates.io-index" 752 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 753 + 754 + [[package]] 755 + name = "pin-utils" 756 + version = "0.1.0" 757 + source = "registry+https://github.com/rust-lang/crates.io-index" 758 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 759 + 760 + [[package]] 761 + name = "portable-atomic" 762 + version = "1.13.1" 763 + source = "registry+https://github.com/rust-lang/crates.io-index" 764 + checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" 765 + 766 + [[package]] 767 + name = "portable-atomic-util" 768 + version = "0.2.5" 769 + source = "registry+https://github.com/rust-lang/crates.io-index" 770 + checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" 771 + dependencies = [ 772 + "portable-atomic", 773 + ] 774 + 775 + [[package]] 776 + name = "potential_utf" 777 + version = "0.1.4" 778 + source = "registry+https://github.com/rust-lang/crates.io-index" 779 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 780 + dependencies = [ 781 + "zerovec", 782 + ] 783 + 784 + [[package]] 785 + name = "ppv-lite86" 786 + version = "0.2.21" 787 + source = "registry+https://github.com/rust-lang/crates.io-index" 788 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 789 + dependencies = [ 790 + "zerocopy", 791 + ] 792 + 793 + [[package]] 794 + name = "proc-macro2" 795 + version = "1.0.106" 796 + source = "registry+https://github.com/rust-lang/crates.io-index" 797 + checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 798 + dependencies = [ 799 + "unicode-ident", 800 + ] 801 + 802 + [[package]] 803 + name = "quote" 804 + version = "1.0.44" 805 + source = "registry+https://github.com/rust-lang/crates.io-index" 806 + checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" 807 + dependencies = [ 808 + "proc-macro2", 809 + ] 810 + 811 + [[package]] 812 + name = "r-efi" 813 + version = "5.3.0" 814 + source = "registry+https://github.com/rust-lang/crates.io-index" 815 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 816 + 817 + [[package]] 818 + name = "rand" 819 + version = "0.9.2" 820 + source = "registry+https://github.com/rust-lang/crates.io-index" 821 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 822 + dependencies = [ 823 + "rand_chacha", 824 + "rand_core", 825 + ] 826 + 827 + [[package]] 828 + name = "rand_chacha" 829 + version = "0.9.0" 830 + source = "registry+https://github.com/rust-lang/crates.io-index" 831 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 832 + dependencies = [ 833 + "ppv-lite86", 834 + "rand_core", 835 + ] 836 + 837 + [[package]] 838 + name = "rand_core" 839 + version = "0.9.5" 840 + source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" 842 + dependencies = [ 843 + "getrandom 0.3.4", 844 + ] 845 + 846 + [[package]] 847 + name = "redox_syscall" 848 + version = "0.5.18" 849 + source = "registry+https://github.com/rust-lang/crates.io-index" 850 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 851 + dependencies = [ 852 + "bitflags", 853 + ] 854 + 855 + [[package]] 856 + name = "regex" 857 + version = "1.12.3" 858 + source = "registry+https://github.com/rust-lang/crates.io-index" 859 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 860 + dependencies = [ 861 + "aho-corasick", 862 + "memchr", 863 + "regex-automata", 864 + "regex-syntax", 865 + ] 866 + 867 + [[package]] 868 + name = "regex-automata" 869 + version = "0.4.14" 870 + source = "registry+https://github.com/rust-lang/crates.io-index" 871 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 872 + dependencies = [ 873 + "aho-corasick", 874 + "memchr", 875 + "regex-syntax", 876 + ] 877 + 878 + [[package]] 879 + name = "regex-syntax" 880 + version = "0.8.9" 881 + source = "registry+https://github.com/rust-lang/crates.io-index" 882 + checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" 883 + 884 + [[package]] 885 + name = "ring" 886 + version = "0.17.14" 887 + source = "registry+https://github.com/rust-lang/crates.io-index" 888 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 889 + dependencies = [ 890 + "cc", 891 + "cfg-if", 892 + "getrandom 0.2.17", 893 + "libc", 894 + "untrusted", 895 + "windows-sys 0.52.0", 896 + ] 897 + 898 + [[package]] 899 + name = "rustls" 900 + version = "0.23.36" 901 + source = "registry+https://github.com/rust-lang/crates.io-index" 902 + checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" 903 + dependencies = [ 904 + "aws-lc-rs", 905 + "log", 906 + "once_cell", 907 + "rustls-pki-types", 908 + "rustls-webpki", 909 + "subtle", 910 + "zeroize", 911 + ] 912 + 913 + [[package]] 914 + name = "rustls-pki-types" 915 + version = "1.14.0" 916 + source = "registry+https://github.com/rust-lang/crates.io-index" 917 + checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" 918 + dependencies = [ 919 + "zeroize", 920 + ] 921 + 922 + [[package]] 923 + name = "rustls-webpki" 924 + version = "0.103.9" 925 + source = "registry+https://github.com/rust-lang/crates.io-index" 926 + checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" 927 + dependencies = [ 928 + "aws-lc-rs", 929 + "ring", 930 + "rustls-pki-types", 931 + "untrusted", 932 + ] 933 + 934 + [[package]] 935 + name = "rustversion" 936 + version = "1.0.22" 937 + source = "registry+https://github.com/rust-lang/crates.io-index" 938 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 939 + 940 + [[package]] 941 + name = "scopeguard" 942 + version = "1.2.0" 943 + source = "registry+https://github.com/rust-lang/crates.io-index" 944 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 945 + 946 + [[package]] 947 + name = "serde" 948 + version = "1.0.228" 949 + source = "registry+https://github.com/rust-lang/crates.io-index" 950 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 951 + dependencies = [ 952 + "serde_core", 953 + "serde_derive", 954 + ] 955 + 956 + [[package]] 957 + name = "serde_core" 958 + version = "1.0.228" 959 + source = "registry+https://github.com/rust-lang/crates.io-index" 960 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 961 + dependencies = [ 962 + "serde_derive", 963 + ] 964 + 965 + [[package]] 966 + name = "serde_derive" 967 + version = "1.0.228" 968 + source = "registry+https://github.com/rust-lang/crates.io-index" 969 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 970 + dependencies = [ 971 + "proc-macro2", 972 + "quote", 973 + "syn 2.0.116", 974 + ] 975 + 976 + [[package]] 977 + name = "serde_json" 978 + version = "1.0.149" 979 + source = "registry+https://github.com/rust-lang/crates.io-index" 980 + checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 981 + dependencies = [ 982 + "itoa", 983 + "memchr", 984 + "serde", 985 + "serde_core", 986 + "zmij", 987 + ] 988 + 989 + [[package]] 990 + name = "sha1" 991 + version = "0.10.6" 992 + source = "registry+https://github.com/rust-lang/crates.io-index" 993 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 994 + dependencies = [ 995 + "cfg-if", 996 + "cpufeatures", 997 + "digest", 998 + ] 999 + 1000 + [[package]] 1001 + name = "shlex" 1002 + version = "1.3.0" 1003 + source = "registry+https://github.com/rust-lang/crates.io-index" 1004 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1005 + 1006 + [[package]] 1007 + name = "slab" 1008 + version = "0.4.12" 1009 + source = "registry+https://github.com/rust-lang/crates.io-index" 1010 + checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" 1011 + 1012 + [[package]] 1013 + name = "smallvec" 1014 + version = "1.15.1" 1015 + source = "registry+https://github.com/rust-lang/crates.io-index" 1016 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1017 + 1018 + [[package]] 1019 + name = "socket2" 1020 + version = "0.6.2" 1021 + source = "registry+https://github.com/rust-lang/crates.io-index" 1022 + checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" 1023 + dependencies = [ 1024 + "libc", 1025 + "windows-sys 0.60.2", 1026 + ] 1027 + 1028 + [[package]] 1029 + name = "stable_deref_trait" 1030 + version = "1.2.1" 1031 + source = "registry+https://github.com/rust-lang/crates.io-index" 1032 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 1033 + 1034 + [[package]] 1035 + name = "subtle" 1036 + version = "2.6.1" 1037 + source = "registry+https://github.com/rust-lang/crates.io-index" 1038 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1039 + 1040 + [[package]] 1041 + name = "syn" 1042 + version = "1.0.109" 1043 + source = "registry+https://github.com/rust-lang/crates.io-index" 1044 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1045 + dependencies = [ 1046 + "proc-macro2", 1047 + "quote", 1048 + "unicode-ident", 1049 + ] 1050 + 1051 + [[package]] 1052 + name = "syn" 1053 + version = "2.0.116" 1054 + source = "registry+https://github.com/rust-lang/crates.io-index" 1055 + checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" 1056 + dependencies = [ 1057 + "proc-macro2", 1058 + "quote", 1059 + "unicode-ident", 1060 + ] 1061 + 1062 + [[package]] 1063 + name = "synstructure" 1064 + version = "0.13.2" 1065 + source = "registry+https://github.com/rust-lang/crates.io-index" 1066 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1067 + dependencies = [ 1068 + "proc-macro2", 1069 + "quote", 1070 + "syn 2.0.116", 1071 + ] 1072 + 1073 + [[package]] 1074 + name = "thiserror" 1075 + version = "2.0.18" 1076 + source = "registry+https://github.com/rust-lang/crates.io-index" 1077 + checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" 1078 + dependencies = [ 1079 + "thiserror-impl", 1080 + ] 1081 + 1082 + [[package]] 1083 + name = "thiserror-impl" 1084 + version = "2.0.18" 1085 + source = "registry+https://github.com/rust-lang/crates.io-index" 1086 + checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" 1087 + dependencies = [ 1088 + "proc-macro2", 1089 + "quote", 1090 + "syn 2.0.116", 1091 + ] 1092 + 1093 + [[package]] 1094 + name = "tinystr" 1095 + version = "0.8.2" 1096 + source = "registry+https://github.com/rust-lang/crates.io-index" 1097 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 1098 + dependencies = [ 1099 + "displaydoc", 1100 + "zerovec", 1101 + ] 1102 + 1103 + [[package]] 1104 + name = "tokio" 1105 + version = "1.49.0" 1106 + source = "registry+https://github.com/rust-lang/crates.io-index" 1107 + checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" 1108 + dependencies = [ 1109 + "bytes", 1110 + "libc", 1111 + "mio", 1112 + "pin-project-lite", 1113 + "socket2", 1114 + "tokio-macros", 1115 + "windows-sys 0.61.2", 1116 + ] 1117 + 1118 + [[package]] 1119 + name = "tokio-macros" 1120 + version = "2.6.0" 1121 + source = "registry+https://github.com/rust-lang/crates.io-index" 1122 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 1123 + dependencies = [ 1124 + "proc-macro2", 1125 + "quote", 1126 + "syn 2.0.116", 1127 + ] 1128 + 1129 + [[package]] 1130 + name = "tokio-rustls" 1131 + version = "0.26.4" 1132 + source = "registry+https://github.com/rust-lang/crates.io-index" 1133 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 1134 + dependencies = [ 1135 + "rustls", 1136 + "tokio", 1137 + ] 1138 + 1139 + [[package]] 1140 + name = "tokio-tungstenite" 1141 + version = "0.26.2" 1142 + source = "registry+https://github.com/rust-lang/crates.io-index" 1143 + checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" 1144 + dependencies = [ 1145 + "futures-util", 1146 + "log", 1147 + "rustls", 1148 + "rustls-pki-types", 1149 + "tokio", 1150 + "tokio-rustls", 1151 + "tungstenite", 1152 + "webpki-roots 0.26.11", 1153 + ] 1154 + 1155 + [[package]] 1156 + name = "tokio-tungstenite-wasm" 1157 + version = "0.6.1" 1158 + source = "registry+https://github.com/rust-lang/crates.io-index" 1159 + checksum = "4585aa997e4afb43c64f9101c27411b8e1bf9dde49b22e3e47acdde3055b325c" 1160 + dependencies = [ 1161 + "bytes", 1162 + "futures-channel", 1163 + "futures-util", 1164 + "http", 1165 + "httparse", 1166 + "js-sys", 1167 + "thiserror", 1168 + "tokio", 1169 + "tokio-tungstenite", 1170 + "wasm-bindgen", 1171 + "web-sys", 1172 + ] 1173 + 1174 + [[package]] 1175 + name = "tracing" 1176 + version = "0.1.44" 1177 + source = "registry+https://github.com/rust-lang/crates.io-index" 1178 + checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" 1179 + dependencies = [ 1180 + "pin-project-lite", 1181 + "tracing-attributes", 1182 + "tracing-core", 1183 + ] 1184 + 1185 + [[package]] 1186 + name = "tracing-attributes" 1187 + version = "0.1.31" 1188 + source = "registry+https://github.com/rust-lang/crates.io-index" 1189 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 1190 + dependencies = [ 1191 + "proc-macro2", 1192 + "quote", 1193 + "syn 2.0.116", 1194 + ] 1195 + 1196 + [[package]] 1197 + name = "tracing-core" 1198 + version = "0.1.36" 1199 + source = "registry+https://github.com/rust-lang/crates.io-index" 1200 + checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 1201 + dependencies = [ 1202 + "once_cell", 1203 + ] 1204 + 1205 + [[package]] 1206 + name = "tungstenite" 1207 + version = "0.26.2" 1208 + source = "registry+https://github.com/rust-lang/crates.io-index" 1209 + checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" 1210 + dependencies = [ 1211 + "bytes", 1212 + "data-encoding", 1213 + "http", 1214 + "httparse", 1215 + "log", 1216 + "rand", 1217 + "rustls", 1218 + "rustls-pki-types", 1219 + "sha1", 1220 + "thiserror", 1221 + "utf-8", 1222 + ] 1223 + 1224 + [[package]] 1225 + name = "typenum" 1226 + version = "1.19.0" 1227 + source = "registry+https://github.com/rust-lang/crates.io-index" 1228 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 1229 + 1230 + [[package]] 1231 + name = "unicode-ident" 1232 + version = "1.0.24" 1233 + source = "registry+https://github.com/rust-lang/crates.io-index" 1234 + checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 1235 + 1236 + [[package]] 1237 + name = "untrusted" 1238 + version = "0.9.0" 1239 + source = "registry+https://github.com/rust-lang/crates.io-index" 1240 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1241 + 1242 + [[package]] 1243 + name = "url" 1244 + version = "2.5.8" 1245 + source = "registry+https://github.com/rust-lang/crates.io-index" 1246 + checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" 1247 + dependencies = [ 1248 + "form_urlencoded", 1249 + "idna", 1250 + "percent-encoding", 1251 + "serde", 1252 + ] 1253 + 1254 + [[package]] 1255 + name = "utf-8" 1256 + version = "0.7.6" 1257 + source = "registry+https://github.com/rust-lang/crates.io-index" 1258 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 1259 + 1260 + [[package]] 1261 + name = "utf8_iter" 1262 + version = "1.0.4" 1263 + source = "registry+https://github.com/rust-lang/crates.io-index" 1264 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1265 + 1266 + [[package]] 1267 + name = "utf8parse" 1268 + version = "0.2.2" 1269 + source = "registry+https://github.com/rust-lang/crates.io-index" 1270 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1271 + 1272 + [[package]] 1273 + name = "version_check" 1274 + version = "0.9.5" 1275 + source = "registry+https://github.com/rust-lang/crates.io-index" 1276 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1277 + 1278 + [[package]] 1279 + name = "wasi" 1280 + version = "0.11.1+wasi-snapshot-preview1" 1281 + source = "registry+https://github.com/rust-lang/crates.io-index" 1282 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 1283 + 1284 + [[package]] 1285 + name = "wasip2" 1286 + version = "1.0.2+wasi-0.2.9" 1287 + source = "registry+https://github.com/rust-lang/crates.io-index" 1288 + checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" 1289 + dependencies = [ 1290 + "wit-bindgen", 1291 + ] 1292 + 1293 + [[package]] 1294 + name = "wasm-bindgen" 1295 + version = "0.2.108" 1296 + source = "registry+https://github.com/rust-lang/crates.io-index" 1297 + checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" 1298 + dependencies = [ 1299 + "cfg-if", 1300 + "once_cell", 1301 + "rustversion", 1302 + "wasm-bindgen-macro", 1303 + "wasm-bindgen-shared", 1304 + ] 1305 + 1306 + [[package]] 1307 + name = "wasm-bindgen-futures" 1308 + version = "0.4.58" 1309 + source = "registry+https://github.com/rust-lang/crates.io-index" 1310 + checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" 1311 + dependencies = [ 1312 + "cfg-if", 1313 + "futures-util", 1314 + "js-sys", 1315 + "once_cell", 1316 + "wasm-bindgen", 1317 + "web-sys", 1318 + ] 1319 + 1320 + [[package]] 1321 + name = "wasm-bindgen-macro" 1322 + version = "0.2.108" 1323 + source = "registry+https://github.com/rust-lang/crates.io-index" 1324 + checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" 1325 + dependencies = [ 1326 + "quote", 1327 + "wasm-bindgen-macro-support", 1328 + ] 1329 + 1330 + [[package]] 1331 + name = "wasm-bindgen-macro-support" 1332 + version = "0.2.108" 1333 + source = "registry+https://github.com/rust-lang/crates.io-index" 1334 + checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" 1335 + dependencies = [ 1336 + "bumpalo", 1337 + "proc-macro2", 1338 + "quote", 1339 + "syn 2.0.116", 1340 + "wasm-bindgen-shared", 1341 + ] 1342 + 1343 + [[package]] 1344 + name = "wasm-bindgen-shared" 1345 + version = "0.2.108" 1346 + source = "registry+https://github.com/rust-lang/crates.io-index" 1347 + checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" 1348 + dependencies = [ 1349 + "unicode-ident", 1350 + ] 1351 + 1352 + [[package]] 1353 + name = "wasmtimer" 1354 + version = "0.2.1" 1355 + source = "registry+https://github.com/rust-lang/crates.io-index" 1356 + checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" 1357 + dependencies = [ 1358 + "futures", 1359 + "js-sys", 1360 + "parking_lot", 1361 + "pin-utils", 1362 + "slab", 1363 + "wasm-bindgen", 1364 + ] 1365 + 1366 + [[package]] 1367 + name = "web-sys" 1368 + version = "0.3.85" 1369 + source = "registry+https://github.com/rust-lang/crates.io-index" 1370 + checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" 1371 + dependencies = [ 1372 + "js-sys", 1373 + "wasm-bindgen", 1374 + ] 1375 + 1376 + [[package]] 1377 + name = "webpki-roots" 1378 + version = "0.26.11" 1379 + source = "registry+https://github.com/rust-lang/crates.io-index" 1380 + checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" 1381 + dependencies = [ 1382 + "webpki-roots 1.0.6", 1383 + ] 1384 + 1385 + [[package]] 1386 + name = "webpki-roots" 1387 + version = "1.0.6" 1388 + source = "registry+https://github.com/rust-lang/crates.io-index" 1389 + checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" 1390 + dependencies = [ 1391 + "rustls-pki-types", 1392 + ] 1393 + 1394 + [[package]] 1395 + name = "windows-link" 1396 + version = "0.2.1" 1397 + source = "registry+https://github.com/rust-lang/crates.io-index" 1398 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 1399 + 1400 + [[package]] 1401 + name = "windows-sys" 1402 + version = "0.52.0" 1403 + source = "registry+https://github.com/rust-lang/crates.io-index" 1404 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1405 + dependencies = [ 1406 + "windows-targets 0.52.6", 1407 + ] 1408 + 1409 + [[package]] 1410 + name = "windows-sys" 1411 + version = "0.60.2" 1412 + source = "registry+https://github.com/rust-lang/crates.io-index" 1413 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 1414 + dependencies = [ 1415 + "windows-targets 0.53.5", 1416 + ] 1417 + 1418 + [[package]] 1419 + name = "windows-sys" 1420 + version = "0.61.2" 1421 + source = "registry+https://github.com/rust-lang/crates.io-index" 1422 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 1423 + dependencies = [ 1424 + "windows-link", 1425 + ] 1426 + 1427 + [[package]] 1428 + name = "windows-targets" 1429 + version = "0.52.6" 1430 + source = "registry+https://github.com/rust-lang/crates.io-index" 1431 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1432 + dependencies = [ 1433 + "windows_aarch64_gnullvm 0.52.6", 1434 + "windows_aarch64_msvc 0.52.6", 1435 + "windows_i686_gnu 0.52.6", 1436 + "windows_i686_gnullvm 0.52.6", 1437 + "windows_i686_msvc 0.52.6", 1438 + "windows_x86_64_gnu 0.52.6", 1439 + "windows_x86_64_gnullvm 0.52.6", 1440 + "windows_x86_64_msvc 0.52.6", 1441 + ] 1442 + 1443 + [[package]] 1444 + name = "windows-targets" 1445 + version = "0.53.5" 1446 + source = "registry+https://github.com/rust-lang/crates.io-index" 1447 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 1448 + dependencies = [ 1449 + "windows-link", 1450 + "windows_aarch64_gnullvm 0.53.1", 1451 + "windows_aarch64_msvc 0.53.1", 1452 + "windows_i686_gnu 0.53.1", 1453 + "windows_i686_gnullvm 0.53.1", 1454 + "windows_i686_msvc 0.53.1", 1455 + "windows_x86_64_gnu 0.53.1", 1456 + "windows_x86_64_gnullvm 0.53.1", 1457 + "windows_x86_64_msvc 0.53.1", 1458 + ] 1459 + 1460 + [[package]] 1461 + name = "windows_aarch64_gnullvm" 1462 + version = "0.52.6" 1463 + source = "registry+https://github.com/rust-lang/crates.io-index" 1464 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1465 + 1466 + [[package]] 1467 + name = "windows_aarch64_gnullvm" 1468 + version = "0.53.1" 1469 + source = "registry+https://github.com/rust-lang/crates.io-index" 1470 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 1471 + 1472 + [[package]] 1473 + name = "windows_aarch64_msvc" 1474 + version = "0.52.6" 1475 + source = "registry+https://github.com/rust-lang/crates.io-index" 1476 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1477 + 1478 + [[package]] 1479 + name = "windows_aarch64_msvc" 1480 + version = "0.53.1" 1481 + source = "registry+https://github.com/rust-lang/crates.io-index" 1482 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 1483 + 1484 + [[package]] 1485 + name = "windows_i686_gnu" 1486 + version = "0.52.6" 1487 + source = "registry+https://github.com/rust-lang/crates.io-index" 1488 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1489 + 1490 + [[package]] 1491 + name = "windows_i686_gnu" 1492 + version = "0.53.1" 1493 + source = "registry+https://github.com/rust-lang/crates.io-index" 1494 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 1495 + 1496 + [[package]] 1497 + name = "windows_i686_gnullvm" 1498 + version = "0.52.6" 1499 + source = "registry+https://github.com/rust-lang/crates.io-index" 1500 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1501 + 1502 + [[package]] 1503 + name = "windows_i686_gnullvm" 1504 + version = "0.53.1" 1505 + source = "registry+https://github.com/rust-lang/crates.io-index" 1506 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 1507 + 1508 + [[package]] 1509 + name = "windows_i686_msvc" 1510 + version = "0.52.6" 1511 + source = "registry+https://github.com/rust-lang/crates.io-index" 1512 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1513 + 1514 + [[package]] 1515 + name = "windows_i686_msvc" 1516 + version = "0.53.1" 1517 + source = "registry+https://github.com/rust-lang/crates.io-index" 1518 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 1519 + 1520 + [[package]] 1521 + name = "windows_x86_64_gnu" 1522 + version = "0.52.6" 1523 + source = "registry+https://github.com/rust-lang/crates.io-index" 1524 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1525 + 1526 + [[package]] 1527 + name = "windows_x86_64_gnu" 1528 + version = "0.53.1" 1529 + source = "registry+https://github.com/rust-lang/crates.io-index" 1530 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 1531 + 1532 + [[package]] 1533 + name = "windows_x86_64_gnullvm" 1534 + version = "0.52.6" 1535 + source = "registry+https://github.com/rust-lang/crates.io-index" 1536 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1537 + 1538 + [[package]] 1539 + name = "windows_x86_64_gnullvm" 1540 + version = "0.53.1" 1541 + source = "registry+https://github.com/rust-lang/crates.io-index" 1542 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 1543 + 1544 + [[package]] 1545 + name = "windows_x86_64_msvc" 1546 + version = "0.52.6" 1547 + source = "registry+https://github.com/rust-lang/crates.io-index" 1548 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1549 + 1550 + [[package]] 1551 + name = "windows_x86_64_msvc" 1552 + version = "0.53.1" 1553 + source = "registry+https://github.com/rust-lang/crates.io-index" 1554 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 1555 + 1556 + [[package]] 1557 + name = "wit-bindgen" 1558 + version = "0.51.0" 1559 + source = "registry+https://github.com/rust-lang/crates.io-index" 1560 + checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 1561 + 1562 + [[package]] 1563 + name = "writeable" 1564 + version = "0.6.2" 1565 + source = "registry+https://github.com/rust-lang/crates.io-index" 1566 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 1567 + 1568 + [[package]] 1569 + name = "yoke" 1570 + version = "0.8.1" 1571 + source = "registry+https://github.com/rust-lang/crates.io-index" 1572 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 1573 + dependencies = [ 1574 + "stable_deref_trait", 1575 + "yoke-derive", 1576 + "zerofrom", 1577 + ] 1578 + 1579 + [[package]] 1580 + name = "yoke-derive" 1581 + version = "0.8.1" 1582 + source = "registry+https://github.com/rust-lang/crates.io-index" 1583 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 1584 + dependencies = [ 1585 + "proc-macro2", 1586 + "quote", 1587 + "syn 2.0.116", 1588 + "synstructure", 1589 + ] 1590 + 1591 + [[package]] 1592 + name = "zerocopy" 1593 + version = "0.8.39" 1594 + source = "registry+https://github.com/rust-lang/crates.io-index" 1595 + checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" 1596 + dependencies = [ 1597 + "zerocopy-derive", 1598 + ] 1599 + 1600 + [[package]] 1601 + name = "zerocopy-derive" 1602 + version = "0.8.39" 1603 + source = "registry+https://github.com/rust-lang/crates.io-index" 1604 + checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" 1605 + dependencies = [ 1606 + "proc-macro2", 1607 + "quote", 1608 + "syn 2.0.116", 1609 + ] 1610 + 1611 + [[package]] 1612 + name = "zerofrom" 1613 + version = "0.1.6" 1614 + source = "registry+https://github.com/rust-lang/crates.io-index" 1615 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 1616 + dependencies = [ 1617 + "zerofrom-derive", 1618 + ] 1619 + 1620 + [[package]] 1621 + name = "zerofrom-derive" 1622 + version = "0.1.6" 1623 + source = "registry+https://github.com/rust-lang/crates.io-index" 1624 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 1625 + dependencies = [ 1626 + "proc-macro2", 1627 + "quote", 1628 + "syn 2.0.116", 1629 + "synstructure", 1630 + ] 1631 + 1632 + [[package]] 1633 + name = "zeroize" 1634 + version = "1.8.2" 1635 + source = "registry+https://github.com/rust-lang/crates.io-index" 1636 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 1637 + 1638 + [[package]] 1639 + name = "zerotrie" 1640 + version = "0.2.3" 1641 + source = "registry+https://github.com/rust-lang/crates.io-index" 1642 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 1643 + dependencies = [ 1644 + "displaydoc", 1645 + "yoke", 1646 + "zerofrom", 1647 + ] 1648 + 1649 + [[package]] 1650 + name = "zerovec" 1651 + version = "0.11.5" 1652 + source = "registry+https://github.com/rust-lang/crates.io-index" 1653 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 1654 + dependencies = [ 1655 + "yoke", 1656 + "zerofrom", 1657 + "zerovec-derive", 1658 + ] 1659 + 1660 + [[package]] 1661 + name = "zerovec-derive" 1662 + version = "0.11.2" 1663 + source = "registry+https://github.com/rust-lang/crates.io-index" 1664 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 1665 + dependencies = [ 1666 + "proc-macro2", 1667 + "quote", 1668 + "syn 2.0.116", 1669 + ] 1670 + 1671 + [[package]] 1672 + name = "zmij" 1673 + version = "1.0.21" 1674 + source = "registry+https://github.com/rust-lang/crates.io-index" 1675 + checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
+21
Cargo.toml
··· 1 + [package] 2 + name = "colorbot" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [workspace] 7 + resolver = "3" 8 + members = ["fluxer-rs"] 9 + 10 + 11 + [dependencies] 12 + env_logger = "0.11.9" 13 + log = "0.4.29" 14 + 15 + [dependencies.fluxer-rs] 16 + version = "*" 17 + path = "fluxer-rs" 18 + 19 + [dependencies.tokio] 20 + version = "1.49.0" 21 + features = ["rt-multi-thread", "macros"]
+26
fluxer-rs/Cargo.toml
··· 1 + [package] 2 + name = "fluxer-rs" 3 + version = "0.1.0" 4 + edition = "2024" 5 + license = "MIT" 6 + description = "A rust implementation of the fluxer api to be used on fluxer.app and other self hosted instances" 7 + homepage = "https://git.killuaa.dev/roufpup/colorbot" 8 + repository = "https://git.killuaa.dev/roufpup/colorbot" 9 + readme = "README.md" 10 + 11 + [dependencies] 12 + async-trait = "0.1.89" 13 + log = "0.4.29" 14 + serde_json = "1.0.149" 15 + 16 + [dependencies.ezsockets] 17 + version = "0.7.1" 18 + features = ["rustls"] 19 + 20 + [dependencies.tokio] 21 + version = "1.49.0" 22 + features = ["rt-multi-thread", "macros"] 23 + 24 + [dependencies.serde] 25 + version = "1.0.228" 26 + features = ["derive"]
+1
fluxer-rs/README.md
··· 1 + A rust implementation of the fluxer api to be used on fluxer.app and other self hosted instances
+26
fluxer-rs/src/gateway/dispatch_data/guild.rs
··· 1 + use crate::gateway::dispatch_data::types::{Channel, Member, Properties, Role}; 2 + use serde::Deserialize; 3 + use serde_json::Value; 4 + 5 + #[derive(Deserialize)] 6 + pub struct GuildDeleteData { 7 + #[serde(rename = "id")] 8 + pub guild_id: String, 9 + pub unavailable: bool, 10 + } 11 + 12 + #[derive(Deserialize)] 13 + pub struct GuildCreateData { 14 + pub channels: Vec<Channel>, 15 + pub emojis: Vec<Value>, 16 + pub id: String, 17 + pub joined_at: String, 18 + pub member_count: i64, 19 + pub members: Vec<Member>, 20 + pub online_count: i64, 21 + pub presences: Vec<Value>, 22 + pub properties: Properties, 23 + pub roles: Vec<Role>, 24 + pub stickers: Vec<Value>, 25 + pub voice_states: Vec<Value>, 26 + }
+35
fluxer-rs/src/gateway/dispatch_data/message.rs
··· 1 + use serde::Deserialize; 2 + use serde_json::Value; 3 + 4 + use crate::gateway::dispatch_data::types::{Author, Member}; 5 + 6 + #[derive(Deserialize)] 7 + pub struct MessageEventData { 8 + pub attachments: Vec<Value>, 9 + pub author: Author, 10 + pub channel_id: String, 11 + pub channel_type: i64, 12 + pub content: String, 13 + pub edited_timestamp: Value, 14 + pub embeds: Vec<Value>, 15 + pub flags: i64, 16 + pub guild_id: String, 17 + pub id: String, 18 + pub member: Member, 19 + pub mention_everyone: bool, 20 + pub nonce: String, 21 + pub pinned: bool, 22 + pub stickers: Vec<Value>, 23 + pub timestamp: String, 24 + #[serde(rename = "type")] 25 + pub message_type: i64, 26 + } 27 + 28 + #[derive(Deserialize)] 29 + pub struct TypingEventData { 30 + pub channel_id: String, 31 + pub guild_id: String, 32 + pub member: Member, 33 + pub timestamp: i64, 34 + pub user_id: String, 35 + }
+3
fluxer-rs/src/gateway/dispatch_data/mod.rs
··· 1 + pub mod guild; 2 + pub mod message; 3 + pub mod types;
+104
fluxer-rs/src/gateway/dispatch_data/types.rs
··· 1 + use serde::Deserialize; 2 + use serde_json::Value; 3 + 4 + #[derive(Deserialize)] 5 + pub struct Channel { 6 + pub guild_id: String, 7 + pub id: String, 8 + pub name: String, 9 + pub permission_overwrites: Vec<Value>, 10 + pub position: i64, 11 + #[serde(rename = "type")] 12 + pub channel_type: i64, 13 + pub last_message_id: Option<String>, 14 + pub last_pin_timestamp: Option<Value>, 15 + pub nsfw: Option<bool>, 16 + pub parent_id: Option<String>, 17 + pub rate_limit_per_user: Option<i64>, 18 + pub topic: Option<Value>, 19 + pub bitrate: Option<i64>, 20 + pub rtc_region: Option<Value>, 21 + pub user_limit: Option<i64>, 22 + } 23 + 24 + #[derive(Deserialize)] 25 + pub struct Member { 26 + pub accent_color: Value, 27 + pub avatar: Value, 28 + pub banner: Value, 29 + pub communication_disabled_until: Value, 30 + pub deaf: bool, 31 + pub guild_id: Option<String>, 32 + pub joined_at: String, 33 + pub mute: bool, 34 + pub nick: Value, 35 + pub roles: Vec<String>, 36 + pub user: Option<User>, 37 + } 38 + 39 + #[derive(Deserialize)] 40 + pub struct User { 41 + pub avatar: Value, 42 + pub avatar_color: Value, 43 + pub bot: Option<bool>, 44 + pub discriminator: String, 45 + pub flags: i64, 46 + pub global_name: Value, 47 + pub id: String, 48 + pub username: String, 49 + } 50 + 51 + #[derive(Deserialize)] 52 + pub struct Properties { 53 + pub afk_channel_id: Value, 54 + pub afk_timeout: i64, 55 + pub banner: Value, 56 + pub banner_height: Value, 57 + pub banner_width: Value, 58 + pub default_message_notifications: i64, 59 + pub disabled_operations: i64, 60 + pub embed_splash: Value, 61 + pub embed_splash_height: Value, 62 + pub embed_splash_width: Value, 63 + pub explicit_content_filter: i64, 64 + pub features: Vec<String>, 65 + pub icon: Value, 66 + pub id: String, 67 + pub message_history_cutoff: Value, 68 + pub mfa_level: i64, 69 + pub name: String, 70 + pub nsfw_level: i64, 71 + pub owner_id: String, 72 + pub rules_channel_id: Value, 73 + pub splash: Value, 74 + pub splash_card_alignment: i64, 75 + pub splash_height: Value, 76 + pub splash_width: Value, 77 + pub system_channel_flags: i64, 78 + pub system_channel_id: String, 79 + pub vanity_url_code: Value, 80 + pub verification_level: i64, 81 + } 82 + 83 + #[derive(Deserialize)] 84 + pub struct Role { 85 + pub color: i64, 86 + pub hoist: bool, 87 + pub hoist_position: Value, 88 + pub id: String, 89 + pub mentionable: bool, 90 + pub name: String, 91 + pub permissions: String, 92 + pub position: i64, 93 + } 94 + 95 + #[derive(Deserialize)] 96 + pub struct Author { 97 + pub avatar: String, 98 + pub avatar_color: i64, 99 + pub discriminator: String, 100 + pub flags: i64, 101 + pub global_name: String, 102 + pub id: String, 103 + pub username: String, 104 + }
+3
fluxer-rs/src/gateway/mod.rs
··· 1 + pub mod op_handlers; 2 + pub mod serde; 3 + pub mod dispatch_data;
+68
fluxer-rs/src/gateway/op_handlers/dispatch.rs
··· 1 + use log::info; 2 + 3 + use crate::gateway::dispatch_data::{ 4 + guild::{GuildCreateData, GuildDeleteData}, 5 + message::{MessageEventData, TypingEventData}, 6 + }; 7 + 8 + pub enum DispatchEvent { 9 + Ready, 10 + GuildDelete(GuildDeleteData), 11 + GuildCreate(Box<GuildCreateData>), 12 + MessageCreate(MessageEventData), 13 + MessageDelete(MessageEventData), 14 + TypingStart(TypingEventData), 15 + TypingStop(TypingEventData), 16 + } 17 + 18 + pub trait DispatchHandlerTrait { 19 + fn handle_ready_dispatch(&self) { 20 + info!("-> [DISPATCH::READY]") 21 + } 22 + fn handle_guild_delete_dispatch(&self, data: GuildDeleteData) { 23 + info!( 24 + "-> [DISPATCH::GUILD_DELETE] ID: {}, Unavailable: {}", 25 + data.guild_id, data.unavailable 26 + ) 27 + } 28 + fn handle_guild_create_dispatch(&self, data: Box<GuildCreateData>) { 29 + info!("-> [DISPATCH::GUILD_CREATE] ID: {}", data.id) 30 + } 31 + fn handle_message_create_dispatch(&self, data: MessageEventData) { 32 + info!("-> [DISPATCH::MESSAGE_CREATE] CONTENT: {}", data.content) 33 + } 34 + fn handle_message_delete_dispatch(&self, data: MessageEventData) { 35 + info!("-> [DISPATCH::MESSAGE_DELETE] CONTENT: {}", data.content) 36 + } 37 + fn handle_typing_start_dispatch(&self, data: TypingEventData) { 38 + info!( 39 + "-> [DISPATCH::TYPING_START] GUILD: {}, CHANNEL: {}", 40 + data.guild_id, data.channel_id 41 + ) 42 + } 43 + fn handle_typing_stop_dispatch(&self, data: TypingEventData) { 44 + info!( 45 + "-> [DISPATCH::TYPING_STOP] GUILD: {}, CHANNEL: {}", 46 + data.guild_id, data.channel_id 47 + ) 48 + } 49 + } 50 + 51 + #[derive(Default)] 52 + pub struct DispatchHandler; 53 + impl DispatchHandlerTrait for DispatchHandler {} 54 + 55 + pub async fn handle_dispatch_events<T: DispatchHandlerTrait + Send + Sync + 'static>( 56 + dispatch_event: Box<DispatchEvent>, 57 + dispatcher: &T, 58 + ) { 59 + match *dispatch_event { 60 + DispatchEvent::Ready => dispatcher.handle_ready_dispatch(), 61 + DispatchEvent::GuildDelete(data) => dispatcher.handle_guild_delete_dispatch(data), 62 + DispatchEvent::GuildCreate(data) => dispatcher.handle_guild_create_dispatch(data), 63 + DispatchEvent::MessageCreate(data) => dispatcher.handle_message_create_dispatch(data), 64 + DispatchEvent::MessageDelete(data) => dispatcher.handle_message_delete_dispatch(data), 65 + DispatchEvent::TypingStart(data) => dispatcher.handle_typing_start_dispatch(data), 66 + DispatchEvent::TypingStop(data) => dispatcher.handle_typing_stop_dispatch(data), 67 + } 68 + }
+59
fluxer-rs/src/gateway/op_handlers/heartbeat.rs
··· 1 + use ezsockets::{Client, Utf8Bytes}; 2 + use log::info; 3 + 4 + use crate::{ 5 + FluxerBot, 6 + gateway::{ 7 + op_handlers::dispatch::DispatchHandlerTrait, 8 + serde::send_serde::{OP2D, OP2DProps, SendData, SendDataType}, 9 + }, 10 + }; 11 + 12 + pub async fn heartbeat_handler<T: DispatchHandlerTrait + Send + Sync + 'static>( 13 + text: Utf8Bytes, 14 + client_handle: &Client<FluxerBot<T>>, 15 + ) { 16 + info!("-> {}", text); 17 + 18 + let heartbeat = SendData { 19 + op: 1, 20 + d: SendDataType::OP1(None), 21 + }; 22 + 23 + let heartbeat_string = serde_json::to_string(&heartbeat).unwrap(); 24 + client_handle.text(&heartbeat_string).unwrap(); 25 + 26 + info!("<- {}", heartbeat_string); 27 + } 28 + 29 + pub async fn heartbeat_ack_handler<T: DispatchHandlerTrait + Send + Sync + 'static>( 30 + text: Utf8Bytes, 31 + token: String, 32 + heartbeat_ack: bool, 33 + client_handle: &Client<FluxerBot<T>>, 34 + ) -> bool { 35 + info!("-> {} Heartbeat acknowledged", text); 36 + if !heartbeat_ack { 37 + let auth_string = serde_json::to_string(&SendData { 38 + d: SendDataType::OP2(OP2D { 39 + token, 40 + properties: OP2DProps { 41 + os: "Linux".to_string(), 42 + browser: "Fluxer-rs".to_string(), 43 + device: "x64".to_string(), 44 + }, 45 + }), 46 + op: 2, 47 + }) 48 + .unwrap(); 49 + 50 + match client_handle.text(auth_string) { 51 + Ok(_) => {} 52 + Err(err) => { 53 + panic!("{err}") 54 + } 55 + }; 56 + return true; 57 + } 58 + false 59 + }
+2
fluxer-rs/src/gateway/op_handlers/mod.rs
··· 1 + pub mod heartbeat; 2 + pub mod dispatch;
+5
fluxer-rs/src/gateway/serde/mod.rs
··· 1 + pub mod receive_serde; 2 + pub mod send_serde; 3 + 4 + 5 +
+77
fluxer-rs/src/gateway/serde/receive_serde.rs
··· 1 + use serde::{Deserialize, Serialize, de}; 2 + use serde_json::Value; 3 + 4 + use crate::gateway::{ 5 + dispatch_data::{ 6 + guild::{GuildCreateData, GuildDeleteData}, 7 + message::{MessageEventData, TypingEventData}, 8 + }, 9 + op_handlers::dispatch::DispatchEvent, 10 + }; 11 + 12 + pub struct ReceiveData { 13 + pub d: ReceiveDataType, 14 + pub op: u8, 15 + } 16 + 17 + pub enum ReceiveDataType { 18 + OP0(Box<DispatchEvent>), 19 + OP1(Option<u32>), 20 + OP10(OP10D), 21 + OP11, 22 + } 23 + 24 + #[derive(Serialize, Deserialize)] 25 + pub struct OP10D { 26 + pub heartbeat_interval: u32, 27 + } 28 + 29 + impl<'de> Deserialize<'de> for ReceiveData { 30 + fn deserialize<D: de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> { 31 + let value = Value::deserialize(deserializer)?; 32 + let op = value["op"] 33 + .as_u64() 34 + .ok_or_else(|| de::Error::missing_field("op"))? as u8; 35 + 36 + let d = match op { 37 + 0 => { 38 + let dispatch_event = match value["t"].as_str().unwrap() { 39 + "READY" => DispatchEvent::Ready, 40 + "GUILD_DELETE" => DispatchEvent::GuildDelete( 41 + GuildDeleteData::deserialize(&value["d"]).map_err(de::Error::custom)?, 42 + ), 43 + "GUILD_CREATE" => DispatchEvent::GuildCreate(Box::new( 44 + GuildCreateData::deserialize(&value["d"]).map_err(de::Error::custom)?, 45 + )), 46 + "MESSAGE_CREATE" => DispatchEvent::MessageCreate( 47 + MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 48 + ), 49 + "MESSAGE_DELETE" => DispatchEvent::MessageDelete( 50 + MessageEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 51 + ), 52 + "TYPING_START" => DispatchEvent::TypingStart( 53 + TypingEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 54 + ), 55 + "TYPING_STOP" => DispatchEvent::TypingStop( 56 + TypingEventData::deserialize(&value["d"]).map_err(de::Error::custom)?, 57 + ), 58 + _ => panic!("Unimplemented dispatch event: {}", value), 59 + }; 60 + ReceiveDataType::OP0(Box::new(dispatch_event)) 61 + } 62 + 1 => { 63 + let inner: Option<u32> = 64 + Option::deserialize(&value["d"]).map_err(de::Error::custom)?; 65 + ReceiveDataType::OP1(inner) 66 + } 67 + 10 => { 68 + let inner = OP10D::deserialize(&value["d"]).map_err(de::Error::custom)?; 69 + ReceiveDataType::OP10(inner) 70 + } 71 + 11 => ReceiveDataType::OP11, 72 + _ => return Err(de::Error::custom(format!("unknown op: {}", op))), 73 + }; 74 + 75 + Ok(ReceiveData { d, op }) 76 + } 77 + }
+39
fluxer-rs/src/gateway/serde/send_serde.rs
··· 1 + use serde::{Serialize, ser::SerializeMap}; 2 + 3 + pub enum SendDataType { 4 + OP1(Option<u32>), 5 + OP2(OP2D), 6 + } 7 + 8 + pub struct SendData { 9 + pub d: SendDataType, 10 + pub op: u8, 11 + } 12 + 13 + impl Serialize for SendData { 14 + fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> { 15 + let mut serializer_map = serializer.serialize_map(None)?; 16 + 17 + serializer_map.serialize_entry("op", &self.op)?; 18 + 19 + match &self.d { 20 + SendDataType::OP1(op1_d) => serializer_map.serialize_entry("d", &op1_d)?, 21 + SendDataType::OP2(op2_d) => serializer_map.serialize_entry("d", &op2_d)?, 22 + } 23 + 24 + serializer_map.end() 25 + } 26 + } 27 + 28 + #[derive(Serialize)] 29 + pub struct OP2D { 30 + pub token: String, 31 + pub properties: OP2DProps, 32 + } 33 + 34 + #[derive(Serialize)] 35 + pub struct OP2DProps { 36 + pub os: String, 37 + pub browser: String, 38 + pub device: String, 39 + }
+88
fluxer-rs/src/lib.rs
··· 1 + use async_trait::async_trait; 2 + use ezsockets::{Bytes, Client, ClientConfig, ClientExt, Utf8Bytes, connect}; 3 + use log::{error, info}; 4 + 5 + use crate::gateway::{ 6 + op_handlers::{ 7 + dispatch::{DispatchHandlerTrait, handle_dispatch_events}, 8 + heartbeat::{heartbeat_ack_handler, heartbeat_handler}, 9 + }, 10 + serde::receive_serde::{ReceiveData, ReceiveDataType}, 11 + }; 12 + 13 + pub mod gateway; 14 + 15 + pub struct FluxerBot<T: DispatchHandlerTrait + Send + Sync + 'static> { 16 + pub token: String, 17 + pub endpoint: String, 18 + pub dispatch_handler: T, 19 + pub ws_handle: Client<FluxerBot<T>>, 20 + pub heartbeat_ack: bool, 21 + } 22 + 23 + impl<T: DispatchHandlerTrait + Send + Sync + 'static> FluxerBot<T> { 24 + pub async fn start(token: String, endpoint: String, dispatch_handler: T) { 25 + info!("Init the bot"); 26 + 27 + let config: ClientConfig = ClientConfig::new(endpoint.as_str()); 28 + 29 + info!("Starting websocket"); 30 + let (_, future) = connect( 31 + |ws_handle| FluxerBot { 32 + ws_handle, 33 + token, 34 + heartbeat_ack: false, 35 + dispatch_handler, 36 + endpoint, 37 + }, 38 + config, 39 + ) 40 + .await; 41 + let _ = future.await; 42 + } 43 + } 44 + 45 + impl<T> FluxerBot<T> where T: Send + Sync + DispatchHandlerTrait + 'static {} 46 + 47 + #[async_trait] 48 + impl<T: DispatchHandlerTrait + Send + Sync + 'static> ClientExt for FluxerBot<T> { 49 + type Call = (); 50 + 51 + async fn on_text(&mut self, text: Utf8Bytes) -> Result<(), ezsockets::Error> { 52 + let result: ReceiveData = match serde_json::from_slice(text.as_bytes()) { 53 + Ok(value) => value, 54 + Err(err) => { 55 + error!("Unhandled behavior: {err}"); 56 + error!("{}", text); 57 + panic!() 58 + } 59 + }; 60 + 61 + match result.d { 62 + ReceiveDataType::OP10(_data) => heartbeat_handler(text, &__self.ws_handle).await, 63 + ReceiveDataType::OP11 => { 64 + //TODO: Implement the check whether this is the first heartbeat a bit better 65 + self.heartbeat_ack = heartbeat_ack_handler( 66 + text, 67 + __self.token.clone(), 68 + __self.heartbeat_ack, 69 + &__self.ws_handle, 70 + ) 71 + .await 72 + } 73 + ReceiveDataType::OP1(_op1_d) => heartbeat_handler(text, &__self.ws_handle).await, 74 + ReceiveDataType::OP0(dispatch_event) => { 75 + handle_dispatch_events(dispatch_event, &self.dispatch_handler).await 76 + } 77 + } 78 + Ok(()) 79 + } 80 + 81 + async fn on_binary(&mut self, _bytes: Bytes) -> Result<(), ezsockets::Error> { 82 + Ok(()) 83 + } 84 + 85 + async fn on_call(&mut self, _call: Self::Call) -> Result<(), ezsockets::Error> { 86 + Ok(()) 87 + } 88 + }
+249
npins/default.nix
··· 1 + /* 2 + This file is provided under the MIT licence: 3 + 4 + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 + 6 + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 + 8 + THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 + */ 10 + # Generated by npins. Do not modify; will be overwritten regularly 11 + let 12 + # Backwards-compatibly make something that previously didn't take any arguments take some 13 + # The function must return an attrset, and will unfortunately be eagerly evaluated 14 + # Same thing, but it catches eval errors on the default argument so that one may still call it with other arguments 15 + mkFunctor = 16 + fn: 17 + let 18 + e = builtins.tryEval (fn { }); 19 + in 20 + (if e.success then e.value else { error = fn { }; }) // { __functor = _self: fn; }; 21 + 22 + # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 23 + range = 24 + first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1); 25 + 26 + # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 27 + stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); 28 + 29 + # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269 30 + stringAsChars = f: s: concatStrings (map f (stringToCharacters s)); 31 + concatStrings = builtins.concatStringsSep ""; 32 + 33 + # If the environment variable NPINS_OVERRIDE_${name} is set, then use 34 + # the path directly as opposed to the fetched source. 35 + # (Taken from Niv for compatibility) 36 + mayOverride = 37 + name: path: 38 + let 39 + envVarName = "NPINS_OVERRIDE_${saneName}"; 40 + saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name; 41 + ersatz = builtins.getEnv envVarName; 42 + in 43 + if ersatz == "" then 44 + path 45 + else 46 + # this turns the string into an actual Nix path (for both absolute and 47 + # relative paths) 48 + builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" ( 49 + if builtins.substring 0 1 ersatz == "/" then 50 + /. + ersatz 51 + else 52 + /. + builtins.getEnv "PWD" + "/${ersatz}" 53 + ); 54 + 55 + mkSource = 56 + name: spec: 57 + { 58 + pkgs ? null, 59 + }: 60 + assert spec ? type; 61 + let 62 + # Unify across builtin and pkgs fetchers. 63 + # `fetchGit` requires a wrapper because of slight API differences. 64 + fetchers = 65 + if pkgs == null then 66 + { 67 + inherit (builtins) fetchTarball fetchurl; 68 + # For some fucking reason, fetchGit has a different signature than the other builtin fetchers … 69 + fetchGit = args: (builtins.fetchGit args).outPath; 70 + } 71 + else 72 + { 73 + fetchTarball = 74 + { 75 + url, 76 + sha256, 77 + }: 78 + pkgs.fetchzip { 79 + inherit url sha256; 80 + extension = "tar"; 81 + }; 82 + inherit (pkgs) fetchurl; 83 + fetchGit = 84 + { 85 + url, 86 + submodules, 87 + rev, 88 + name, 89 + narHash, 90 + }: 91 + pkgs.fetchgit { 92 + inherit url rev name; 93 + fetchSubmodules = submodules; 94 + hash = narHash; 95 + }; 96 + }; 97 + 98 + # Dispatch to the correct code path based on the type 99 + path = 100 + if spec.type == "Git" then 101 + mkGitSource fetchers spec 102 + else if spec.type == "GitRelease" then 103 + mkGitSource fetchers spec 104 + else if spec.type == "PyPi" then 105 + mkPyPiSource fetchers spec 106 + else if spec.type == "Channel" then 107 + mkChannelSource fetchers spec 108 + else if spec.type == "Tarball" then 109 + mkTarballSource fetchers spec 110 + else if spec.type == "Container" then 111 + mkContainerSource pkgs spec 112 + else 113 + builtins.throw "Unknown source type ${spec.type}"; 114 + in 115 + spec // { outPath = mayOverride name path; }; 116 + 117 + mkGitSource = 118 + { 119 + fetchTarball, 120 + fetchGit, 121 + ... 122 + }: 123 + { 124 + repository, 125 + revision, 126 + url ? null, 127 + submodules, 128 + hash, 129 + ... 130 + }: 131 + assert repository ? type; 132 + # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository 133 + # In the latter case, there we will always be an url to the tarball 134 + if url != null && !submodules then 135 + fetchTarball { 136 + inherit url; 137 + sha256 = hash; 138 + } 139 + else 140 + let 141 + url = 142 + if repository.type == "Git" then 143 + repository.url 144 + else if repository.type == "GitHub" then 145 + "https://github.com/${repository.owner}/${repository.repo}.git" 146 + else if repository.type == "GitLab" then 147 + "${repository.server}/${repository.repo_path}.git" 148 + else if repository.type == "Forgejo" then 149 + "${repository.server}/${repository.owner}/${repository.repo}.git" 150 + else 151 + throw "Unrecognized repository type ${repository.type}"; 152 + urlToName = 153 + url: rev: 154 + let 155 + matched = builtins.match "^.*/([^/]*)(\\.git)?$" url; 156 + 157 + short = builtins.substring 0 7 rev; 158 + 159 + appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; 160 + in 161 + "${if matched == null then "source" else builtins.head matched}${appendShort}"; 162 + name = urlToName url revision; 163 + in 164 + fetchGit { 165 + rev = revision; 166 + narHash = hash; 167 + 168 + inherit name submodules url; 169 + }; 170 + 171 + mkPyPiSource = 172 + { fetchurl, ... }: 173 + { 174 + url, 175 + hash, 176 + ... 177 + }: 178 + fetchurl { 179 + inherit url; 180 + sha256 = hash; 181 + }; 182 + 183 + mkChannelSource = 184 + { fetchTarball, ... }: 185 + { 186 + url, 187 + hash, 188 + ... 189 + }: 190 + fetchTarball { 191 + inherit url; 192 + sha256 = hash; 193 + }; 194 + 195 + mkTarballSource = 196 + { fetchTarball, ... }: 197 + { 198 + url, 199 + locked_url ? url, 200 + hash, 201 + ... 202 + }: 203 + fetchTarball { 204 + url = locked_url; 205 + sha256 = hash; 206 + }; 207 + 208 + mkContainerSource = 209 + pkgs: 210 + { 211 + image_name, 212 + image_tag, 213 + image_digest, 214 + ... 215 + }: 216 + if pkgs == null then 217 + builtins.throw "container sources require passing in a Nixpkgs value: https://github.com/andir/npins/blob/master/README.md#using-the-nixpkgs-fetchers" 218 + else 219 + pkgs.dockerTools.pullImage { 220 + imageName = image_name; 221 + imageDigest = image_digest; 222 + finalImageTag = image_tag; 223 + }; 224 + in 225 + mkFunctor ( 226 + { 227 + input ? ./sources.json, 228 + }: 229 + let 230 + data = 231 + if builtins.isPath input then 232 + # while `readFile` will throw an error anyways if the path doesn't exist, 233 + # we still need to check beforehand because *our* error can be caught but not the one from the builtin 234 + # *piegames sighs* 235 + if builtins.pathExists input then 236 + builtins.fromJSON (builtins.readFile input) 237 + else 238 + throw "Input path ${toString input} does not exist" 239 + else if builtins.isAttrs input then 240 + input 241 + else 242 + throw "Unsupported input type ${builtins.typeOf input}, must be a path or an attrset"; 243 + version = data.version; 244 + in 245 + if version == 7 then 246 + builtins.mapAttrs (name: spec: mkFunctor (mkSource name spec)) data.pins 247 + else 248 + throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`" 249 + )
+31
npins/sources.json
··· 1 + { 2 + "pins": { 3 + "nixpkgs": { 4 + "type": "Git", 5 + "repository": { 6 + "type": "GitHub", 7 + "owner": "NixOS", 8 + "repo": "nixpkgs" 9 + }, 10 + "branch": "nixos-unstable", 11 + "submodules": false, 12 + "revision": "a82ccc39b39b621151d6732718e3e250109076fa", 13 + "url": "https://github.com/NixOS/nixpkgs/archive/a82ccc39b39b621151d6732718e3e250109076fa.tar.gz", 14 + "hash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=" 15 + }, 16 + "rust-overlay": { 17 + "type": "Git", 18 + "repository": { 19 + "type": "GitHub", 20 + "owner": "oxalica", 21 + "repo": "rust-overlay" 22 + }, 23 + "branch": "master", 24 + "submodules": false, 25 + "revision": "755d3669699a7c62aef35af187d75dc2728cfd85", 26 + "url": "https://github.com/oxalica/rust-overlay/archive/755d3669699a7c62aef35af187d75dc2728cfd85.tar.gz", 27 + "hash": "sha256-wieWskQxZLPlNXX06JEB0bMoS/ZYQ89xBzF0RL9lyLs=" 28 + } 29 + }, 30 + "version": 7 31 + }
+24
shell.nix
··· 1 + let 2 + sources = import ./npins; 3 + pkgs = import sources.nixpkgs { 4 + config.allowUnfree = true; 5 + overlays = [ 6 + (import sources.rust-overlay) 7 + ]; 8 + }; 9 + in 10 + pkgs.mkShellNoCC { 11 + nativeBuildInputs = with pkgs; [ 12 + clang 13 + wild 14 + (rust-bin.stable.latest.default.override { 15 + extensions = [ 16 + "rust-src" 17 + "rust-analyzer" 18 + ]; 19 + }) 20 + ]; 21 + shellHook = '' 22 + echo hi 23 + ''; 24 + }
+13
src/main.rs
··· 1 + use fluxer_rs::{FluxerBot, gateway::op_handlers::dispatch::DispatchHandler}; 2 + 3 + #[tokio::main] 4 + async fn main() { 5 + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); 6 + 7 + FluxerBot::start( 8 + "".to_string(), 9 + "wss://gateway.fluxer.app?v=1&encoding=json&compress=none".to_string(), 10 + DispatchHandler, 11 + ) 12 + .await; 13 + }