Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol. wisp.place

wahwehwahweh

+2
.gitignore
··· 5 5 /.pnp 6 6 .pnp.js 7 7 8 + cli/target/ 9 + target/ 8 10 # testing 9 11 /coverage 10 12
change-admin-password.ts scripts/change-admin-password.ts
+4731
cli/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 = "abnf" 7 + version = "0.13.0" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a" 10 + dependencies = [ 11 + "abnf-core", 12 + "nom", 13 + ] 14 + 15 + [[package]] 16 + name = "abnf-core" 17 + version = "0.5.0" 18 + source = "registry+https://github.com/rust-lang/crates.io-index" 19 + checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d" 20 + dependencies = [ 21 + "nom", 22 + ] 23 + 24 + [[package]] 25 + name = "addr2line" 26 + version = "0.25.1" 27 + source = "registry+https://github.com/rust-lang/crates.io-index" 28 + checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" 29 + dependencies = [ 30 + "gimli", 31 + ] 32 + 33 + [[package]] 34 + name = "adler2" 35 + version = "2.0.1" 36 + source = "registry+https://github.com/rust-lang/crates.io-index" 37 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 38 + 39 + [[package]] 40 + name = "adler32" 41 + version = "1.2.0" 42 + source = "registry+https://github.com/rust-lang/crates.io-index" 43 + checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 44 + 45 + [[package]] 46 + name = "aho-corasick" 47 + version = "1.1.4" 48 + source = "registry+https://github.com/rust-lang/crates.io-index" 49 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 50 + dependencies = [ 51 + "memchr", 52 + ] 53 + 54 + [[package]] 55 + name = "aliasable" 56 + version = "0.1.3" 57 + source = "registry+https://github.com/rust-lang/crates.io-index" 58 + checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 59 + 60 + [[package]] 61 + name = "alloc-no-stdlib" 62 + version = "2.0.4" 63 + source = "registry+https://github.com/rust-lang/crates.io-index" 64 + checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 65 + 66 + [[package]] 67 + name = "alloc-stdlib" 68 + version = "0.2.2" 69 + source = "registry+https://github.com/rust-lang/crates.io-index" 70 + checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 71 + dependencies = [ 72 + "alloc-no-stdlib", 73 + ] 74 + 75 + [[package]] 76 + name = "android_system_properties" 77 + version = "0.1.5" 78 + source = "registry+https://github.com/rust-lang/crates.io-index" 79 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 80 + dependencies = [ 81 + "libc", 82 + ] 83 + 84 + [[package]] 85 + name = "anstream" 86 + version = "0.6.21" 87 + source = "registry+https://github.com/rust-lang/crates.io-index" 88 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 89 + dependencies = [ 90 + "anstyle", 91 + "anstyle-parse", 92 + "anstyle-query", 93 + "anstyle-wincon", 94 + "colorchoice", 95 + "is_terminal_polyfill", 96 + "utf8parse", 97 + ] 98 + 99 + [[package]] 100 + name = "anstyle" 101 + version = "1.0.13" 102 + source = "registry+https://github.com/rust-lang/crates.io-index" 103 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 104 + 105 + [[package]] 106 + name = "anstyle-parse" 107 + version = "0.2.7" 108 + source = "registry+https://github.com/rust-lang/crates.io-index" 109 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 110 + dependencies = [ 111 + "utf8parse", 112 + ] 113 + 114 + [[package]] 115 + name = "anstyle-query" 116 + version = "1.1.4" 117 + source = "registry+https://github.com/rust-lang/crates.io-index" 118 + checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" 119 + dependencies = [ 120 + "windows-sys 0.60.2", 121 + ] 122 + 123 + [[package]] 124 + name = "anstyle-wincon" 125 + version = "3.0.10" 126 + source = "registry+https://github.com/rust-lang/crates.io-index" 127 + checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" 128 + dependencies = [ 129 + "anstyle", 130 + "once_cell_polyfill", 131 + "windows-sys 0.60.2", 132 + ] 133 + 134 + [[package]] 135 + name = "ascii" 136 + version = "1.1.0" 137 + source = "registry+https://github.com/rust-lang/crates.io-index" 138 + checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" 139 + 140 + [[package]] 141 + name = "async-compression" 142 + version = "0.4.32" 143 + source = "registry+https://github.com/rust-lang/crates.io-index" 144 + checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0" 145 + dependencies = [ 146 + "compression-codecs", 147 + "compression-core", 148 + "futures-core", 149 + "pin-project-lite", 150 + "tokio", 151 + ] 152 + 153 + [[package]] 154 + name = "async-lock" 155 + version = "3.4.1" 156 + source = "registry+https://github.com/rust-lang/crates.io-index" 157 + checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 158 + dependencies = [ 159 + "event-listener", 160 + "event-listener-strategy", 161 + "pin-project-lite", 162 + ] 163 + 164 + [[package]] 165 + name = "async-trait" 166 + version = "0.1.89" 167 + source = "registry+https://github.com/rust-lang/crates.io-index" 168 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 169 + dependencies = [ 170 + "proc-macro2", 171 + "quote", 172 + "syn 2.0.108", 173 + ] 174 + 175 + [[package]] 176 + name = "atomic-waker" 177 + version = "1.1.2" 178 + source = "registry+https://github.com/rust-lang/crates.io-index" 179 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 180 + 181 + [[package]] 182 + name = "autocfg" 183 + version = "1.5.0" 184 + source = "registry+https://github.com/rust-lang/crates.io-index" 185 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 186 + 187 + [[package]] 188 + name = "backtrace" 189 + version = "0.3.76" 190 + source = "registry+https://github.com/rust-lang/crates.io-index" 191 + checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 192 + dependencies = [ 193 + "addr2line", 194 + "cfg-if", 195 + "libc", 196 + "miniz_oxide", 197 + "object", 198 + "rustc-demangle", 199 + "windows-link 0.2.1", 200 + ] 201 + 202 + [[package]] 203 + name = "backtrace-ext" 204 + version = "0.2.1" 205 + source = "registry+https://github.com/rust-lang/crates.io-index" 206 + checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" 207 + dependencies = [ 208 + "backtrace", 209 + ] 210 + 211 + [[package]] 212 + name = "base-x" 213 + version = "0.2.11" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 216 + 217 + [[package]] 218 + name = "base16ct" 219 + version = "0.2.0" 220 + source = "registry+https://github.com/rust-lang/crates.io-index" 221 + checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 222 + 223 + [[package]] 224 + name = "base256emoji" 225 + version = "1.0.2" 226 + source = "registry+https://github.com/rust-lang/crates.io-index" 227 + checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" 228 + dependencies = [ 229 + "const-str", 230 + "match-lookup", 231 + ] 232 + 233 + [[package]] 234 + name = "base64" 235 + version = "0.13.1" 236 + source = "registry+https://github.com/rust-lang/crates.io-index" 237 + checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 238 + 239 + [[package]] 240 + name = "base64" 241 + version = "0.22.1" 242 + source = "registry+https://github.com/rust-lang/crates.io-index" 243 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 244 + 245 + [[package]] 246 + name = "base64ct" 247 + version = "1.8.0" 248 + source = "registry+https://github.com/rust-lang/crates.io-index" 249 + checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" 250 + 251 + [[package]] 252 + name = "bitflags" 253 + version = "2.10.0" 254 + source = "registry+https://github.com/rust-lang/crates.io-index" 255 + checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 256 + 257 + [[package]] 258 + name = "block-buffer" 259 + version = "0.10.4" 260 + source = "registry+https://github.com/rust-lang/crates.io-index" 261 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 262 + dependencies = [ 263 + "generic-array", 264 + ] 265 + 266 + [[package]] 267 + name = "bon" 268 + version = "3.8.1" 269 + source = "registry+https://github.com/rust-lang/crates.io-index" 270 + checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1" 271 + dependencies = [ 272 + "bon-macros", 273 + "rustversion", 274 + ] 275 + 276 + [[package]] 277 + name = "bon-macros" 278 + version = "3.8.1" 279 + source = "registry+https://github.com/rust-lang/crates.io-index" 280 + checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645" 281 + dependencies = [ 282 + "darling", 283 + "ident_case", 284 + "prettyplease", 285 + "proc-macro2", 286 + "quote", 287 + "rustversion", 288 + "syn 2.0.108", 289 + ] 290 + 291 + [[package]] 292 + name = "borsh" 293 + version = "1.5.7" 294 + source = "registry+https://github.com/rust-lang/crates.io-index" 295 + checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" 296 + dependencies = [ 297 + "cfg_aliases", 298 + ] 299 + 300 + [[package]] 301 + name = "brotli" 302 + version = "3.5.0" 303 + source = "registry+https://github.com/rust-lang/crates.io-index" 304 + checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" 305 + dependencies = [ 306 + "alloc-no-stdlib", 307 + "alloc-stdlib", 308 + "brotli-decompressor", 309 + ] 310 + 311 + [[package]] 312 + name = "brotli-decompressor" 313 + version = "2.5.1" 314 + source = "registry+https://github.com/rust-lang/crates.io-index" 315 + checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" 316 + dependencies = [ 317 + "alloc-no-stdlib", 318 + "alloc-stdlib", 319 + ] 320 + 321 + [[package]] 322 + name = "btree-range-map" 323 + version = "0.7.2" 324 + source = "registry+https://github.com/rust-lang/crates.io-index" 325 + checksum = "1be5c9672446d3800bcbcaabaeba121fe22f1fb25700c4562b22faf76d377c33" 326 + dependencies = [ 327 + "btree-slab", 328 + "cc-traits", 329 + "range-traits", 330 + "serde", 331 + "slab", 332 + ] 333 + 334 + [[package]] 335 + name = "btree-slab" 336 + version = "0.6.1" 337 + source = "registry+https://github.com/rust-lang/crates.io-index" 338 + checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c" 339 + dependencies = [ 340 + "cc-traits", 341 + "slab", 342 + "smallvec", 343 + ] 344 + 345 + [[package]] 346 + name = "buf_redux" 347 + version = "0.8.4" 348 + source = "registry+https://github.com/rust-lang/crates.io-index" 349 + checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" 350 + dependencies = [ 351 + "memchr", 352 + "safemem", 353 + ] 354 + 355 + [[package]] 356 + name = "bumpalo" 357 + version = "3.19.0" 358 + source = "registry+https://github.com/rust-lang/crates.io-index" 359 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 360 + 361 + [[package]] 362 + name = "bytes" 363 + version = "1.10.1" 364 + source = "registry+https://github.com/rust-lang/crates.io-index" 365 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 366 + dependencies = [ 367 + "serde", 368 + ] 369 + 370 + [[package]] 371 + name = "cbor4ii" 372 + version = "0.2.14" 373 + source = "registry+https://github.com/rust-lang/crates.io-index" 374 + checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4" 375 + dependencies = [ 376 + "serde", 377 + ] 378 + 379 + [[package]] 380 + name = "cc" 381 + version = "1.2.44" 382 + source = "registry+https://github.com/rust-lang/crates.io-index" 383 + checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" 384 + dependencies = [ 385 + "find-msvc-tools", 386 + "shlex", 387 + ] 388 + 389 + [[package]] 390 + name = "cc-traits" 391 + version = "2.0.0" 392 + source = "registry+https://github.com/rust-lang/crates.io-index" 393 + checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5" 394 + dependencies = [ 395 + "slab", 396 + ] 397 + 398 + [[package]] 399 + name = "cesu8" 400 + version = "1.1.0" 401 + source = "registry+https://github.com/rust-lang/crates.io-index" 402 + checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 403 + 404 + [[package]] 405 + name = "cfg-if" 406 + version = "1.0.4" 407 + source = "registry+https://github.com/rust-lang/crates.io-index" 408 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 409 + 410 + [[package]] 411 + name = "cfg_aliases" 412 + version = "0.2.1" 413 + source = "registry+https://github.com/rust-lang/crates.io-index" 414 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 415 + 416 + [[package]] 417 + name = "chrono" 418 + version = "0.4.42" 419 + source = "registry+https://github.com/rust-lang/crates.io-index" 420 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 421 + dependencies = [ 422 + "iana-time-zone", 423 + "js-sys", 424 + "num-traits", 425 + "serde", 426 + "wasm-bindgen", 427 + "windows-link 0.2.1", 428 + ] 429 + 430 + [[package]] 431 + name = "chunked_transfer" 432 + version = "1.5.0" 433 + source = "registry+https://github.com/rust-lang/crates.io-index" 434 + checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" 435 + 436 + [[package]] 437 + name = "ciborium" 438 + version = "0.2.2" 439 + source = "registry+https://github.com/rust-lang/crates.io-index" 440 + checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" 441 + dependencies = [ 442 + "ciborium-io", 443 + "ciborium-ll", 444 + "serde", 445 + ] 446 + 447 + [[package]] 448 + name = "ciborium-io" 449 + version = "0.2.2" 450 + source = "registry+https://github.com/rust-lang/crates.io-index" 451 + checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" 452 + 453 + [[package]] 454 + name = "ciborium-ll" 455 + version = "0.2.2" 456 + source = "registry+https://github.com/rust-lang/crates.io-index" 457 + checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" 458 + dependencies = [ 459 + "ciborium-io", 460 + "half", 461 + ] 462 + 463 + [[package]] 464 + name = "cid" 465 + version = "0.11.1" 466 + source = "registry+https://github.com/rust-lang/crates.io-index" 467 + checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" 468 + dependencies = [ 469 + "core2", 470 + "multibase", 471 + "multihash", 472 + "serde", 473 + "serde_bytes", 474 + "unsigned-varint", 475 + ] 476 + 477 + [[package]] 478 + name = "clap" 479 + version = "4.5.51" 480 + source = "registry+https://github.com/rust-lang/crates.io-index" 481 + checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" 482 + dependencies = [ 483 + "clap_builder", 484 + "clap_derive", 485 + ] 486 + 487 + [[package]] 488 + name = "clap_builder" 489 + version = "4.5.51" 490 + source = "registry+https://github.com/rust-lang/crates.io-index" 491 + checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" 492 + dependencies = [ 493 + "anstream", 494 + "anstyle", 495 + "clap_lex", 496 + "strsim", 497 + ] 498 + 499 + [[package]] 500 + name = "clap_derive" 501 + version = "4.5.49" 502 + source = "registry+https://github.com/rust-lang/crates.io-index" 503 + checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" 504 + dependencies = [ 505 + "heck 0.5.0", 506 + "proc-macro2", 507 + "quote", 508 + "syn 2.0.108", 509 + ] 510 + 511 + [[package]] 512 + name = "clap_lex" 513 + version = "0.7.6" 514 + source = "registry+https://github.com/rust-lang/crates.io-index" 515 + checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" 516 + 517 + [[package]] 518 + name = "colorchoice" 519 + version = "1.0.4" 520 + source = "registry+https://github.com/rust-lang/crates.io-index" 521 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 522 + 523 + [[package]] 524 + name = "combine" 525 + version = "4.6.7" 526 + source = "registry+https://github.com/rust-lang/crates.io-index" 527 + checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 528 + dependencies = [ 529 + "bytes", 530 + "memchr", 531 + ] 532 + 533 + [[package]] 534 + name = "compression-codecs" 535 + version = "0.4.31" 536 + source = "registry+https://github.com/rust-lang/crates.io-index" 537 + checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23" 538 + dependencies = [ 539 + "compression-core", 540 + "flate2", 541 + "memchr", 542 + ] 543 + 544 + [[package]] 545 + name = "compression-core" 546 + version = "0.4.29" 547 + source = "registry+https://github.com/rust-lang/crates.io-index" 548 + checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" 549 + 550 + [[package]] 551 + name = "concurrent-queue" 552 + version = "2.5.0" 553 + source = "registry+https://github.com/rust-lang/crates.io-index" 554 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 555 + dependencies = [ 556 + "crossbeam-utils", 557 + ] 558 + 559 + [[package]] 560 + name = "const-oid" 561 + version = "0.9.6" 562 + source = "registry+https://github.com/rust-lang/crates.io-index" 563 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 564 + 565 + [[package]] 566 + name = "const-str" 567 + version = "0.4.3" 568 + source = "registry+https://github.com/rust-lang/crates.io-index" 569 + checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 570 + 571 + [[package]] 572 + name = "core-foundation" 573 + version = "0.9.4" 574 + source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 576 + dependencies = [ 577 + "core-foundation-sys", 578 + "libc", 579 + ] 580 + 581 + [[package]] 582 + name = "core-foundation-sys" 583 + version = "0.8.7" 584 + source = "registry+https://github.com/rust-lang/crates.io-index" 585 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 586 + 587 + [[package]] 588 + name = "core2" 589 + version = "0.4.0" 590 + source = "registry+https://github.com/rust-lang/crates.io-index" 591 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 592 + dependencies = [ 593 + "memchr", 594 + ] 595 + 596 + [[package]] 597 + name = "cpufeatures" 598 + version = "0.2.17" 599 + source = "registry+https://github.com/rust-lang/crates.io-index" 600 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 601 + dependencies = [ 602 + "libc", 603 + ] 604 + 605 + [[package]] 606 + name = "crc32fast" 607 + version = "1.5.0" 608 + source = "registry+https://github.com/rust-lang/crates.io-index" 609 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 610 + dependencies = [ 611 + "cfg-if", 612 + ] 613 + 614 + [[package]] 615 + name = "crossbeam-channel" 616 + version = "0.5.15" 617 + source = "registry+https://github.com/rust-lang/crates.io-index" 618 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 619 + dependencies = [ 620 + "crossbeam-utils", 621 + ] 622 + 623 + [[package]] 624 + name = "crossbeam-epoch" 625 + version = "0.9.18" 626 + source = "registry+https://github.com/rust-lang/crates.io-index" 627 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 628 + dependencies = [ 629 + "crossbeam-utils", 630 + ] 631 + 632 + [[package]] 633 + name = "crossbeam-utils" 634 + version = "0.8.21" 635 + source = "registry+https://github.com/rust-lang/crates.io-index" 636 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 637 + 638 + [[package]] 639 + name = "crunchy" 640 + version = "0.2.4" 641 + source = "registry+https://github.com/rust-lang/crates.io-index" 642 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 643 + 644 + [[package]] 645 + name = "crypto-bigint" 646 + version = "0.5.5" 647 + source = "registry+https://github.com/rust-lang/crates.io-index" 648 + checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 649 + dependencies = [ 650 + "generic-array", 651 + "rand_core 0.6.4", 652 + "subtle", 653 + "zeroize", 654 + ] 655 + 656 + [[package]] 657 + name = "crypto-common" 658 + version = "0.1.6" 659 + source = "registry+https://github.com/rust-lang/crates.io-index" 660 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 661 + dependencies = [ 662 + "generic-array", 663 + "typenum", 664 + ] 665 + 666 + [[package]] 667 + name = "darling" 668 + version = "0.21.3" 669 + source = "registry+https://github.com/rust-lang/crates.io-index" 670 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 671 + dependencies = [ 672 + "darling_core", 673 + "darling_macro", 674 + ] 675 + 676 + [[package]] 677 + name = "darling_core" 678 + version = "0.21.3" 679 + source = "registry+https://github.com/rust-lang/crates.io-index" 680 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 681 + dependencies = [ 682 + "fnv", 683 + "ident_case", 684 + "proc-macro2", 685 + "quote", 686 + "strsim", 687 + "syn 2.0.108", 688 + ] 689 + 690 + [[package]] 691 + name = "darling_macro" 692 + version = "0.21.3" 693 + source = "registry+https://github.com/rust-lang/crates.io-index" 694 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 695 + dependencies = [ 696 + "darling_core", 697 + "quote", 698 + "syn 2.0.108", 699 + ] 700 + 701 + [[package]] 702 + name = "dashmap" 703 + version = "6.1.0" 704 + source = "registry+https://github.com/rust-lang/crates.io-index" 705 + checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 706 + dependencies = [ 707 + "cfg-if", 708 + "crossbeam-utils", 709 + "hashbrown 0.14.5", 710 + "lock_api", 711 + "once_cell", 712 + "parking_lot_core", 713 + ] 714 + 715 + [[package]] 716 + name = "data-encoding" 717 + version = "2.9.0" 718 + source = "registry+https://github.com/rust-lang/crates.io-index" 719 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 720 + 721 + [[package]] 722 + name = "data-encoding-macro" 723 + version = "0.1.18" 724 + source = "registry+https://github.com/rust-lang/crates.io-index" 725 + checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" 726 + dependencies = [ 727 + "data-encoding", 728 + "data-encoding-macro-internal", 729 + ] 730 + 731 + [[package]] 732 + name = "data-encoding-macro-internal" 733 + version = "0.1.16" 734 + source = "registry+https://github.com/rust-lang/crates.io-index" 735 + checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 736 + dependencies = [ 737 + "data-encoding", 738 + "syn 2.0.108", 739 + ] 740 + 741 + [[package]] 742 + name = "deflate" 743 + version = "1.0.0" 744 + source = "registry+https://github.com/rust-lang/crates.io-index" 745 + checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" 746 + dependencies = [ 747 + "adler32", 748 + "gzip-header", 749 + ] 750 + 751 + [[package]] 752 + name = "der" 753 + version = "0.7.10" 754 + source = "registry+https://github.com/rust-lang/crates.io-index" 755 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 756 + dependencies = [ 757 + "const-oid", 758 + "pem-rfc7468", 759 + "zeroize", 760 + ] 761 + 762 + [[package]] 763 + name = "deranged" 764 + version = "0.5.5" 765 + source = "registry+https://github.com/rust-lang/crates.io-index" 766 + checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 767 + dependencies = [ 768 + "powerfmt", 769 + "serde_core", 770 + ] 771 + 772 + [[package]] 773 + name = "digest" 774 + version = "0.10.7" 775 + source = "registry+https://github.com/rust-lang/crates.io-index" 776 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 777 + dependencies = [ 778 + "block-buffer", 779 + "const-oid", 780 + "crypto-common", 781 + "subtle", 782 + ] 783 + 784 + [[package]] 785 + name = "dirs" 786 + version = "6.0.0" 787 + source = "registry+https://github.com/rust-lang/crates.io-index" 788 + checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 789 + dependencies = [ 790 + "dirs-sys", 791 + ] 792 + 793 + [[package]] 794 + name = "dirs-sys" 795 + version = "0.5.0" 796 + source = "registry+https://github.com/rust-lang/crates.io-index" 797 + checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 798 + dependencies = [ 799 + "libc", 800 + "option-ext", 801 + "redox_users", 802 + "windows-sys 0.61.2", 803 + ] 804 + 805 + [[package]] 806 + name = "displaydoc" 807 + version = "0.2.5" 808 + source = "registry+https://github.com/rust-lang/crates.io-index" 809 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 810 + dependencies = [ 811 + "proc-macro2", 812 + "quote", 813 + "syn 2.0.108", 814 + ] 815 + 816 + [[package]] 817 + name = "dyn-clone" 818 + version = "1.0.20" 819 + source = "registry+https://github.com/rust-lang/crates.io-index" 820 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 821 + 822 + [[package]] 823 + name = "ecdsa" 824 + version = "0.16.9" 825 + source = "registry+https://github.com/rust-lang/crates.io-index" 826 + checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 827 + dependencies = [ 828 + "der", 829 + "digest", 830 + "elliptic-curve", 831 + "rfc6979", 832 + "signature", 833 + "spki", 834 + ] 835 + 836 + [[package]] 837 + name = "elliptic-curve" 838 + version = "0.13.8" 839 + source = "registry+https://github.com/rust-lang/crates.io-index" 840 + checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 841 + dependencies = [ 842 + "base16ct", 843 + "crypto-bigint", 844 + "digest", 845 + "ff", 846 + "generic-array", 847 + "group", 848 + "pem-rfc7468", 849 + "pkcs8", 850 + "rand_core 0.6.4", 851 + "sec1", 852 + "subtle", 853 + "zeroize", 854 + ] 855 + 856 + [[package]] 857 + name = "encoding_rs" 858 + version = "0.8.35" 859 + source = "registry+https://github.com/rust-lang/crates.io-index" 860 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 861 + dependencies = [ 862 + "cfg-if", 863 + ] 864 + 865 + [[package]] 866 + name = "enum-as-inner" 867 + version = "0.6.1" 868 + source = "registry+https://github.com/rust-lang/crates.io-index" 869 + checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 870 + dependencies = [ 871 + "heck 0.5.0", 872 + "proc-macro2", 873 + "quote", 874 + "syn 2.0.108", 875 + ] 876 + 877 + [[package]] 878 + name = "equivalent" 879 + version = "1.0.2" 880 + source = "registry+https://github.com/rust-lang/crates.io-index" 881 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 882 + 883 + [[package]] 884 + name = "errno" 885 + version = "0.3.14" 886 + source = "registry+https://github.com/rust-lang/crates.io-index" 887 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 888 + dependencies = [ 889 + "libc", 890 + "windows-sys 0.61.2", 891 + ] 892 + 893 + [[package]] 894 + name = "event-listener" 895 + version = "5.4.1" 896 + source = "registry+https://github.com/rust-lang/crates.io-index" 897 + checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 898 + dependencies = [ 899 + "concurrent-queue", 900 + "parking", 901 + "pin-project-lite", 902 + ] 903 + 904 + [[package]] 905 + name = "event-listener-strategy" 906 + version = "0.5.4" 907 + source = "registry+https://github.com/rust-lang/crates.io-index" 908 + checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 909 + dependencies = [ 910 + "event-listener", 911 + "pin-project-lite", 912 + ] 913 + 914 + [[package]] 915 + name = "fastrand" 916 + version = "2.3.0" 917 + source = "registry+https://github.com/rust-lang/crates.io-index" 918 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 919 + 920 + [[package]] 921 + name = "ff" 922 + version = "0.13.1" 923 + source = "registry+https://github.com/rust-lang/crates.io-index" 924 + checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" 925 + dependencies = [ 926 + "rand_core 0.6.4", 927 + "subtle", 928 + ] 929 + 930 + [[package]] 931 + name = "filetime" 932 + version = "0.2.26" 933 + source = "registry+https://github.com/rust-lang/crates.io-index" 934 + checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" 935 + dependencies = [ 936 + "cfg-if", 937 + "libc", 938 + "libredox", 939 + "windows-sys 0.60.2", 940 + ] 941 + 942 + [[package]] 943 + name = "find-msvc-tools" 944 + version = "0.1.4" 945 + source = "registry+https://github.com/rust-lang/crates.io-index" 946 + checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 947 + 948 + [[package]] 949 + name = "flate2" 950 + version = "1.1.5" 951 + source = "registry+https://github.com/rust-lang/crates.io-index" 952 + checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 953 + dependencies = [ 954 + "crc32fast", 955 + "miniz_oxide", 956 + ] 957 + 958 + [[package]] 959 + name = "fnv" 960 + version = "1.0.7" 961 + source = "registry+https://github.com/rust-lang/crates.io-index" 962 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 963 + 964 + [[package]] 965 + name = "foreign-types" 966 + version = "0.3.2" 967 + source = "registry+https://github.com/rust-lang/crates.io-index" 968 + checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 969 + dependencies = [ 970 + "foreign-types-shared", 971 + ] 972 + 973 + [[package]] 974 + name = "foreign-types-shared" 975 + version = "0.1.1" 976 + source = "registry+https://github.com/rust-lang/crates.io-index" 977 + checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 978 + 979 + [[package]] 980 + name = "form_urlencoded" 981 + version = "1.2.2" 982 + source = "registry+https://github.com/rust-lang/crates.io-index" 983 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 984 + dependencies = [ 985 + "percent-encoding", 986 + ] 987 + 988 + [[package]] 989 + name = "futf" 990 + version = "0.1.5" 991 + source = "registry+https://github.com/rust-lang/crates.io-index" 992 + checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 993 + dependencies = [ 994 + "mac", 995 + "new_debug_unreachable", 996 + ] 997 + 998 + [[package]] 999 + name = "futures-channel" 1000 + version = "0.3.31" 1001 + source = "registry+https://github.com/rust-lang/crates.io-index" 1002 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 1003 + dependencies = [ 1004 + "futures-core", 1005 + ] 1006 + 1007 + [[package]] 1008 + name = "futures-core" 1009 + version = "0.3.31" 1010 + source = "registry+https://github.com/rust-lang/crates.io-index" 1011 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1012 + 1013 + [[package]] 1014 + name = "futures-io" 1015 + version = "0.3.31" 1016 + source = "registry+https://github.com/rust-lang/crates.io-index" 1017 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1018 + 1019 + [[package]] 1020 + name = "futures-macro" 1021 + version = "0.3.31" 1022 + source = "registry+https://github.com/rust-lang/crates.io-index" 1023 + checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1024 + dependencies = [ 1025 + "proc-macro2", 1026 + "quote", 1027 + "syn 2.0.108", 1028 + ] 1029 + 1030 + [[package]] 1031 + name = "futures-sink" 1032 + version = "0.3.31" 1033 + source = "registry+https://github.com/rust-lang/crates.io-index" 1034 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 1035 + 1036 + [[package]] 1037 + name = "futures-task" 1038 + version = "0.3.31" 1039 + source = "registry+https://github.com/rust-lang/crates.io-index" 1040 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1041 + 1042 + [[package]] 1043 + name = "futures-util" 1044 + version = "0.3.31" 1045 + source = "registry+https://github.com/rust-lang/crates.io-index" 1046 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1047 + dependencies = [ 1048 + "futures-core", 1049 + "futures-io", 1050 + "futures-macro", 1051 + "futures-sink", 1052 + "futures-task", 1053 + "memchr", 1054 + "pin-project-lite", 1055 + "pin-utils", 1056 + "slab", 1057 + ] 1058 + 1059 + [[package]] 1060 + name = "generic-array" 1061 + version = "0.14.9" 1062 + source = "registry+https://github.com/rust-lang/crates.io-index" 1063 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1064 + dependencies = [ 1065 + "typenum", 1066 + "version_check", 1067 + "zeroize", 1068 + ] 1069 + 1070 + [[package]] 1071 + name = "getrandom" 1072 + version = "0.2.16" 1073 + source = "registry+https://github.com/rust-lang/crates.io-index" 1074 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1075 + dependencies = [ 1076 + "cfg-if", 1077 + "js-sys", 1078 + "libc", 1079 + "wasi", 1080 + "wasm-bindgen", 1081 + ] 1082 + 1083 + [[package]] 1084 + name = "getrandom" 1085 + version = "0.3.4" 1086 + source = "registry+https://github.com/rust-lang/crates.io-index" 1087 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1088 + dependencies = [ 1089 + "cfg-if", 1090 + "js-sys", 1091 + "libc", 1092 + "r-efi", 1093 + "wasip2", 1094 + "wasm-bindgen", 1095 + ] 1096 + 1097 + [[package]] 1098 + name = "gimli" 1099 + version = "0.32.3" 1100 + source = "registry+https://github.com/rust-lang/crates.io-index" 1101 + checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" 1102 + 1103 + [[package]] 1104 + name = "group" 1105 + version = "0.13.0" 1106 + source = "registry+https://github.com/rust-lang/crates.io-index" 1107 + checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 1108 + dependencies = [ 1109 + "ff", 1110 + "rand_core 0.6.4", 1111 + "subtle", 1112 + ] 1113 + 1114 + [[package]] 1115 + name = "gzip-header" 1116 + version = "1.0.0" 1117 + source = "registry+https://github.com/rust-lang/crates.io-index" 1118 + checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" 1119 + dependencies = [ 1120 + "crc32fast", 1121 + ] 1122 + 1123 + [[package]] 1124 + name = "h2" 1125 + version = "0.4.12" 1126 + source = "registry+https://github.com/rust-lang/crates.io-index" 1127 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 1128 + dependencies = [ 1129 + "atomic-waker", 1130 + "bytes", 1131 + "fnv", 1132 + "futures-core", 1133 + "futures-sink", 1134 + "http", 1135 + "indexmap 2.12.0", 1136 + "slab", 1137 + "tokio", 1138 + "tokio-util", 1139 + "tracing", 1140 + ] 1141 + 1142 + [[package]] 1143 + name = "half" 1144 + version = "2.7.1" 1145 + source = "registry+https://github.com/rust-lang/crates.io-index" 1146 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1147 + dependencies = [ 1148 + "cfg-if", 1149 + "crunchy", 1150 + "zerocopy", 1151 + ] 1152 + 1153 + [[package]] 1154 + name = "hashbrown" 1155 + version = "0.12.3" 1156 + source = "registry+https://github.com/rust-lang/crates.io-index" 1157 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1158 + 1159 + [[package]] 1160 + name = "hashbrown" 1161 + version = "0.14.5" 1162 + source = "registry+https://github.com/rust-lang/crates.io-index" 1163 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1164 + 1165 + [[package]] 1166 + name = "hashbrown" 1167 + version = "0.16.0" 1168 + source = "registry+https://github.com/rust-lang/crates.io-index" 1169 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1170 + 1171 + [[package]] 1172 + name = "heck" 1173 + version = "0.4.1" 1174 + source = "registry+https://github.com/rust-lang/crates.io-index" 1175 + checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1176 + 1177 + [[package]] 1178 + name = "heck" 1179 + version = "0.5.0" 1180 + source = "registry+https://github.com/rust-lang/crates.io-index" 1181 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1182 + 1183 + [[package]] 1184 + name = "hermit-abi" 1185 + version = "0.5.2" 1186 + source = "registry+https://github.com/rust-lang/crates.io-index" 1187 + checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1188 + 1189 + [[package]] 1190 + name = "hex" 1191 + version = "0.4.3" 1192 + source = "registry+https://github.com/rust-lang/crates.io-index" 1193 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1194 + 1195 + [[package]] 1196 + name = "hex_fmt" 1197 + version = "0.3.0" 1198 + source = "registry+https://github.com/rust-lang/crates.io-index" 1199 + checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" 1200 + 1201 + [[package]] 1202 + name = "hickory-proto" 1203 + version = "0.24.4" 1204 + source = "registry+https://github.com/rust-lang/crates.io-index" 1205 + checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" 1206 + dependencies = [ 1207 + "async-trait", 1208 + "cfg-if", 1209 + "data-encoding", 1210 + "enum-as-inner", 1211 + "futures-channel", 1212 + "futures-io", 1213 + "futures-util", 1214 + "idna", 1215 + "ipnet", 1216 + "once_cell", 1217 + "rand 0.8.5", 1218 + "thiserror 1.0.69", 1219 + "tinyvec", 1220 + "tokio", 1221 + "tracing", 1222 + "url", 1223 + ] 1224 + 1225 + [[package]] 1226 + name = "hickory-resolver" 1227 + version = "0.24.4" 1228 + source = "registry+https://github.com/rust-lang/crates.io-index" 1229 + checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" 1230 + dependencies = [ 1231 + "cfg-if", 1232 + "futures-util", 1233 + "hickory-proto", 1234 + "ipconfig", 1235 + "lru-cache", 1236 + "once_cell", 1237 + "parking_lot", 1238 + "rand 0.8.5", 1239 + "resolv-conf", 1240 + "smallvec", 1241 + "thiserror 1.0.69", 1242 + "tokio", 1243 + "tracing", 1244 + ] 1245 + 1246 + [[package]] 1247 + name = "hmac" 1248 + version = "0.12.1" 1249 + source = "registry+https://github.com/rust-lang/crates.io-index" 1250 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1251 + dependencies = [ 1252 + "digest", 1253 + ] 1254 + 1255 + [[package]] 1256 + name = "home" 1257 + version = "0.5.12" 1258 + source = "registry+https://github.com/rust-lang/crates.io-index" 1259 + checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" 1260 + dependencies = [ 1261 + "windows-sys 0.61.2", 1262 + ] 1263 + 1264 + [[package]] 1265 + name = "html5ever" 1266 + version = "0.27.0" 1267 + source = "registry+https://github.com/rust-lang/crates.io-index" 1268 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 1269 + dependencies = [ 1270 + "log", 1271 + "mac", 1272 + "markup5ever", 1273 + "proc-macro2", 1274 + "quote", 1275 + "syn 2.0.108", 1276 + ] 1277 + 1278 + [[package]] 1279 + name = "http" 1280 + version = "1.3.1" 1281 + source = "registry+https://github.com/rust-lang/crates.io-index" 1282 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1283 + dependencies = [ 1284 + "bytes", 1285 + "fnv", 1286 + "itoa", 1287 + ] 1288 + 1289 + [[package]] 1290 + name = "http-body" 1291 + version = "1.0.1" 1292 + source = "registry+https://github.com/rust-lang/crates.io-index" 1293 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1294 + dependencies = [ 1295 + "bytes", 1296 + "http", 1297 + ] 1298 + 1299 + [[package]] 1300 + name = "http-body-util" 1301 + version = "0.1.3" 1302 + source = "registry+https://github.com/rust-lang/crates.io-index" 1303 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1304 + dependencies = [ 1305 + "bytes", 1306 + "futures-core", 1307 + "http", 1308 + "http-body", 1309 + "pin-project-lite", 1310 + ] 1311 + 1312 + [[package]] 1313 + name = "httparse" 1314 + version = "1.10.1" 1315 + source = "registry+https://github.com/rust-lang/crates.io-index" 1316 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1317 + 1318 + [[package]] 1319 + name = "httpdate" 1320 + version = "1.0.3" 1321 + source = "registry+https://github.com/rust-lang/crates.io-index" 1322 + checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1323 + 1324 + [[package]] 1325 + name = "hyper" 1326 + version = "1.7.0" 1327 + source = "registry+https://github.com/rust-lang/crates.io-index" 1328 + checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1329 + dependencies = [ 1330 + "atomic-waker", 1331 + "bytes", 1332 + "futures-channel", 1333 + "futures-core", 1334 + "h2", 1335 + "http", 1336 + "http-body", 1337 + "httparse", 1338 + "itoa", 1339 + "pin-project-lite", 1340 + "pin-utils", 1341 + "smallvec", 1342 + "tokio", 1343 + "want", 1344 + ] 1345 + 1346 + [[package]] 1347 + name = "hyper-rustls" 1348 + version = "0.27.7" 1349 + source = "registry+https://github.com/rust-lang/crates.io-index" 1350 + checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 1351 + dependencies = [ 1352 + "http", 1353 + "hyper", 1354 + "hyper-util", 1355 + "rustls", 1356 + "rustls-pki-types", 1357 + "tokio", 1358 + "tokio-rustls", 1359 + "tower-service", 1360 + "webpki-roots", 1361 + ] 1362 + 1363 + [[package]] 1364 + name = "hyper-tls" 1365 + version = "0.6.0" 1366 + source = "registry+https://github.com/rust-lang/crates.io-index" 1367 + checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 1368 + dependencies = [ 1369 + "bytes", 1370 + "http-body-util", 1371 + "hyper", 1372 + "hyper-util", 1373 + "native-tls", 1374 + "tokio", 1375 + "tokio-native-tls", 1376 + "tower-service", 1377 + ] 1378 + 1379 + [[package]] 1380 + name = "hyper-util" 1381 + version = "0.1.17" 1382 + source = "registry+https://github.com/rust-lang/crates.io-index" 1383 + checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" 1384 + dependencies = [ 1385 + "base64 0.22.1", 1386 + "bytes", 1387 + "futures-channel", 1388 + "futures-core", 1389 + "futures-util", 1390 + "http", 1391 + "http-body", 1392 + "hyper", 1393 + "ipnet", 1394 + "libc", 1395 + "percent-encoding", 1396 + "pin-project-lite", 1397 + "socket2 0.6.1", 1398 + "system-configuration", 1399 + "tokio", 1400 + "tower-service", 1401 + "tracing", 1402 + "windows-registry", 1403 + ] 1404 + 1405 + [[package]] 1406 + name = "iana-time-zone" 1407 + version = "0.1.64" 1408 + source = "registry+https://github.com/rust-lang/crates.io-index" 1409 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 1410 + dependencies = [ 1411 + "android_system_properties", 1412 + "core-foundation-sys", 1413 + "iana-time-zone-haiku", 1414 + "js-sys", 1415 + "log", 1416 + "wasm-bindgen", 1417 + "windows-core", 1418 + ] 1419 + 1420 + [[package]] 1421 + name = "iana-time-zone-haiku" 1422 + version = "0.1.2" 1423 + source = "registry+https://github.com/rust-lang/crates.io-index" 1424 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1425 + dependencies = [ 1426 + "cc", 1427 + ] 1428 + 1429 + [[package]] 1430 + name = "icu_collections" 1431 + version = "2.1.1" 1432 + source = "registry+https://github.com/rust-lang/crates.io-index" 1433 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 1434 + dependencies = [ 1435 + "displaydoc", 1436 + "potential_utf", 1437 + "yoke", 1438 + "zerofrom", 1439 + "zerovec", 1440 + ] 1441 + 1442 + [[package]] 1443 + name = "icu_locale_core" 1444 + version = "2.1.1" 1445 + source = "registry+https://github.com/rust-lang/crates.io-index" 1446 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 1447 + dependencies = [ 1448 + "displaydoc", 1449 + "litemap", 1450 + "tinystr", 1451 + "writeable", 1452 + "zerovec", 1453 + ] 1454 + 1455 + [[package]] 1456 + name = "icu_normalizer" 1457 + version = "2.1.1" 1458 + source = "registry+https://github.com/rust-lang/crates.io-index" 1459 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 1460 + dependencies = [ 1461 + "icu_collections", 1462 + "icu_normalizer_data", 1463 + "icu_properties", 1464 + "icu_provider", 1465 + "smallvec", 1466 + "zerovec", 1467 + ] 1468 + 1469 + [[package]] 1470 + name = "icu_normalizer_data" 1471 + version = "2.1.1" 1472 + source = "registry+https://github.com/rust-lang/crates.io-index" 1473 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 1474 + 1475 + [[package]] 1476 + name = "icu_properties" 1477 + version = "2.1.1" 1478 + source = "registry+https://github.com/rust-lang/crates.io-index" 1479 + checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" 1480 + dependencies = [ 1481 + "icu_collections", 1482 + "icu_locale_core", 1483 + "icu_properties_data", 1484 + "icu_provider", 1485 + "zerotrie", 1486 + "zerovec", 1487 + ] 1488 + 1489 + [[package]] 1490 + name = "icu_properties_data" 1491 + version = "2.1.1" 1492 + source = "registry+https://github.com/rust-lang/crates.io-index" 1493 + checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" 1494 + 1495 + [[package]] 1496 + name = "icu_provider" 1497 + version = "2.1.1" 1498 + source = "registry+https://github.com/rust-lang/crates.io-index" 1499 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 1500 + dependencies = [ 1501 + "displaydoc", 1502 + "icu_locale_core", 1503 + "writeable", 1504 + "yoke", 1505 + "zerofrom", 1506 + "zerotrie", 1507 + "zerovec", 1508 + ] 1509 + 1510 + [[package]] 1511 + name = "ident_case" 1512 + version = "1.0.1" 1513 + source = "registry+https://github.com/rust-lang/crates.io-index" 1514 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1515 + 1516 + [[package]] 1517 + name = "idna" 1518 + version = "1.1.0" 1519 + source = "registry+https://github.com/rust-lang/crates.io-index" 1520 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 1521 + dependencies = [ 1522 + "idna_adapter", 1523 + "smallvec", 1524 + "utf8_iter", 1525 + ] 1526 + 1527 + [[package]] 1528 + name = "idna_adapter" 1529 + version = "1.2.1" 1530 + source = "registry+https://github.com/rust-lang/crates.io-index" 1531 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1532 + dependencies = [ 1533 + "icu_normalizer", 1534 + "icu_properties", 1535 + ] 1536 + 1537 + [[package]] 1538 + name = "indexmap" 1539 + version = "1.9.3" 1540 + source = "registry+https://github.com/rust-lang/crates.io-index" 1541 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1542 + dependencies = [ 1543 + "autocfg", 1544 + "hashbrown 0.12.3", 1545 + "serde", 1546 + ] 1547 + 1548 + [[package]] 1549 + name = "indexmap" 1550 + version = "2.12.0" 1551 + source = "registry+https://github.com/rust-lang/crates.io-index" 1552 + checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" 1553 + dependencies = [ 1554 + "equivalent", 1555 + "hashbrown 0.16.0", 1556 + "serde", 1557 + "serde_core", 1558 + ] 1559 + 1560 + [[package]] 1561 + name = "indoc" 1562 + version = "2.0.7" 1563 + source = "registry+https://github.com/rust-lang/crates.io-index" 1564 + checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" 1565 + dependencies = [ 1566 + "rustversion", 1567 + ] 1568 + 1569 + [[package]] 1570 + name = "inventory" 1571 + version = "0.3.21" 1572 + source = "registry+https://github.com/rust-lang/crates.io-index" 1573 + checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" 1574 + dependencies = [ 1575 + "rustversion", 1576 + ] 1577 + 1578 + [[package]] 1579 + name = "ipconfig" 1580 + version = "0.3.2" 1581 + source = "registry+https://github.com/rust-lang/crates.io-index" 1582 + checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1583 + dependencies = [ 1584 + "socket2 0.5.10", 1585 + "widestring", 1586 + "windows-sys 0.48.0", 1587 + "winreg", 1588 + ] 1589 + 1590 + [[package]] 1591 + name = "ipld-core" 1592 + version = "0.4.2" 1593 + source = "registry+https://github.com/rust-lang/crates.io-index" 1594 + checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db" 1595 + dependencies = [ 1596 + "cid", 1597 + "serde", 1598 + "serde_bytes", 1599 + ] 1600 + 1601 + [[package]] 1602 + name = "ipnet" 1603 + version = "2.11.0" 1604 + source = "registry+https://github.com/rust-lang/crates.io-index" 1605 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1606 + 1607 + [[package]] 1608 + name = "iri-string" 1609 + version = "0.7.8" 1610 + source = "registry+https://github.com/rust-lang/crates.io-index" 1611 + checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 1612 + dependencies = [ 1613 + "memchr", 1614 + "serde", 1615 + ] 1616 + 1617 + [[package]] 1618 + name = "is_ci" 1619 + version = "1.2.0" 1620 + source = "registry+https://github.com/rust-lang/crates.io-index" 1621 + checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" 1622 + 1623 + [[package]] 1624 + name = "is_terminal_polyfill" 1625 + version = "1.70.2" 1626 + source = "registry+https://github.com/rust-lang/crates.io-index" 1627 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 1628 + 1629 + [[package]] 1630 + name = "itoa" 1631 + version = "1.0.15" 1632 + source = "registry+https://github.com/rust-lang/crates.io-index" 1633 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1634 + 1635 + [[package]] 1636 + name = "jacquard" 1637 + version = "0.8.0" 1638 + dependencies = [ 1639 + "bytes", 1640 + "getrandom 0.2.16", 1641 + "http", 1642 + "jacquard-api", 1643 + "jacquard-common", 1644 + "jacquard-derive", 1645 + "jacquard-identity", 1646 + "jacquard-oauth", 1647 + "jose-jwk", 1648 + "miette", 1649 + "regex", 1650 + "reqwest", 1651 + "serde", 1652 + "serde_html_form", 1653 + "serde_json", 1654 + "smol_str", 1655 + "thiserror 2.0.17", 1656 + "tokio", 1657 + "trait-variant", 1658 + "url", 1659 + "webpage", 1660 + ] 1661 + 1662 + [[package]] 1663 + name = "jacquard-api" 1664 + version = "0.8.0" 1665 + dependencies = [ 1666 + "bon", 1667 + "bytes", 1668 + "jacquard-common", 1669 + "jacquard-derive", 1670 + "jacquard-lexicon", 1671 + "miette", 1672 + "rustversion", 1673 + "serde", 1674 + "serde_ipld_dagcbor", 1675 + "thiserror 2.0.17", 1676 + "unicode-segmentation", 1677 + ] 1678 + 1679 + [[package]] 1680 + name = "jacquard-common" 1681 + version = "0.8.0" 1682 + dependencies = [ 1683 + "base64 0.22.1", 1684 + "bon", 1685 + "bytes", 1686 + "chrono", 1687 + "cid", 1688 + "getrandom 0.2.16", 1689 + "getrandom 0.3.4", 1690 + "http", 1691 + "ipld-core", 1692 + "k256", 1693 + "langtag", 1694 + "miette", 1695 + "multibase", 1696 + "multihash", 1697 + "ouroboros", 1698 + "p256", 1699 + "rand 0.9.2", 1700 + "regex", 1701 + "reqwest", 1702 + "serde", 1703 + "serde_html_form", 1704 + "serde_ipld_dagcbor", 1705 + "serde_json", 1706 + "signature", 1707 + "smol_str", 1708 + "thiserror 2.0.17", 1709 + "tokio", 1710 + "tokio-util", 1711 + "trait-variant", 1712 + "url", 1713 + ] 1714 + 1715 + [[package]] 1716 + name = "jacquard-derive" 1717 + version = "0.8.0" 1718 + dependencies = [ 1719 + "heck 0.5.0", 1720 + "jacquard-lexicon", 1721 + "proc-macro2", 1722 + "quote", 1723 + "syn 2.0.108", 1724 + ] 1725 + 1726 + [[package]] 1727 + name = "jacquard-identity" 1728 + version = "0.8.0" 1729 + dependencies = [ 1730 + "bon", 1731 + "bytes", 1732 + "hickory-resolver", 1733 + "http", 1734 + "jacquard-api", 1735 + "jacquard-common", 1736 + "jacquard-lexicon", 1737 + "miette", 1738 + "moka", 1739 + "percent-encoding", 1740 + "reqwest", 1741 + "serde", 1742 + "serde_html_form", 1743 + "serde_json", 1744 + "thiserror 2.0.17", 1745 + "tokio", 1746 + "trait-variant", 1747 + "url", 1748 + "urlencoding", 1749 + ] 1750 + 1751 + [[package]] 1752 + name = "jacquard-lexicon" 1753 + version = "0.8.0" 1754 + dependencies = [ 1755 + "cid", 1756 + "dashmap", 1757 + "heck 0.5.0", 1758 + "inventory", 1759 + "jacquard-common", 1760 + "miette", 1761 + "multihash", 1762 + "prettyplease", 1763 + "proc-macro2", 1764 + "quote", 1765 + "serde", 1766 + "serde_ipld_dagcbor", 1767 + "serde_json", 1768 + "serde_repr", 1769 + "serde_with", 1770 + "sha2", 1771 + "syn 2.0.108", 1772 + "thiserror 2.0.17", 1773 + "unicode-segmentation", 1774 + ] 1775 + 1776 + [[package]] 1777 + name = "jacquard-oauth" 1778 + version = "0.8.0" 1779 + dependencies = [ 1780 + "base64 0.22.1", 1781 + "bytes", 1782 + "chrono", 1783 + "dashmap", 1784 + "elliptic-curve", 1785 + "http", 1786 + "jacquard-common", 1787 + "jacquard-identity", 1788 + "jose-jwa", 1789 + "jose-jwk", 1790 + "miette", 1791 + "p256", 1792 + "rand 0.8.5", 1793 + "rouille", 1794 + "serde", 1795 + "serde_html_form", 1796 + "serde_json", 1797 + "sha2", 1798 + "signature", 1799 + "smol_str", 1800 + "thiserror 2.0.17", 1801 + "tokio", 1802 + "trait-variant", 1803 + "url", 1804 + "webbrowser", 1805 + ] 1806 + 1807 + [[package]] 1808 + name = "jni" 1809 + version = "0.21.1" 1810 + source = "registry+https://github.com/rust-lang/crates.io-index" 1811 + checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1812 + dependencies = [ 1813 + "cesu8", 1814 + "cfg-if", 1815 + "combine", 1816 + "jni-sys", 1817 + "log", 1818 + "thiserror 1.0.69", 1819 + "walkdir", 1820 + "windows-sys 0.45.0", 1821 + ] 1822 + 1823 + [[package]] 1824 + name = "jni-sys" 1825 + version = "0.3.0" 1826 + source = "registry+https://github.com/rust-lang/crates.io-index" 1827 + checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1828 + 1829 + [[package]] 1830 + name = "jose-b64" 1831 + version = "0.1.2" 1832 + source = "registry+https://github.com/rust-lang/crates.io-index" 1833 + checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56" 1834 + dependencies = [ 1835 + "base64ct", 1836 + "serde", 1837 + "subtle", 1838 + "zeroize", 1839 + ] 1840 + 1841 + [[package]] 1842 + name = "jose-jwa" 1843 + version = "0.1.2" 1844 + source = "registry+https://github.com/rust-lang/crates.io-index" 1845 + checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7" 1846 + dependencies = [ 1847 + "serde", 1848 + ] 1849 + 1850 + [[package]] 1851 + name = "jose-jwk" 1852 + version = "0.1.2" 1853 + source = "registry+https://github.com/rust-lang/crates.io-index" 1854 + checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7" 1855 + dependencies = [ 1856 + "jose-b64", 1857 + "jose-jwa", 1858 + "p256", 1859 + "p384", 1860 + "rsa", 1861 + "serde", 1862 + "zeroize", 1863 + ] 1864 + 1865 + [[package]] 1866 + name = "js-sys" 1867 + version = "0.3.82" 1868 + source = "registry+https://github.com/rust-lang/crates.io-index" 1869 + checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" 1870 + dependencies = [ 1871 + "once_cell", 1872 + "wasm-bindgen", 1873 + ] 1874 + 1875 + [[package]] 1876 + name = "k256" 1877 + version = "0.13.4" 1878 + source = "registry+https://github.com/rust-lang/crates.io-index" 1879 + checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" 1880 + dependencies = [ 1881 + "cfg-if", 1882 + "ecdsa", 1883 + "elliptic-curve", 1884 + "sha2", 1885 + ] 1886 + 1887 + [[package]] 1888 + name = "langtag" 1889 + version = "0.4.0" 1890 + source = "registry+https://github.com/rust-lang/crates.io-index" 1891 + checksum = "9ecb4c689a30e48ebeaa14237f34037e300dd072e6ad21a9ec72e810ff3c6600" 1892 + dependencies = [ 1893 + "serde", 1894 + "static-regular-grammar", 1895 + "thiserror 1.0.69", 1896 + ] 1897 + 1898 + [[package]] 1899 + name = "lazy_static" 1900 + version = "1.5.0" 1901 + source = "registry+https://github.com/rust-lang/crates.io-index" 1902 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1903 + dependencies = [ 1904 + "spin", 1905 + ] 1906 + 1907 + [[package]] 1908 + name = "libc" 1909 + version = "0.2.177" 1910 + source = "registry+https://github.com/rust-lang/crates.io-index" 1911 + checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 1912 + 1913 + [[package]] 1914 + name = "libm" 1915 + version = "0.2.15" 1916 + source = "registry+https://github.com/rust-lang/crates.io-index" 1917 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1918 + 1919 + [[package]] 1920 + name = "libredox" 1921 + version = "0.1.10" 1922 + source = "registry+https://github.com/rust-lang/crates.io-index" 1923 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 1924 + dependencies = [ 1925 + "bitflags", 1926 + "libc", 1927 + "redox_syscall", 1928 + ] 1929 + 1930 + [[package]] 1931 + name = "linked-hash-map" 1932 + version = "0.5.6" 1933 + source = "registry+https://github.com/rust-lang/crates.io-index" 1934 + checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1935 + 1936 + [[package]] 1937 + name = "linux-raw-sys" 1938 + version = "0.11.0" 1939 + source = "registry+https://github.com/rust-lang/crates.io-index" 1940 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 1941 + 1942 + [[package]] 1943 + name = "litemap" 1944 + version = "0.8.1" 1945 + source = "registry+https://github.com/rust-lang/crates.io-index" 1946 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 1947 + 1948 + [[package]] 1949 + name = "lock_api" 1950 + version = "0.4.14" 1951 + source = "registry+https://github.com/rust-lang/crates.io-index" 1952 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1953 + dependencies = [ 1954 + "scopeguard", 1955 + ] 1956 + 1957 + [[package]] 1958 + name = "log" 1959 + version = "0.4.28" 1960 + source = "registry+https://github.com/rust-lang/crates.io-index" 1961 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 1962 + 1963 + [[package]] 1964 + name = "lru-cache" 1965 + version = "0.1.2" 1966 + source = "registry+https://github.com/rust-lang/crates.io-index" 1967 + checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" 1968 + dependencies = [ 1969 + "linked-hash-map", 1970 + ] 1971 + 1972 + [[package]] 1973 + name = "lru-slab" 1974 + version = "0.1.2" 1975 + source = "registry+https://github.com/rust-lang/crates.io-index" 1976 + checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 1977 + 1978 + [[package]] 1979 + name = "mac" 1980 + version = "0.1.1" 1981 + source = "registry+https://github.com/rust-lang/crates.io-index" 1982 + checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1983 + 1984 + [[package]] 1985 + name = "malloc_buf" 1986 + version = "0.0.6" 1987 + source = "registry+https://github.com/rust-lang/crates.io-index" 1988 + checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1989 + dependencies = [ 1990 + "libc", 1991 + ] 1992 + 1993 + [[package]] 1994 + name = "markup5ever" 1995 + version = "0.12.1" 1996 + source = "registry+https://github.com/rust-lang/crates.io-index" 1997 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 1998 + dependencies = [ 1999 + "log", 2000 + "phf", 2001 + "phf_codegen", 2002 + "string_cache", 2003 + "string_cache_codegen", 2004 + "tendril", 2005 + ] 2006 + 2007 + [[package]] 2008 + name = "markup5ever_rcdom" 2009 + version = "0.3.0" 2010 + source = "registry+https://github.com/rust-lang/crates.io-index" 2011 + checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" 2012 + dependencies = [ 2013 + "html5ever", 2014 + "markup5ever", 2015 + "tendril", 2016 + "xml5ever", 2017 + ] 2018 + 2019 + [[package]] 2020 + name = "match-lookup" 2021 + version = "0.1.1" 2022 + source = "registry+https://github.com/rust-lang/crates.io-index" 2023 + checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" 2024 + dependencies = [ 2025 + "proc-macro2", 2026 + "quote", 2027 + "syn 1.0.109", 2028 + ] 2029 + 2030 + [[package]] 2031 + name = "memchr" 2032 + version = "2.7.6" 2033 + source = "registry+https://github.com/rust-lang/crates.io-index" 2034 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2035 + 2036 + [[package]] 2037 + name = "miette" 2038 + version = "7.6.0" 2039 + source = "registry+https://github.com/rust-lang/crates.io-index" 2040 + checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 2041 + dependencies = [ 2042 + "backtrace", 2043 + "backtrace-ext", 2044 + "cfg-if", 2045 + "miette-derive", 2046 + "owo-colors", 2047 + "supports-color", 2048 + "supports-hyperlinks", 2049 + "supports-unicode", 2050 + "terminal_size", 2051 + "textwrap", 2052 + "unicode-width 0.1.14", 2053 + ] 2054 + 2055 + [[package]] 2056 + name = "miette-derive" 2057 + version = "7.6.0" 2058 + source = "registry+https://github.com/rust-lang/crates.io-index" 2059 + checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 2060 + dependencies = [ 2061 + "proc-macro2", 2062 + "quote", 2063 + "syn 2.0.108", 2064 + ] 2065 + 2066 + [[package]] 2067 + name = "mime" 2068 + version = "0.3.17" 2069 + source = "registry+https://github.com/rust-lang/crates.io-index" 2070 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2071 + 2072 + [[package]] 2073 + name = "mime_guess" 2074 + version = "2.0.5" 2075 + source = "registry+https://github.com/rust-lang/crates.io-index" 2076 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2077 + dependencies = [ 2078 + "mime", 2079 + "unicase", 2080 + ] 2081 + 2082 + [[package]] 2083 + name = "minimal-lexical" 2084 + version = "0.2.1" 2085 + source = "registry+https://github.com/rust-lang/crates.io-index" 2086 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2087 + 2088 + [[package]] 2089 + name = "miniz_oxide" 2090 + version = "0.8.9" 2091 + source = "registry+https://github.com/rust-lang/crates.io-index" 2092 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 2093 + dependencies = [ 2094 + "adler2", 2095 + "simd-adler32", 2096 + ] 2097 + 2098 + [[package]] 2099 + name = "mio" 2100 + version = "1.1.0" 2101 + source = "registry+https://github.com/rust-lang/crates.io-index" 2102 + checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" 2103 + dependencies = [ 2104 + "libc", 2105 + "wasi", 2106 + "windows-sys 0.61.2", 2107 + ] 2108 + 2109 + [[package]] 2110 + name = "moka" 2111 + version = "0.12.11" 2112 + source = "registry+https://github.com/rust-lang/crates.io-index" 2113 + checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" 2114 + dependencies = [ 2115 + "async-lock", 2116 + "crossbeam-channel", 2117 + "crossbeam-epoch", 2118 + "crossbeam-utils", 2119 + "equivalent", 2120 + "event-listener", 2121 + "futures-util", 2122 + "parking_lot", 2123 + "portable-atomic", 2124 + "rustc_version", 2125 + "smallvec", 2126 + "tagptr", 2127 + "uuid", 2128 + ] 2129 + 2130 + [[package]] 2131 + name = "multibase" 2132 + version = "0.9.2" 2133 + source = "registry+https://github.com/rust-lang/crates.io-index" 2134 + checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" 2135 + dependencies = [ 2136 + "base-x", 2137 + "base256emoji", 2138 + "data-encoding", 2139 + "data-encoding-macro", 2140 + ] 2141 + 2142 + [[package]] 2143 + name = "multihash" 2144 + version = "0.19.3" 2145 + source = "registry+https://github.com/rust-lang/crates.io-index" 2146 + checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 2147 + dependencies = [ 2148 + "core2", 2149 + "serde", 2150 + "unsigned-varint", 2151 + ] 2152 + 2153 + [[package]] 2154 + name = "multipart" 2155 + version = "0.18.0" 2156 + source = "registry+https://github.com/rust-lang/crates.io-index" 2157 + checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" 2158 + dependencies = [ 2159 + "buf_redux", 2160 + "httparse", 2161 + "log", 2162 + "mime", 2163 + "mime_guess", 2164 + "quick-error", 2165 + "rand 0.8.5", 2166 + "safemem", 2167 + "tempfile", 2168 + "twoway", 2169 + ] 2170 + 2171 + [[package]] 2172 + name = "native-tls" 2173 + version = "0.2.14" 2174 + source = "registry+https://github.com/rust-lang/crates.io-index" 2175 + checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 2176 + dependencies = [ 2177 + "libc", 2178 + "log", 2179 + "openssl", 2180 + "openssl-probe", 2181 + "openssl-sys", 2182 + "schannel", 2183 + "security-framework", 2184 + "security-framework-sys", 2185 + "tempfile", 2186 + ] 2187 + 2188 + [[package]] 2189 + name = "ndk-context" 2190 + version = "0.1.1" 2191 + source = "registry+https://github.com/rust-lang/crates.io-index" 2192 + checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 2193 + 2194 + [[package]] 2195 + name = "new_debug_unreachable" 2196 + version = "1.0.6" 2197 + source = "registry+https://github.com/rust-lang/crates.io-index" 2198 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2199 + 2200 + [[package]] 2201 + name = "nom" 2202 + version = "7.1.3" 2203 + source = "registry+https://github.com/rust-lang/crates.io-index" 2204 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2205 + dependencies = [ 2206 + "memchr", 2207 + "minimal-lexical", 2208 + ] 2209 + 2210 + [[package]] 2211 + name = "num-bigint-dig" 2212 + version = "0.8.5" 2213 + source = "registry+https://github.com/rust-lang/crates.io-index" 2214 + checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b" 2215 + dependencies = [ 2216 + "lazy_static", 2217 + "libm", 2218 + "num-integer", 2219 + "num-iter", 2220 + "num-traits", 2221 + "rand 0.8.5", 2222 + "smallvec", 2223 + "zeroize", 2224 + ] 2225 + 2226 + [[package]] 2227 + name = "num-conv" 2228 + version = "0.1.0" 2229 + source = "registry+https://github.com/rust-lang/crates.io-index" 2230 + checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 2231 + 2232 + [[package]] 2233 + name = "num-integer" 2234 + version = "0.1.46" 2235 + source = "registry+https://github.com/rust-lang/crates.io-index" 2236 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2237 + dependencies = [ 2238 + "num-traits", 2239 + ] 2240 + 2241 + [[package]] 2242 + name = "num-iter" 2243 + version = "0.1.45" 2244 + source = "registry+https://github.com/rust-lang/crates.io-index" 2245 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 2246 + dependencies = [ 2247 + "autocfg", 2248 + "num-integer", 2249 + "num-traits", 2250 + ] 2251 + 2252 + [[package]] 2253 + name = "num-traits" 2254 + version = "0.2.19" 2255 + source = "registry+https://github.com/rust-lang/crates.io-index" 2256 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2257 + dependencies = [ 2258 + "autocfg", 2259 + "libm", 2260 + ] 2261 + 2262 + [[package]] 2263 + name = "num_cpus" 2264 + version = "1.17.0" 2265 + source = "registry+https://github.com/rust-lang/crates.io-index" 2266 + checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 2267 + dependencies = [ 2268 + "hermit-abi", 2269 + "libc", 2270 + ] 2271 + 2272 + [[package]] 2273 + name = "num_threads" 2274 + version = "0.1.7" 2275 + source = "registry+https://github.com/rust-lang/crates.io-index" 2276 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2277 + dependencies = [ 2278 + "libc", 2279 + ] 2280 + 2281 + [[package]] 2282 + name = "objc" 2283 + version = "0.2.7" 2284 + source = "registry+https://github.com/rust-lang/crates.io-index" 2285 + checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 2286 + dependencies = [ 2287 + "malloc_buf", 2288 + ] 2289 + 2290 + [[package]] 2291 + name = "object" 2292 + version = "0.37.3" 2293 + source = "registry+https://github.com/rust-lang/crates.io-index" 2294 + checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 2295 + dependencies = [ 2296 + "memchr", 2297 + ] 2298 + 2299 + [[package]] 2300 + name = "once_cell" 2301 + version = "1.21.3" 2302 + source = "registry+https://github.com/rust-lang/crates.io-index" 2303 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2304 + 2305 + [[package]] 2306 + name = "once_cell_polyfill" 2307 + version = "1.70.2" 2308 + source = "registry+https://github.com/rust-lang/crates.io-index" 2309 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 2310 + 2311 + [[package]] 2312 + name = "openssl" 2313 + version = "0.10.74" 2314 + source = "registry+https://github.com/rust-lang/crates.io-index" 2315 + checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" 2316 + dependencies = [ 2317 + "bitflags", 2318 + "cfg-if", 2319 + "foreign-types", 2320 + "libc", 2321 + "once_cell", 2322 + "openssl-macros", 2323 + "openssl-sys", 2324 + ] 2325 + 2326 + [[package]] 2327 + name = "openssl-macros" 2328 + version = "0.1.1" 2329 + source = "registry+https://github.com/rust-lang/crates.io-index" 2330 + checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 2331 + dependencies = [ 2332 + "proc-macro2", 2333 + "quote", 2334 + "syn 2.0.108", 2335 + ] 2336 + 2337 + [[package]] 2338 + name = "openssl-probe" 2339 + version = "0.1.6" 2340 + source = "registry+https://github.com/rust-lang/crates.io-index" 2341 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 2342 + 2343 + [[package]] 2344 + name = "openssl-sys" 2345 + version = "0.9.110" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" 2348 + dependencies = [ 2349 + "cc", 2350 + "libc", 2351 + "pkg-config", 2352 + "vcpkg", 2353 + ] 2354 + 2355 + [[package]] 2356 + name = "option-ext" 2357 + version = "0.2.0" 2358 + source = "registry+https://github.com/rust-lang/crates.io-index" 2359 + checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 2360 + 2361 + [[package]] 2362 + name = "ouroboros" 2363 + version = "0.18.5" 2364 + source = "registry+https://github.com/rust-lang/crates.io-index" 2365 + checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" 2366 + dependencies = [ 2367 + "aliasable", 2368 + "ouroboros_macro", 2369 + "static_assertions", 2370 + ] 2371 + 2372 + [[package]] 2373 + name = "ouroboros_macro" 2374 + version = "0.18.5" 2375 + source = "registry+https://github.com/rust-lang/crates.io-index" 2376 + checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" 2377 + dependencies = [ 2378 + "heck 0.4.1", 2379 + "proc-macro2", 2380 + "proc-macro2-diagnostics", 2381 + "quote", 2382 + "syn 2.0.108", 2383 + ] 2384 + 2385 + [[package]] 2386 + name = "owo-colors" 2387 + version = "4.2.3" 2388 + source = "registry+https://github.com/rust-lang/crates.io-index" 2389 + checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" 2390 + 2391 + [[package]] 2392 + name = "p256" 2393 + version = "0.13.2" 2394 + source = "registry+https://github.com/rust-lang/crates.io-index" 2395 + checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" 2396 + dependencies = [ 2397 + "ecdsa", 2398 + "elliptic-curve", 2399 + "primeorder", 2400 + "sha2", 2401 + ] 2402 + 2403 + [[package]] 2404 + name = "p384" 2405 + version = "0.13.1" 2406 + source = "registry+https://github.com/rust-lang/crates.io-index" 2407 + checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" 2408 + dependencies = [ 2409 + "elliptic-curve", 2410 + "primeorder", 2411 + ] 2412 + 2413 + [[package]] 2414 + name = "parking" 2415 + version = "2.2.1" 2416 + source = "registry+https://github.com/rust-lang/crates.io-index" 2417 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2418 + 2419 + [[package]] 2420 + name = "parking_lot" 2421 + version = "0.12.5" 2422 + source = "registry+https://github.com/rust-lang/crates.io-index" 2423 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2424 + dependencies = [ 2425 + "lock_api", 2426 + "parking_lot_core", 2427 + ] 2428 + 2429 + [[package]] 2430 + name = "parking_lot_core" 2431 + version = "0.9.12" 2432 + source = "registry+https://github.com/rust-lang/crates.io-index" 2433 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2434 + dependencies = [ 2435 + "cfg-if", 2436 + "libc", 2437 + "redox_syscall", 2438 + "smallvec", 2439 + "windows-link 0.2.1", 2440 + ] 2441 + 2442 + [[package]] 2443 + name = "pem-rfc7468" 2444 + version = "0.7.0" 2445 + source = "registry+https://github.com/rust-lang/crates.io-index" 2446 + checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 2447 + dependencies = [ 2448 + "base64ct", 2449 + ] 2450 + 2451 + [[package]] 2452 + name = "percent-encoding" 2453 + version = "2.3.2" 2454 + source = "registry+https://github.com/rust-lang/crates.io-index" 2455 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2456 + 2457 + [[package]] 2458 + name = "phf" 2459 + version = "0.11.3" 2460 + source = "registry+https://github.com/rust-lang/crates.io-index" 2461 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2462 + dependencies = [ 2463 + "phf_shared", 2464 + ] 2465 + 2466 + [[package]] 2467 + name = "phf_codegen" 2468 + version = "0.11.3" 2469 + source = "registry+https://github.com/rust-lang/crates.io-index" 2470 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 2471 + dependencies = [ 2472 + "phf_generator", 2473 + "phf_shared", 2474 + ] 2475 + 2476 + [[package]] 2477 + name = "phf_generator" 2478 + version = "0.11.3" 2479 + source = "registry+https://github.com/rust-lang/crates.io-index" 2480 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2481 + dependencies = [ 2482 + "phf_shared", 2483 + "rand 0.8.5", 2484 + ] 2485 + 2486 + [[package]] 2487 + name = "phf_shared" 2488 + version = "0.11.3" 2489 + source = "registry+https://github.com/rust-lang/crates.io-index" 2490 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2491 + dependencies = [ 2492 + "siphasher", 2493 + ] 2494 + 2495 + [[package]] 2496 + name = "pin-project-lite" 2497 + version = "0.2.16" 2498 + source = "registry+https://github.com/rust-lang/crates.io-index" 2499 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2500 + 2501 + [[package]] 2502 + name = "pin-utils" 2503 + version = "0.1.0" 2504 + source = "registry+https://github.com/rust-lang/crates.io-index" 2505 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2506 + 2507 + [[package]] 2508 + name = "pkcs1" 2509 + version = "0.7.5" 2510 + source = "registry+https://github.com/rust-lang/crates.io-index" 2511 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 2512 + dependencies = [ 2513 + "der", 2514 + "pkcs8", 2515 + "spki", 2516 + ] 2517 + 2518 + [[package]] 2519 + name = "pkcs8" 2520 + version = "0.10.2" 2521 + source = "registry+https://github.com/rust-lang/crates.io-index" 2522 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2523 + dependencies = [ 2524 + "der", 2525 + "spki", 2526 + ] 2527 + 2528 + [[package]] 2529 + name = "pkg-config" 2530 + version = "0.3.32" 2531 + source = "registry+https://github.com/rust-lang/crates.io-index" 2532 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2533 + 2534 + [[package]] 2535 + name = "portable-atomic" 2536 + version = "1.11.1" 2537 + source = "registry+https://github.com/rust-lang/crates.io-index" 2538 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2539 + 2540 + [[package]] 2541 + name = "potential_utf" 2542 + version = "0.1.4" 2543 + source = "registry+https://github.com/rust-lang/crates.io-index" 2544 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 2545 + dependencies = [ 2546 + "zerovec", 2547 + ] 2548 + 2549 + [[package]] 2550 + name = "powerfmt" 2551 + version = "0.2.0" 2552 + source = "registry+https://github.com/rust-lang/crates.io-index" 2553 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2554 + 2555 + [[package]] 2556 + name = "ppv-lite86" 2557 + version = "0.2.21" 2558 + source = "registry+https://github.com/rust-lang/crates.io-index" 2559 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2560 + dependencies = [ 2561 + "zerocopy", 2562 + ] 2563 + 2564 + [[package]] 2565 + name = "precomputed-hash" 2566 + version = "0.1.1" 2567 + source = "registry+https://github.com/rust-lang/crates.io-index" 2568 + checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 2569 + 2570 + [[package]] 2571 + name = "prettyplease" 2572 + version = "0.2.37" 2573 + source = "registry+https://github.com/rust-lang/crates.io-index" 2574 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2575 + dependencies = [ 2576 + "proc-macro2", 2577 + "syn 2.0.108", 2578 + ] 2579 + 2580 + [[package]] 2581 + name = "primeorder" 2582 + version = "0.13.6" 2583 + source = "registry+https://github.com/rust-lang/crates.io-index" 2584 + checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" 2585 + dependencies = [ 2586 + "elliptic-curve", 2587 + ] 2588 + 2589 + [[package]] 2590 + name = "proc-macro-error" 2591 + version = "1.0.4" 2592 + source = "registry+https://github.com/rust-lang/crates.io-index" 2593 + checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2594 + dependencies = [ 2595 + "proc-macro-error-attr", 2596 + "proc-macro2", 2597 + "quote", 2598 + "syn 1.0.109", 2599 + "version_check", 2600 + ] 2601 + 2602 + [[package]] 2603 + name = "proc-macro-error-attr" 2604 + version = "1.0.4" 2605 + source = "registry+https://github.com/rust-lang/crates.io-index" 2606 + checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2607 + dependencies = [ 2608 + "proc-macro2", 2609 + "quote", 2610 + "version_check", 2611 + ] 2612 + 2613 + [[package]] 2614 + name = "proc-macro2" 2615 + version = "1.0.103" 2616 + source = "registry+https://github.com/rust-lang/crates.io-index" 2617 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 2618 + dependencies = [ 2619 + "unicode-ident", 2620 + ] 2621 + 2622 + [[package]] 2623 + name = "proc-macro2-diagnostics" 2624 + version = "0.10.1" 2625 + source = "registry+https://github.com/rust-lang/crates.io-index" 2626 + checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 2627 + dependencies = [ 2628 + "proc-macro2", 2629 + "quote", 2630 + "syn 2.0.108", 2631 + "version_check", 2632 + "yansi", 2633 + ] 2634 + 2635 + [[package]] 2636 + name = "quick-error" 2637 + version = "1.2.3" 2638 + source = "registry+https://github.com/rust-lang/crates.io-index" 2639 + checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2640 + 2641 + [[package]] 2642 + name = "quinn" 2643 + version = "0.11.9" 2644 + source = "registry+https://github.com/rust-lang/crates.io-index" 2645 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 2646 + dependencies = [ 2647 + "bytes", 2648 + "cfg_aliases", 2649 + "pin-project-lite", 2650 + "quinn-proto", 2651 + "quinn-udp", 2652 + "rustc-hash", 2653 + "rustls", 2654 + "socket2 0.6.1", 2655 + "thiserror 2.0.17", 2656 + "tokio", 2657 + "tracing", 2658 + "web-time", 2659 + ] 2660 + 2661 + [[package]] 2662 + name = "quinn-proto" 2663 + version = "0.11.13" 2664 + source = "registry+https://github.com/rust-lang/crates.io-index" 2665 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 2666 + dependencies = [ 2667 + "bytes", 2668 + "getrandom 0.3.4", 2669 + "lru-slab", 2670 + "rand 0.9.2", 2671 + "ring", 2672 + "rustc-hash", 2673 + "rustls", 2674 + "rustls-pki-types", 2675 + "slab", 2676 + "thiserror 2.0.17", 2677 + "tinyvec", 2678 + "tracing", 2679 + "web-time", 2680 + ] 2681 + 2682 + [[package]] 2683 + name = "quinn-udp" 2684 + version = "0.5.14" 2685 + source = "registry+https://github.com/rust-lang/crates.io-index" 2686 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 2687 + dependencies = [ 2688 + "cfg_aliases", 2689 + "libc", 2690 + "once_cell", 2691 + "socket2 0.6.1", 2692 + "tracing", 2693 + "windows-sys 0.60.2", 2694 + ] 2695 + 2696 + [[package]] 2697 + name = "quote" 2698 + version = "1.0.41" 2699 + source = "registry+https://github.com/rust-lang/crates.io-index" 2700 + checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" 2701 + dependencies = [ 2702 + "proc-macro2", 2703 + ] 2704 + 2705 + [[package]] 2706 + name = "r-efi" 2707 + version = "5.3.0" 2708 + source = "registry+https://github.com/rust-lang/crates.io-index" 2709 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2710 + 2711 + [[package]] 2712 + name = "rand" 2713 + version = "0.8.5" 2714 + source = "registry+https://github.com/rust-lang/crates.io-index" 2715 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2716 + dependencies = [ 2717 + "libc", 2718 + "rand_chacha 0.3.1", 2719 + "rand_core 0.6.4", 2720 + ] 2721 + 2722 + [[package]] 2723 + name = "rand" 2724 + version = "0.9.2" 2725 + source = "registry+https://github.com/rust-lang/crates.io-index" 2726 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 2727 + dependencies = [ 2728 + "rand_chacha 0.9.0", 2729 + "rand_core 0.9.3", 2730 + ] 2731 + 2732 + [[package]] 2733 + name = "rand_chacha" 2734 + version = "0.3.1" 2735 + source = "registry+https://github.com/rust-lang/crates.io-index" 2736 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2737 + dependencies = [ 2738 + "ppv-lite86", 2739 + "rand_core 0.6.4", 2740 + ] 2741 + 2742 + [[package]] 2743 + name = "rand_chacha" 2744 + version = "0.9.0" 2745 + source = "registry+https://github.com/rust-lang/crates.io-index" 2746 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2747 + dependencies = [ 2748 + "ppv-lite86", 2749 + "rand_core 0.9.3", 2750 + ] 2751 + 2752 + [[package]] 2753 + name = "rand_core" 2754 + version = "0.6.4" 2755 + source = "registry+https://github.com/rust-lang/crates.io-index" 2756 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2757 + dependencies = [ 2758 + "getrandom 0.2.16", 2759 + ] 2760 + 2761 + [[package]] 2762 + name = "rand_core" 2763 + version = "0.9.3" 2764 + source = "registry+https://github.com/rust-lang/crates.io-index" 2765 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 2766 + dependencies = [ 2767 + "getrandom 0.3.4", 2768 + ] 2769 + 2770 + [[package]] 2771 + name = "range-traits" 2772 + version = "0.3.2" 2773 + source = "registry+https://github.com/rust-lang/crates.io-index" 2774 + checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab" 2775 + 2776 + [[package]] 2777 + name = "raw-window-handle" 2778 + version = "0.5.2" 2779 + source = "registry+https://github.com/rust-lang/crates.io-index" 2780 + checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" 2781 + 2782 + [[package]] 2783 + name = "redox_syscall" 2784 + version = "0.5.18" 2785 + source = "registry+https://github.com/rust-lang/crates.io-index" 2786 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 2787 + dependencies = [ 2788 + "bitflags", 2789 + ] 2790 + 2791 + [[package]] 2792 + name = "redox_users" 2793 + version = "0.5.2" 2794 + source = "registry+https://github.com/rust-lang/crates.io-index" 2795 + checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 2796 + dependencies = [ 2797 + "getrandom 0.2.16", 2798 + "libredox", 2799 + "thiserror 2.0.17", 2800 + ] 2801 + 2802 + [[package]] 2803 + name = "ref-cast" 2804 + version = "1.0.25" 2805 + source = "registry+https://github.com/rust-lang/crates.io-index" 2806 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 2807 + dependencies = [ 2808 + "ref-cast-impl", 2809 + ] 2810 + 2811 + [[package]] 2812 + name = "ref-cast-impl" 2813 + version = "1.0.25" 2814 + source = "registry+https://github.com/rust-lang/crates.io-index" 2815 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 2816 + dependencies = [ 2817 + "proc-macro2", 2818 + "quote", 2819 + "syn 2.0.108", 2820 + ] 2821 + 2822 + [[package]] 2823 + name = "regex" 2824 + version = "1.12.2" 2825 + source = "registry+https://github.com/rust-lang/crates.io-index" 2826 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 2827 + dependencies = [ 2828 + "aho-corasick", 2829 + "memchr", 2830 + "regex-automata", 2831 + "regex-syntax", 2832 + ] 2833 + 2834 + [[package]] 2835 + name = "regex-automata" 2836 + version = "0.4.13" 2837 + source = "registry+https://github.com/rust-lang/crates.io-index" 2838 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 2839 + dependencies = [ 2840 + "aho-corasick", 2841 + "memchr", 2842 + "regex-syntax", 2843 + ] 2844 + 2845 + [[package]] 2846 + name = "regex-syntax" 2847 + version = "0.8.8" 2848 + source = "registry+https://github.com/rust-lang/crates.io-index" 2849 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 2850 + 2851 + [[package]] 2852 + name = "reqwest" 2853 + version = "0.12.24" 2854 + source = "registry+https://github.com/rust-lang/crates.io-index" 2855 + checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" 2856 + dependencies = [ 2857 + "async-compression", 2858 + "base64 0.22.1", 2859 + "bytes", 2860 + "encoding_rs", 2861 + "futures-core", 2862 + "futures-util", 2863 + "h2", 2864 + "http", 2865 + "http-body", 2866 + "http-body-util", 2867 + "hyper", 2868 + "hyper-rustls", 2869 + "hyper-tls", 2870 + "hyper-util", 2871 + "js-sys", 2872 + "log", 2873 + "mime", 2874 + "native-tls", 2875 + "percent-encoding", 2876 + "pin-project-lite", 2877 + "quinn", 2878 + "rustls", 2879 + "rustls-pki-types", 2880 + "serde", 2881 + "serde_json", 2882 + "serde_urlencoded", 2883 + "sync_wrapper", 2884 + "tokio", 2885 + "tokio-native-tls", 2886 + "tokio-rustls", 2887 + "tokio-util", 2888 + "tower", 2889 + "tower-http", 2890 + "tower-service", 2891 + "url", 2892 + "wasm-bindgen", 2893 + "wasm-bindgen-futures", 2894 + "wasm-streams", 2895 + "web-sys", 2896 + "webpki-roots", 2897 + ] 2898 + 2899 + [[package]] 2900 + name = "resolv-conf" 2901 + version = "0.7.5" 2902 + source = "registry+https://github.com/rust-lang/crates.io-index" 2903 + checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" 2904 + 2905 + [[package]] 2906 + name = "rfc6979" 2907 + version = "0.4.0" 2908 + source = "registry+https://github.com/rust-lang/crates.io-index" 2909 + checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 2910 + dependencies = [ 2911 + "hmac", 2912 + "subtle", 2913 + ] 2914 + 2915 + [[package]] 2916 + name = "ring" 2917 + version = "0.17.14" 2918 + source = "registry+https://github.com/rust-lang/crates.io-index" 2919 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2920 + dependencies = [ 2921 + "cc", 2922 + "cfg-if", 2923 + "getrandom 0.2.16", 2924 + "libc", 2925 + "untrusted", 2926 + "windows-sys 0.52.0", 2927 + ] 2928 + 2929 + [[package]] 2930 + name = "rouille" 2931 + version = "3.6.2" 2932 + source = "registry+https://github.com/rust-lang/crates.io-index" 2933 + checksum = "3716fbf57fc1084d7a706adf4e445298d123e4a44294c4e8213caf1b85fcc921" 2934 + dependencies = [ 2935 + "base64 0.13.1", 2936 + "brotli", 2937 + "chrono", 2938 + "deflate", 2939 + "filetime", 2940 + "multipart", 2941 + "percent-encoding", 2942 + "rand 0.8.5", 2943 + "serde", 2944 + "serde_derive", 2945 + "serde_json", 2946 + "sha1_smol", 2947 + "threadpool", 2948 + "time", 2949 + "tiny_http", 2950 + "url", 2951 + ] 2952 + 2953 + [[package]] 2954 + name = "rsa" 2955 + version = "0.9.8" 2956 + source = "registry+https://github.com/rust-lang/crates.io-index" 2957 + checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" 2958 + dependencies = [ 2959 + "const-oid", 2960 + "digest", 2961 + "num-bigint-dig", 2962 + "num-integer", 2963 + "num-traits", 2964 + "pkcs1", 2965 + "pkcs8", 2966 + "rand_core 0.6.4", 2967 + "signature", 2968 + "spki", 2969 + "subtle", 2970 + "zeroize", 2971 + ] 2972 + 2973 + [[package]] 2974 + name = "rustc-demangle" 2975 + version = "0.1.26" 2976 + source = "registry+https://github.com/rust-lang/crates.io-index" 2977 + checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 2978 + 2979 + [[package]] 2980 + name = "rustc-hash" 2981 + version = "2.1.1" 2982 + source = "registry+https://github.com/rust-lang/crates.io-index" 2983 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 2984 + 2985 + [[package]] 2986 + name = "rustc_version" 2987 + version = "0.4.1" 2988 + source = "registry+https://github.com/rust-lang/crates.io-index" 2989 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2990 + dependencies = [ 2991 + "semver", 2992 + ] 2993 + 2994 + [[package]] 2995 + name = "rustix" 2996 + version = "1.1.2" 2997 + source = "registry+https://github.com/rust-lang/crates.io-index" 2998 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 2999 + dependencies = [ 3000 + "bitflags", 3001 + "errno", 3002 + "libc", 3003 + "linux-raw-sys", 3004 + "windows-sys 0.61.2", 3005 + ] 3006 + 3007 + [[package]] 3008 + name = "rustls" 3009 + version = "0.23.34" 3010 + source = "registry+https://github.com/rust-lang/crates.io-index" 3011 + checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" 3012 + dependencies = [ 3013 + "once_cell", 3014 + "ring", 3015 + "rustls-pki-types", 3016 + "rustls-webpki", 3017 + "subtle", 3018 + "zeroize", 3019 + ] 3020 + 3021 + [[package]] 3022 + name = "rustls-pki-types" 3023 + version = "1.13.0" 3024 + source = "registry+https://github.com/rust-lang/crates.io-index" 3025 + checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" 3026 + dependencies = [ 3027 + "web-time", 3028 + "zeroize", 3029 + ] 3030 + 3031 + [[package]] 3032 + name = "rustls-webpki" 3033 + version = "0.103.8" 3034 + source = "registry+https://github.com/rust-lang/crates.io-index" 3035 + checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" 3036 + dependencies = [ 3037 + "ring", 3038 + "rustls-pki-types", 3039 + "untrusted", 3040 + ] 3041 + 3042 + [[package]] 3043 + name = "rustversion" 3044 + version = "1.0.22" 3045 + source = "registry+https://github.com/rust-lang/crates.io-index" 3046 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 3047 + 3048 + [[package]] 3049 + name = "ryu" 3050 + version = "1.0.20" 3051 + source = "registry+https://github.com/rust-lang/crates.io-index" 3052 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 3053 + 3054 + [[package]] 3055 + name = "safemem" 3056 + version = "0.3.3" 3057 + source = "registry+https://github.com/rust-lang/crates.io-index" 3058 + checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 3059 + 3060 + [[package]] 3061 + name = "same-file" 3062 + version = "1.0.6" 3063 + source = "registry+https://github.com/rust-lang/crates.io-index" 3064 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 3065 + dependencies = [ 3066 + "winapi-util", 3067 + ] 3068 + 3069 + [[package]] 3070 + name = "schannel" 3071 + version = "0.1.28" 3072 + source = "registry+https://github.com/rust-lang/crates.io-index" 3073 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 3074 + dependencies = [ 3075 + "windows-sys 0.61.2", 3076 + ] 3077 + 3078 + [[package]] 3079 + name = "schemars" 3080 + version = "0.9.0" 3081 + source = "registry+https://github.com/rust-lang/crates.io-index" 3082 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 3083 + dependencies = [ 3084 + "dyn-clone", 3085 + "ref-cast", 3086 + "serde", 3087 + "serde_json", 3088 + ] 3089 + 3090 + [[package]] 3091 + name = "schemars" 3092 + version = "1.0.4" 3093 + source = "registry+https://github.com/rust-lang/crates.io-index" 3094 + checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" 3095 + dependencies = [ 3096 + "dyn-clone", 3097 + "ref-cast", 3098 + "serde", 3099 + "serde_json", 3100 + ] 3101 + 3102 + [[package]] 3103 + name = "scopeguard" 3104 + version = "1.2.0" 3105 + source = "registry+https://github.com/rust-lang/crates.io-index" 3106 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 3107 + 3108 + [[package]] 3109 + name = "sec1" 3110 + version = "0.7.3" 3111 + source = "registry+https://github.com/rust-lang/crates.io-index" 3112 + checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 3113 + dependencies = [ 3114 + "base16ct", 3115 + "der", 3116 + "generic-array", 3117 + "pkcs8", 3118 + "subtle", 3119 + "zeroize", 3120 + ] 3121 + 3122 + [[package]] 3123 + name = "security-framework" 3124 + version = "2.11.1" 3125 + source = "registry+https://github.com/rust-lang/crates.io-index" 3126 + checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 3127 + dependencies = [ 3128 + "bitflags", 3129 + "core-foundation", 3130 + "core-foundation-sys", 3131 + "libc", 3132 + "security-framework-sys", 3133 + ] 3134 + 3135 + [[package]] 3136 + name = "security-framework-sys" 3137 + version = "2.15.0" 3138 + source = "registry+https://github.com/rust-lang/crates.io-index" 3139 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 3140 + dependencies = [ 3141 + "core-foundation-sys", 3142 + "libc", 3143 + ] 3144 + 3145 + [[package]] 3146 + name = "semver" 3147 + version = "1.0.27" 3148 + source = "registry+https://github.com/rust-lang/crates.io-index" 3149 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 3150 + 3151 + [[package]] 3152 + name = "serde" 3153 + version = "1.0.228" 3154 + source = "registry+https://github.com/rust-lang/crates.io-index" 3155 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 3156 + dependencies = [ 3157 + "serde_core", 3158 + "serde_derive", 3159 + ] 3160 + 3161 + [[package]] 3162 + name = "serde_bytes" 3163 + version = "0.11.19" 3164 + source = "registry+https://github.com/rust-lang/crates.io-index" 3165 + checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" 3166 + dependencies = [ 3167 + "serde", 3168 + "serde_core", 3169 + ] 3170 + 3171 + [[package]] 3172 + name = "serde_core" 3173 + version = "1.0.228" 3174 + source = "registry+https://github.com/rust-lang/crates.io-index" 3175 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 3176 + dependencies = [ 3177 + "serde_derive", 3178 + ] 3179 + 3180 + [[package]] 3181 + name = "serde_derive" 3182 + version = "1.0.228" 3183 + source = "registry+https://github.com/rust-lang/crates.io-index" 3184 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 3185 + dependencies = [ 3186 + "proc-macro2", 3187 + "quote", 3188 + "syn 2.0.108", 3189 + ] 3190 + 3191 + [[package]] 3192 + name = "serde_html_form" 3193 + version = "0.2.8" 3194 + source = "registry+https://github.com/rust-lang/crates.io-index" 3195 + checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" 3196 + dependencies = [ 3197 + "form_urlencoded", 3198 + "indexmap 2.12.0", 3199 + "itoa", 3200 + "ryu", 3201 + "serde_core", 3202 + ] 3203 + 3204 + [[package]] 3205 + name = "serde_ipld_dagcbor" 3206 + version = "0.6.4" 3207 + source = "registry+https://github.com/rust-lang/crates.io-index" 3208 + checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778" 3209 + dependencies = [ 3210 + "cbor4ii", 3211 + "ipld-core", 3212 + "scopeguard", 3213 + "serde", 3214 + ] 3215 + 3216 + [[package]] 3217 + name = "serde_json" 3218 + version = "1.0.145" 3219 + source = "registry+https://github.com/rust-lang/crates.io-index" 3220 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 3221 + dependencies = [ 3222 + "itoa", 3223 + "memchr", 3224 + "ryu", 3225 + "serde", 3226 + "serde_core", 3227 + ] 3228 + 3229 + [[package]] 3230 + name = "serde_repr" 3231 + version = "0.1.20" 3232 + source = "registry+https://github.com/rust-lang/crates.io-index" 3233 + checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 3234 + dependencies = [ 3235 + "proc-macro2", 3236 + "quote", 3237 + "syn 2.0.108", 3238 + ] 3239 + 3240 + [[package]] 3241 + name = "serde_urlencoded" 3242 + version = "0.7.1" 3243 + source = "registry+https://github.com/rust-lang/crates.io-index" 3244 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3245 + dependencies = [ 3246 + "form_urlencoded", 3247 + "itoa", 3248 + "ryu", 3249 + "serde", 3250 + ] 3251 + 3252 + [[package]] 3253 + name = "serde_with" 3254 + version = "3.15.1" 3255 + source = "registry+https://github.com/rust-lang/crates.io-index" 3256 + checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" 3257 + dependencies = [ 3258 + "base64 0.22.1", 3259 + "chrono", 3260 + "hex", 3261 + "indexmap 1.9.3", 3262 + "indexmap 2.12.0", 3263 + "schemars 0.9.0", 3264 + "schemars 1.0.4", 3265 + "serde_core", 3266 + "serde_json", 3267 + "serde_with_macros", 3268 + "time", 3269 + ] 3270 + 3271 + [[package]] 3272 + name = "serde_with_macros" 3273 + version = "3.15.1" 3274 + source = "registry+https://github.com/rust-lang/crates.io-index" 3275 + checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" 3276 + dependencies = [ 3277 + "darling", 3278 + "proc-macro2", 3279 + "quote", 3280 + "syn 2.0.108", 3281 + ] 3282 + 3283 + [[package]] 3284 + name = "sha1_smol" 3285 + version = "1.0.1" 3286 + source = "registry+https://github.com/rust-lang/crates.io-index" 3287 + checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 3288 + 3289 + [[package]] 3290 + name = "sha2" 3291 + version = "0.10.9" 3292 + source = "registry+https://github.com/rust-lang/crates.io-index" 3293 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 3294 + dependencies = [ 3295 + "cfg-if", 3296 + "cpufeatures", 3297 + "digest", 3298 + ] 3299 + 3300 + [[package]] 3301 + name = "shellexpand" 3302 + version = "3.1.1" 3303 + source = "registry+https://github.com/rust-lang/crates.io-index" 3304 + checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" 3305 + dependencies = [ 3306 + "dirs", 3307 + ] 3308 + 3309 + [[package]] 3310 + name = "shlex" 3311 + version = "1.3.0" 3312 + source = "registry+https://github.com/rust-lang/crates.io-index" 3313 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3314 + 3315 + [[package]] 3316 + name = "signal-hook-registry" 3317 + version = "1.4.6" 3318 + source = "registry+https://github.com/rust-lang/crates.io-index" 3319 + checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 3320 + dependencies = [ 3321 + "libc", 3322 + ] 3323 + 3324 + [[package]] 3325 + name = "signature" 3326 + version = "2.2.0" 3327 + source = "registry+https://github.com/rust-lang/crates.io-index" 3328 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 3329 + dependencies = [ 3330 + "digest", 3331 + "rand_core 0.6.4", 3332 + ] 3333 + 3334 + [[package]] 3335 + name = "simd-adler32" 3336 + version = "0.3.7" 3337 + source = "registry+https://github.com/rust-lang/crates.io-index" 3338 + checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 3339 + 3340 + [[package]] 3341 + name = "siphasher" 3342 + version = "1.0.1" 3343 + source = "registry+https://github.com/rust-lang/crates.io-index" 3344 + checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 3345 + 3346 + [[package]] 3347 + name = "slab" 3348 + version = "0.4.11" 3349 + source = "registry+https://github.com/rust-lang/crates.io-index" 3350 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 3351 + 3352 + [[package]] 3353 + name = "smallvec" 3354 + version = "1.15.1" 3355 + source = "registry+https://github.com/rust-lang/crates.io-index" 3356 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 3357 + 3358 + [[package]] 3359 + name = "smol_str" 3360 + version = "0.3.4" 3361 + source = "registry+https://github.com/rust-lang/crates.io-index" 3362 + checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5" 3363 + dependencies = [ 3364 + "borsh", 3365 + "serde_core", 3366 + ] 3367 + 3368 + [[package]] 3369 + name = "socket2" 3370 + version = "0.5.10" 3371 + source = "registry+https://github.com/rust-lang/crates.io-index" 3372 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 3373 + dependencies = [ 3374 + "libc", 3375 + "windows-sys 0.52.0", 3376 + ] 3377 + 3378 + [[package]] 3379 + name = "socket2" 3380 + version = "0.6.1" 3381 + source = "registry+https://github.com/rust-lang/crates.io-index" 3382 + checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" 3383 + dependencies = [ 3384 + "libc", 3385 + "windows-sys 0.60.2", 3386 + ] 3387 + 3388 + [[package]] 3389 + name = "spin" 3390 + version = "0.9.8" 3391 + source = "registry+https://github.com/rust-lang/crates.io-index" 3392 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3393 + 3394 + [[package]] 3395 + name = "spki" 3396 + version = "0.7.3" 3397 + source = "registry+https://github.com/rust-lang/crates.io-index" 3398 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 3399 + dependencies = [ 3400 + "base64ct", 3401 + "der", 3402 + ] 3403 + 3404 + [[package]] 3405 + name = "stable_deref_trait" 3406 + version = "1.2.1" 3407 + source = "registry+https://github.com/rust-lang/crates.io-index" 3408 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 3409 + 3410 + [[package]] 3411 + name = "static-regular-grammar" 3412 + version = "2.0.2" 3413 + source = "registry+https://github.com/rust-lang/crates.io-index" 3414 + checksum = "4f4a6c40247579acfbb138c3cd7de3dab113ab4ac6227f1b7de7d626ee667957" 3415 + dependencies = [ 3416 + "abnf", 3417 + "btree-range-map", 3418 + "ciborium", 3419 + "hex_fmt", 3420 + "indoc", 3421 + "proc-macro-error", 3422 + "proc-macro2", 3423 + "quote", 3424 + "serde", 3425 + "sha2", 3426 + "syn 2.0.108", 3427 + "thiserror 1.0.69", 3428 + ] 3429 + 3430 + [[package]] 3431 + name = "static_assertions" 3432 + version = "1.1.0" 3433 + source = "registry+https://github.com/rust-lang/crates.io-index" 3434 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3435 + 3436 + [[package]] 3437 + name = "string_cache" 3438 + version = "0.8.9" 3439 + source = "registry+https://github.com/rust-lang/crates.io-index" 3440 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 3441 + dependencies = [ 3442 + "new_debug_unreachable", 3443 + "parking_lot", 3444 + "phf_shared", 3445 + "precomputed-hash", 3446 + "serde", 3447 + ] 3448 + 3449 + [[package]] 3450 + name = "string_cache_codegen" 3451 + version = "0.5.4" 3452 + source = "registry+https://github.com/rust-lang/crates.io-index" 3453 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 3454 + dependencies = [ 3455 + "phf_generator", 3456 + "phf_shared", 3457 + "proc-macro2", 3458 + "quote", 3459 + ] 3460 + 3461 + [[package]] 3462 + name = "strsim" 3463 + version = "0.11.1" 3464 + source = "registry+https://github.com/rust-lang/crates.io-index" 3465 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3466 + 3467 + [[package]] 3468 + name = "subtle" 3469 + version = "2.6.1" 3470 + source = "registry+https://github.com/rust-lang/crates.io-index" 3471 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 3472 + 3473 + [[package]] 3474 + name = "supports-color" 3475 + version = "3.0.2" 3476 + source = "registry+https://github.com/rust-lang/crates.io-index" 3477 + checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" 3478 + dependencies = [ 3479 + "is_ci", 3480 + ] 3481 + 3482 + [[package]] 3483 + name = "supports-hyperlinks" 3484 + version = "3.1.0" 3485 + source = "registry+https://github.com/rust-lang/crates.io-index" 3486 + checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b" 3487 + 3488 + [[package]] 3489 + name = "supports-unicode" 3490 + version = "3.0.0" 3491 + source = "registry+https://github.com/rust-lang/crates.io-index" 3492 + checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" 3493 + 3494 + [[package]] 3495 + name = "syn" 3496 + version = "1.0.109" 3497 + source = "registry+https://github.com/rust-lang/crates.io-index" 3498 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3499 + dependencies = [ 3500 + "proc-macro2", 3501 + "quote", 3502 + "unicode-ident", 3503 + ] 3504 + 3505 + [[package]] 3506 + name = "syn" 3507 + version = "2.0.108" 3508 + source = "registry+https://github.com/rust-lang/crates.io-index" 3509 + checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" 3510 + dependencies = [ 3511 + "proc-macro2", 3512 + "quote", 3513 + "unicode-ident", 3514 + ] 3515 + 3516 + [[package]] 3517 + name = "sync_wrapper" 3518 + version = "1.0.2" 3519 + source = "registry+https://github.com/rust-lang/crates.io-index" 3520 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 3521 + dependencies = [ 3522 + "futures-core", 3523 + ] 3524 + 3525 + [[package]] 3526 + name = "synstructure" 3527 + version = "0.13.2" 3528 + source = "registry+https://github.com/rust-lang/crates.io-index" 3529 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 3530 + dependencies = [ 3531 + "proc-macro2", 3532 + "quote", 3533 + "syn 2.0.108", 3534 + ] 3535 + 3536 + [[package]] 3537 + name = "system-configuration" 3538 + version = "0.6.1" 3539 + source = "registry+https://github.com/rust-lang/crates.io-index" 3540 + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 3541 + dependencies = [ 3542 + "bitflags", 3543 + "core-foundation", 3544 + "system-configuration-sys", 3545 + ] 3546 + 3547 + [[package]] 3548 + name = "system-configuration-sys" 3549 + version = "0.6.0" 3550 + source = "registry+https://github.com/rust-lang/crates.io-index" 3551 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 3552 + dependencies = [ 3553 + "core-foundation-sys", 3554 + "libc", 3555 + ] 3556 + 3557 + [[package]] 3558 + name = "tagptr" 3559 + version = "0.2.0" 3560 + source = "registry+https://github.com/rust-lang/crates.io-index" 3561 + checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 3562 + 3563 + [[package]] 3564 + name = "tempfile" 3565 + version = "3.23.0" 3566 + source = "registry+https://github.com/rust-lang/crates.io-index" 3567 + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 3568 + dependencies = [ 3569 + "fastrand", 3570 + "getrandom 0.3.4", 3571 + "once_cell", 3572 + "rustix", 3573 + "windows-sys 0.61.2", 3574 + ] 3575 + 3576 + [[package]] 3577 + name = "tendril" 3578 + version = "0.4.3" 3579 + source = "registry+https://github.com/rust-lang/crates.io-index" 3580 + checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 3581 + dependencies = [ 3582 + "futf", 3583 + "mac", 3584 + "utf-8", 3585 + ] 3586 + 3587 + [[package]] 3588 + name = "terminal_size" 3589 + version = "0.4.3" 3590 + source = "registry+https://github.com/rust-lang/crates.io-index" 3591 + checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" 3592 + dependencies = [ 3593 + "rustix", 3594 + "windows-sys 0.60.2", 3595 + ] 3596 + 3597 + [[package]] 3598 + name = "textwrap" 3599 + version = "0.16.2" 3600 + source = "registry+https://github.com/rust-lang/crates.io-index" 3601 + checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 3602 + dependencies = [ 3603 + "unicode-linebreak", 3604 + "unicode-width 0.2.2", 3605 + ] 3606 + 3607 + [[package]] 3608 + name = "thiserror" 3609 + version = "1.0.69" 3610 + source = "registry+https://github.com/rust-lang/crates.io-index" 3611 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3612 + dependencies = [ 3613 + "thiserror-impl 1.0.69", 3614 + ] 3615 + 3616 + [[package]] 3617 + name = "thiserror" 3618 + version = "2.0.17" 3619 + source = "registry+https://github.com/rust-lang/crates.io-index" 3620 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 3621 + dependencies = [ 3622 + "thiserror-impl 2.0.17", 3623 + ] 3624 + 3625 + [[package]] 3626 + name = "thiserror-impl" 3627 + version = "1.0.69" 3628 + source = "registry+https://github.com/rust-lang/crates.io-index" 3629 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3630 + dependencies = [ 3631 + "proc-macro2", 3632 + "quote", 3633 + "syn 2.0.108", 3634 + ] 3635 + 3636 + [[package]] 3637 + name = "thiserror-impl" 3638 + version = "2.0.17" 3639 + source = "registry+https://github.com/rust-lang/crates.io-index" 3640 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 3641 + dependencies = [ 3642 + "proc-macro2", 3643 + "quote", 3644 + "syn 2.0.108", 3645 + ] 3646 + 3647 + [[package]] 3648 + name = "threadpool" 3649 + version = "1.8.1" 3650 + source = "registry+https://github.com/rust-lang/crates.io-index" 3651 + checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 3652 + dependencies = [ 3653 + "num_cpus", 3654 + ] 3655 + 3656 + [[package]] 3657 + name = "time" 3658 + version = "0.3.44" 3659 + source = "registry+https://github.com/rust-lang/crates.io-index" 3660 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 3661 + dependencies = [ 3662 + "deranged", 3663 + "itoa", 3664 + "libc", 3665 + "num-conv", 3666 + "num_threads", 3667 + "powerfmt", 3668 + "serde", 3669 + "time-core", 3670 + "time-macros", 3671 + ] 3672 + 3673 + [[package]] 3674 + name = "time-core" 3675 + version = "0.1.6" 3676 + source = "registry+https://github.com/rust-lang/crates.io-index" 3677 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 3678 + 3679 + [[package]] 3680 + name = "time-macros" 3681 + version = "0.2.24" 3682 + source = "registry+https://github.com/rust-lang/crates.io-index" 3683 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 3684 + dependencies = [ 3685 + "num-conv", 3686 + "time-core", 3687 + ] 3688 + 3689 + [[package]] 3690 + name = "tiny_http" 3691 + version = "0.12.0" 3692 + source = "registry+https://github.com/rust-lang/crates.io-index" 3693 + checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" 3694 + dependencies = [ 3695 + "ascii", 3696 + "chunked_transfer", 3697 + "httpdate", 3698 + "log", 3699 + ] 3700 + 3701 + [[package]] 3702 + name = "tinystr" 3703 + version = "0.8.2" 3704 + source = "registry+https://github.com/rust-lang/crates.io-index" 3705 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 3706 + dependencies = [ 3707 + "displaydoc", 3708 + "zerovec", 3709 + ] 3710 + 3711 + [[package]] 3712 + name = "tinyvec" 3713 + version = "1.10.0" 3714 + source = "registry+https://github.com/rust-lang/crates.io-index" 3715 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 3716 + dependencies = [ 3717 + "tinyvec_macros", 3718 + ] 3719 + 3720 + [[package]] 3721 + name = "tinyvec_macros" 3722 + version = "0.1.1" 3723 + source = "registry+https://github.com/rust-lang/crates.io-index" 3724 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3725 + 3726 + [[package]] 3727 + name = "tokio" 3728 + version = "1.48.0" 3729 + source = "registry+https://github.com/rust-lang/crates.io-index" 3730 + checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 3731 + dependencies = [ 3732 + "bytes", 3733 + "libc", 3734 + "mio", 3735 + "parking_lot", 3736 + "pin-project-lite", 3737 + "signal-hook-registry", 3738 + "socket2 0.6.1", 3739 + "tokio-macros", 3740 + "windows-sys 0.61.2", 3741 + ] 3742 + 3743 + [[package]] 3744 + name = "tokio-macros" 3745 + version = "2.6.0" 3746 + source = "registry+https://github.com/rust-lang/crates.io-index" 3747 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 3748 + dependencies = [ 3749 + "proc-macro2", 3750 + "quote", 3751 + "syn 2.0.108", 3752 + ] 3753 + 3754 + [[package]] 3755 + name = "tokio-native-tls" 3756 + version = "0.3.1" 3757 + source = "registry+https://github.com/rust-lang/crates.io-index" 3758 + checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 3759 + dependencies = [ 3760 + "native-tls", 3761 + "tokio", 3762 + ] 3763 + 3764 + [[package]] 3765 + name = "tokio-rustls" 3766 + version = "0.26.4" 3767 + source = "registry+https://github.com/rust-lang/crates.io-index" 3768 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 3769 + dependencies = [ 3770 + "rustls", 3771 + "tokio", 3772 + ] 3773 + 3774 + [[package]] 3775 + name = "tokio-util" 3776 + version = "0.7.16" 3777 + source = "registry+https://github.com/rust-lang/crates.io-index" 3778 + checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" 3779 + dependencies = [ 3780 + "bytes", 3781 + "futures-core", 3782 + "futures-sink", 3783 + "pin-project-lite", 3784 + "tokio", 3785 + ] 3786 + 3787 + [[package]] 3788 + name = "tower" 3789 + version = "0.5.2" 3790 + source = "registry+https://github.com/rust-lang/crates.io-index" 3791 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 3792 + dependencies = [ 3793 + "futures-core", 3794 + "futures-util", 3795 + "pin-project-lite", 3796 + "sync_wrapper", 3797 + "tokio", 3798 + "tower-layer", 3799 + "tower-service", 3800 + ] 3801 + 3802 + [[package]] 3803 + name = "tower-http" 3804 + version = "0.6.6" 3805 + source = "registry+https://github.com/rust-lang/crates.io-index" 3806 + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 3807 + dependencies = [ 3808 + "bitflags", 3809 + "bytes", 3810 + "futures-util", 3811 + "http", 3812 + "http-body", 3813 + "iri-string", 3814 + "pin-project-lite", 3815 + "tower", 3816 + "tower-layer", 3817 + "tower-service", 3818 + ] 3819 + 3820 + [[package]] 3821 + name = "tower-layer" 3822 + version = "0.3.3" 3823 + source = "registry+https://github.com/rust-lang/crates.io-index" 3824 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 3825 + 3826 + [[package]] 3827 + name = "tower-service" 3828 + version = "0.3.3" 3829 + source = "registry+https://github.com/rust-lang/crates.io-index" 3830 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 3831 + 3832 + [[package]] 3833 + name = "tracing" 3834 + version = "0.1.41" 3835 + source = "registry+https://github.com/rust-lang/crates.io-index" 3836 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3837 + dependencies = [ 3838 + "pin-project-lite", 3839 + "tracing-attributes", 3840 + "tracing-core", 3841 + ] 3842 + 3843 + [[package]] 3844 + name = "tracing-attributes" 3845 + version = "0.1.30" 3846 + source = "registry+https://github.com/rust-lang/crates.io-index" 3847 + checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 3848 + dependencies = [ 3849 + "proc-macro2", 3850 + "quote", 3851 + "syn 2.0.108", 3852 + ] 3853 + 3854 + [[package]] 3855 + name = "tracing-core" 3856 + version = "0.1.34" 3857 + source = "registry+https://github.com/rust-lang/crates.io-index" 3858 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 3859 + dependencies = [ 3860 + "once_cell", 3861 + ] 3862 + 3863 + [[package]] 3864 + name = "trait-variant" 3865 + version = "0.1.2" 3866 + source = "registry+https://github.com/rust-lang/crates.io-index" 3867 + checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" 3868 + dependencies = [ 3869 + "proc-macro2", 3870 + "quote", 3871 + "syn 2.0.108", 3872 + ] 3873 + 3874 + [[package]] 3875 + name = "try-lock" 3876 + version = "0.2.5" 3877 + source = "registry+https://github.com/rust-lang/crates.io-index" 3878 + checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 3879 + 3880 + [[package]] 3881 + name = "twoway" 3882 + version = "0.1.8" 3883 + source = "registry+https://github.com/rust-lang/crates.io-index" 3884 + checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" 3885 + dependencies = [ 3886 + "memchr", 3887 + ] 3888 + 3889 + [[package]] 3890 + name = "typenum" 3891 + version = "1.19.0" 3892 + source = "registry+https://github.com/rust-lang/crates.io-index" 3893 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 3894 + 3895 + [[package]] 3896 + name = "unicase" 3897 + version = "2.8.1" 3898 + source = "registry+https://github.com/rust-lang/crates.io-index" 3899 + checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 3900 + 3901 + [[package]] 3902 + name = "unicode-ident" 3903 + version = "1.0.22" 3904 + source = "registry+https://github.com/rust-lang/crates.io-index" 3905 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 3906 + 3907 + [[package]] 3908 + name = "unicode-linebreak" 3909 + version = "0.1.5" 3910 + source = "registry+https://github.com/rust-lang/crates.io-index" 3911 + checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 3912 + 3913 + [[package]] 3914 + name = "unicode-segmentation" 3915 + version = "1.12.0" 3916 + source = "registry+https://github.com/rust-lang/crates.io-index" 3917 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3918 + 3919 + [[package]] 3920 + name = "unicode-width" 3921 + version = "0.1.14" 3922 + source = "registry+https://github.com/rust-lang/crates.io-index" 3923 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 3924 + 3925 + [[package]] 3926 + name = "unicode-width" 3927 + version = "0.2.2" 3928 + source = "registry+https://github.com/rust-lang/crates.io-index" 3929 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 3930 + 3931 + [[package]] 3932 + name = "unsigned-varint" 3933 + version = "0.8.0" 3934 + source = "registry+https://github.com/rust-lang/crates.io-index" 3935 + checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 3936 + 3937 + [[package]] 3938 + name = "untrusted" 3939 + version = "0.9.0" 3940 + source = "registry+https://github.com/rust-lang/crates.io-index" 3941 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 3942 + 3943 + [[package]] 3944 + name = "url" 3945 + version = "2.5.7" 3946 + source = "registry+https://github.com/rust-lang/crates.io-index" 3947 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 3948 + dependencies = [ 3949 + "form_urlencoded", 3950 + "idna", 3951 + "percent-encoding", 3952 + "serde", 3953 + ] 3954 + 3955 + [[package]] 3956 + name = "urlencoding" 3957 + version = "2.1.3" 3958 + source = "registry+https://github.com/rust-lang/crates.io-index" 3959 + checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 3960 + 3961 + [[package]] 3962 + name = "utf-8" 3963 + version = "0.7.6" 3964 + source = "registry+https://github.com/rust-lang/crates.io-index" 3965 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 3966 + 3967 + [[package]] 3968 + name = "utf8_iter" 3969 + version = "1.0.4" 3970 + source = "registry+https://github.com/rust-lang/crates.io-index" 3971 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 3972 + 3973 + [[package]] 3974 + name = "utf8parse" 3975 + version = "0.2.2" 3976 + source = "registry+https://github.com/rust-lang/crates.io-index" 3977 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3978 + 3979 + [[package]] 3980 + name = "uuid" 3981 + version = "1.18.1" 3982 + source = "registry+https://github.com/rust-lang/crates.io-index" 3983 + checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" 3984 + dependencies = [ 3985 + "getrandom 0.3.4", 3986 + "js-sys", 3987 + "wasm-bindgen", 3988 + ] 3989 + 3990 + [[package]] 3991 + name = "vcpkg" 3992 + version = "0.2.15" 3993 + source = "registry+https://github.com/rust-lang/crates.io-index" 3994 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 3995 + 3996 + [[package]] 3997 + name = "version_check" 3998 + version = "0.9.5" 3999 + source = "registry+https://github.com/rust-lang/crates.io-index" 4000 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 4001 + 4002 + [[package]] 4003 + name = "walkdir" 4004 + version = "2.5.0" 4005 + source = "registry+https://github.com/rust-lang/crates.io-index" 4006 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 4007 + dependencies = [ 4008 + "same-file", 4009 + "winapi-util", 4010 + ] 4011 + 4012 + [[package]] 4013 + name = "want" 4014 + version = "0.3.1" 4015 + source = "registry+https://github.com/rust-lang/crates.io-index" 4016 + checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 4017 + dependencies = [ 4018 + "try-lock", 4019 + ] 4020 + 4021 + [[package]] 4022 + name = "wasi" 4023 + version = "0.11.1+wasi-snapshot-preview1" 4024 + source = "registry+https://github.com/rust-lang/crates.io-index" 4025 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 4026 + 4027 + [[package]] 4028 + name = "wasip2" 4029 + version = "1.0.1+wasi-0.2.4" 4030 + source = "registry+https://github.com/rust-lang/crates.io-index" 4031 + checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 4032 + dependencies = [ 4033 + "wit-bindgen", 4034 + ] 4035 + 4036 + [[package]] 4037 + name = "wasm-bindgen" 4038 + version = "0.2.105" 4039 + source = "registry+https://github.com/rust-lang/crates.io-index" 4040 + checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 4041 + dependencies = [ 4042 + "cfg-if", 4043 + "once_cell", 4044 + "rustversion", 4045 + "wasm-bindgen-macro", 4046 + "wasm-bindgen-shared", 4047 + ] 4048 + 4049 + [[package]] 4050 + name = "wasm-bindgen-futures" 4051 + version = "0.4.55" 4052 + source = "registry+https://github.com/rust-lang/crates.io-index" 4053 + checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" 4054 + dependencies = [ 4055 + "cfg-if", 4056 + "js-sys", 4057 + "once_cell", 4058 + "wasm-bindgen", 4059 + "web-sys", 4060 + ] 4061 + 4062 + [[package]] 4063 + name = "wasm-bindgen-macro" 4064 + version = "0.2.105" 4065 + source = "registry+https://github.com/rust-lang/crates.io-index" 4066 + checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" 4067 + dependencies = [ 4068 + "quote", 4069 + "wasm-bindgen-macro-support", 4070 + ] 4071 + 4072 + [[package]] 4073 + name = "wasm-bindgen-macro-support" 4074 + version = "0.2.105" 4075 + source = "registry+https://github.com/rust-lang/crates.io-index" 4076 + checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" 4077 + dependencies = [ 4078 + "bumpalo", 4079 + "proc-macro2", 4080 + "quote", 4081 + "syn 2.0.108", 4082 + "wasm-bindgen-shared", 4083 + ] 4084 + 4085 + [[package]] 4086 + name = "wasm-bindgen-shared" 4087 + version = "0.2.105" 4088 + source = "registry+https://github.com/rust-lang/crates.io-index" 4089 + checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" 4090 + dependencies = [ 4091 + "unicode-ident", 4092 + ] 4093 + 4094 + [[package]] 4095 + name = "wasm-streams" 4096 + version = "0.4.2" 4097 + source = "registry+https://github.com/rust-lang/crates.io-index" 4098 + checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 4099 + dependencies = [ 4100 + "futures-util", 4101 + "js-sys", 4102 + "wasm-bindgen", 4103 + "wasm-bindgen-futures", 4104 + "web-sys", 4105 + ] 4106 + 4107 + [[package]] 4108 + name = "web-sys" 4109 + version = "0.3.82" 4110 + source = "registry+https://github.com/rust-lang/crates.io-index" 4111 + checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" 4112 + dependencies = [ 4113 + "js-sys", 4114 + "wasm-bindgen", 4115 + ] 4116 + 4117 + [[package]] 4118 + name = "web-time" 4119 + version = "1.1.0" 4120 + source = "registry+https://github.com/rust-lang/crates.io-index" 4121 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 4122 + dependencies = [ 4123 + "js-sys", 4124 + "wasm-bindgen", 4125 + ] 4126 + 4127 + [[package]] 4128 + name = "webbrowser" 4129 + version = "0.8.15" 4130 + source = "registry+https://github.com/rust-lang/crates.io-index" 4131 + checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" 4132 + dependencies = [ 4133 + "core-foundation", 4134 + "home", 4135 + "jni", 4136 + "log", 4137 + "ndk-context", 4138 + "objc", 4139 + "raw-window-handle", 4140 + "url", 4141 + "web-sys", 4142 + ] 4143 + 4144 + [[package]] 4145 + name = "webpage" 4146 + version = "2.0.1" 4147 + source = "registry+https://github.com/rust-lang/crates.io-index" 4148 + checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" 4149 + dependencies = [ 4150 + "html5ever", 4151 + "markup5ever_rcdom", 4152 + "serde_json", 4153 + "url", 4154 + ] 4155 + 4156 + [[package]] 4157 + name = "webpki-roots" 4158 + version = "1.0.4" 4159 + source = "registry+https://github.com/rust-lang/crates.io-index" 4160 + checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" 4161 + dependencies = [ 4162 + "rustls-pki-types", 4163 + ] 4164 + 4165 + [[package]] 4166 + name = "widestring" 4167 + version = "1.2.1" 4168 + source = "registry+https://github.com/rust-lang/crates.io-index" 4169 + checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" 4170 + 4171 + [[package]] 4172 + name = "winapi-util" 4173 + version = "0.1.11" 4174 + source = "registry+https://github.com/rust-lang/crates.io-index" 4175 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 4176 + dependencies = [ 4177 + "windows-sys 0.61.2", 4178 + ] 4179 + 4180 + [[package]] 4181 + name = "windows-core" 4182 + version = "0.62.2" 4183 + source = "registry+https://github.com/rust-lang/crates.io-index" 4184 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 4185 + dependencies = [ 4186 + "windows-implement", 4187 + "windows-interface", 4188 + "windows-link 0.2.1", 4189 + "windows-result 0.4.1", 4190 + "windows-strings 0.5.1", 4191 + ] 4192 + 4193 + [[package]] 4194 + name = "windows-implement" 4195 + version = "0.60.2" 4196 + source = "registry+https://github.com/rust-lang/crates.io-index" 4197 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 4198 + dependencies = [ 4199 + "proc-macro2", 4200 + "quote", 4201 + "syn 2.0.108", 4202 + ] 4203 + 4204 + [[package]] 4205 + name = "windows-interface" 4206 + version = "0.59.3" 4207 + source = "registry+https://github.com/rust-lang/crates.io-index" 4208 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 4209 + dependencies = [ 4210 + "proc-macro2", 4211 + "quote", 4212 + "syn 2.0.108", 4213 + ] 4214 + 4215 + [[package]] 4216 + name = "windows-link" 4217 + version = "0.1.3" 4218 + source = "registry+https://github.com/rust-lang/crates.io-index" 4219 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 4220 + 4221 + [[package]] 4222 + name = "windows-link" 4223 + version = "0.2.1" 4224 + source = "registry+https://github.com/rust-lang/crates.io-index" 4225 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 4226 + 4227 + [[package]] 4228 + name = "windows-registry" 4229 + version = "0.5.3" 4230 + source = "registry+https://github.com/rust-lang/crates.io-index" 4231 + checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 4232 + dependencies = [ 4233 + "windows-link 0.1.3", 4234 + "windows-result 0.3.4", 4235 + "windows-strings 0.4.2", 4236 + ] 4237 + 4238 + [[package]] 4239 + name = "windows-result" 4240 + version = "0.3.4" 4241 + source = "registry+https://github.com/rust-lang/crates.io-index" 4242 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 4243 + dependencies = [ 4244 + "windows-link 0.1.3", 4245 + ] 4246 + 4247 + [[package]] 4248 + name = "windows-result" 4249 + version = "0.4.1" 4250 + source = "registry+https://github.com/rust-lang/crates.io-index" 4251 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 4252 + dependencies = [ 4253 + "windows-link 0.2.1", 4254 + ] 4255 + 4256 + [[package]] 4257 + name = "windows-strings" 4258 + version = "0.4.2" 4259 + source = "registry+https://github.com/rust-lang/crates.io-index" 4260 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 4261 + dependencies = [ 4262 + "windows-link 0.1.3", 4263 + ] 4264 + 4265 + [[package]] 4266 + name = "windows-strings" 4267 + version = "0.5.1" 4268 + source = "registry+https://github.com/rust-lang/crates.io-index" 4269 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 4270 + dependencies = [ 4271 + "windows-link 0.2.1", 4272 + ] 4273 + 4274 + [[package]] 4275 + name = "windows-sys" 4276 + version = "0.45.0" 4277 + source = "registry+https://github.com/rust-lang/crates.io-index" 4278 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 4279 + dependencies = [ 4280 + "windows-targets 0.42.2", 4281 + ] 4282 + 4283 + [[package]] 4284 + name = "windows-sys" 4285 + version = "0.48.0" 4286 + source = "registry+https://github.com/rust-lang/crates.io-index" 4287 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 4288 + dependencies = [ 4289 + "windows-targets 0.48.5", 4290 + ] 4291 + 4292 + [[package]] 4293 + name = "windows-sys" 4294 + version = "0.52.0" 4295 + source = "registry+https://github.com/rust-lang/crates.io-index" 4296 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 4297 + dependencies = [ 4298 + "windows-targets 0.52.6", 4299 + ] 4300 + 4301 + [[package]] 4302 + name = "windows-sys" 4303 + version = "0.60.2" 4304 + source = "registry+https://github.com/rust-lang/crates.io-index" 4305 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 4306 + dependencies = [ 4307 + "windows-targets 0.53.5", 4308 + ] 4309 + 4310 + [[package]] 4311 + name = "windows-sys" 4312 + version = "0.61.2" 4313 + source = "registry+https://github.com/rust-lang/crates.io-index" 4314 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 4315 + dependencies = [ 4316 + "windows-link 0.2.1", 4317 + ] 4318 + 4319 + [[package]] 4320 + name = "windows-targets" 4321 + version = "0.42.2" 4322 + source = "registry+https://github.com/rust-lang/crates.io-index" 4323 + checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 4324 + dependencies = [ 4325 + "windows_aarch64_gnullvm 0.42.2", 4326 + "windows_aarch64_msvc 0.42.2", 4327 + "windows_i686_gnu 0.42.2", 4328 + "windows_i686_msvc 0.42.2", 4329 + "windows_x86_64_gnu 0.42.2", 4330 + "windows_x86_64_gnullvm 0.42.2", 4331 + "windows_x86_64_msvc 0.42.2", 4332 + ] 4333 + 4334 + [[package]] 4335 + name = "windows-targets" 4336 + version = "0.48.5" 4337 + source = "registry+https://github.com/rust-lang/crates.io-index" 4338 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 4339 + dependencies = [ 4340 + "windows_aarch64_gnullvm 0.48.5", 4341 + "windows_aarch64_msvc 0.48.5", 4342 + "windows_i686_gnu 0.48.5", 4343 + "windows_i686_msvc 0.48.5", 4344 + "windows_x86_64_gnu 0.48.5", 4345 + "windows_x86_64_gnullvm 0.48.5", 4346 + "windows_x86_64_msvc 0.48.5", 4347 + ] 4348 + 4349 + [[package]] 4350 + name = "windows-targets" 4351 + version = "0.52.6" 4352 + source = "registry+https://github.com/rust-lang/crates.io-index" 4353 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 4354 + dependencies = [ 4355 + "windows_aarch64_gnullvm 0.52.6", 4356 + "windows_aarch64_msvc 0.52.6", 4357 + "windows_i686_gnu 0.52.6", 4358 + "windows_i686_gnullvm 0.52.6", 4359 + "windows_i686_msvc 0.52.6", 4360 + "windows_x86_64_gnu 0.52.6", 4361 + "windows_x86_64_gnullvm 0.52.6", 4362 + "windows_x86_64_msvc 0.52.6", 4363 + ] 4364 + 4365 + [[package]] 4366 + name = "windows-targets" 4367 + version = "0.53.5" 4368 + source = "registry+https://github.com/rust-lang/crates.io-index" 4369 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 4370 + dependencies = [ 4371 + "windows-link 0.2.1", 4372 + "windows_aarch64_gnullvm 0.53.1", 4373 + "windows_aarch64_msvc 0.53.1", 4374 + "windows_i686_gnu 0.53.1", 4375 + "windows_i686_gnullvm 0.53.1", 4376 + "windows_i686_msvc 0.53.1", 4377 + "windows_x86_64_gnu 0.53.1", 4378 + "windows_x86_64_gnullvm 0.53.1", 4379 + "windows_x86_64_msvc 0.53.1", 4380 + ] 4381 + 4382 + [[package]] 4383 + name = "windows_aarch64_gnullvm" 4384 + version = "0.42.2" 4385 + source = "registry+https://github.com/rust-lang/crates.io-index" 4386 + checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 4387 + 4388 + [[package]] 4389 + name = "windows_aarch64_gnullvm" 4390 + version = "0.48.5" 4391 + source = "registry+https://github.com/rust-lang/crates.io-index" 4392 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4393 + 4394 + [[package]] 4395 + name = "windows_aarch64_gnullvm" 4396 + version = "0.52.6" 4397 + source = "registry+https://github.com/rust-lang/crates.io-index" 4398 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 4399 + 4400 + [[package]] 4401 + name = "windows_aarch64_gnullvm" 4402 + version = "0.53.1" 4403 + source = "registry+https://github.com/rust-lang/crates.io-index" 4404 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 4405 + 4406 + [[package]] 4407 + name = "windows_aarch64_msvc" 4408 + version = "0.42.2" 4409 + source = "registry+https://github.com/rust-lang/crates.io-index" 4410 + checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 4411 + 4412 + [[package]] 4413 + name = "windows_aarch64_msvc" 4414 + version = "0.48.5" 4415 + source = "registry+https://github.com/rust-lang/crates.io-index" 4416 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4417 + 4418 + [[package]] 4419 + name = "windows_aarch64_msvc" 4420 + version = "0.52.6" 4421 + source = "registry+https://github.com/rust-lang/crates.io-index" 4422 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 4423 + 4424 + [[package]] 4425 + name = "windows_aarch64_msvc" 4426 + version = "0.53.1" 4427 + source = "registry+https://github.com/rust-lang/crates.io-index" 4428 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 4429 + 4430 + [[package]] 4431 + name = "windows_i686_gnu" 4432 + version = "0.42.2" 4433 + source = "registry+https://github.com/rust-lang/crates.io-index" 4434 + checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 4435 + 4436 + [[package]] 4437 + name = "windows_i686_gnu" 4438 + version = "0.48.5" 4439 + source = "registry+https://github.com/rust-lang/crates.io-index" 4440 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4441 + 4442 + [[package]] 4443 + name = "windows_i686_gnu" 4444 + version = "0.52.6" 4445 + source = "registry+https://github.com/rust-lang/crates.io-index" 4446 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 4447 + 4448 + [[package]] 4449 + name = "windows_i686_gnu" 4450 + version = "0.53.1" 4451 + source = "registry+https://github.com/rust-lang/crates.io-index" 4452 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 4453 + 4454 + [[package]] 4455 + name = "windows_i686_gnullvm" 4456 + version = "0.52.6" 4457 + source = "registry+https://github.com/rust-lang/crates.io-index" 4458 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 4459 + 4460 + [[package]] 4461 + name = "windows_i686_gnullvm" 4462 + version = "0.53.1" 4463 + source = "registry+https://github.com/rust-lang/crates.io-index" 4464 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 4465 + 4466 + [[package]] 4467 + name = "windows_i686_msvc" 4468 + version = "0.42.2" 4469 + source = "registry+https://github.com/rust-lang/crates.io-index" 4470 + checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 4471 + 4472 + [[package]] 4473 + name = "windows_i686_msvc" 4474 + version = "0.48.5" 4475 + source = "registry+https://github.com/rust-lang/crates.io-index" 4476 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4477 + 4478 + [[package]] 4479 + name = "windows_i686_msvc" 4480 + version = "0.52.6" 4481 + source = "registry+https://github.com/rust-lang/crates.io-index" 4482 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 4483 + 4484 + [[package]] 4485 + name = "windows_i686_msvc" 4486 + version = "0.53.1" 4487 + source = "registry+https://github.com/rust-lang/crates.io-index" 4488 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 4489 + 4490 + [[package]] 4491 + name = "windows_x86_64_gnu" 4492 + version = "0.42.2" 4493 + source = "registry+https://github.com/rust-lang/crates.io-index" 4494 + checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 4495 + 4496 + [[package]] 4497 + name = "windows_x86_64_gnu" 4498 + version = "0.48.5" 4499 + source = "registry+https://github.com/rust-lang/crates.io-index" 4500 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4501 + 4502 + [[package]] 4503 + name = "windows_x86_64_gnu" 4504 + version = "0.52.6" 4505 + source = "registry+https://github.com/rust-lang/crates.io-index" 4506 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 4507 + 4508 + [[package]] 4509 + name = "windows_x86_64_gnu" 4510 + version = "0.53.1" 4511 + source = "registry+https://github.com/rust-lang/crates.io-index" 4512 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 4513 + 4514 + [[package]] 4515 + name = "windows_x86_64_gnullvm" 4516 + version = "0.42.2" 4517 + source = "registry+https://github.com/rust-lang/crates.io-index" 4518 + checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 4519 + 4520 + [[package]] 4521 + name = "windows_x86_64_gnullvm" 4522 + version = "0.48.5" 4523 + source = "registry+https://github.com/rust-lang/crates.io-index" 4524 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4525 + 4526 + [[package]] 4527 + name = "windows_x86_64_gnullvm" 4528 + version = "0.52.6" 4529 + source = "registry+https://github.com/rust-lang/crates.io-index" 4530 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 4531 + 4532 + [[package]] 4533 + name = "windows_x86_64_gnullvm" 4534 + version = "0.53.1" 4535 + source = "registry+https://github.com/rust-lang/crates.io-index" 4536 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 4537 + 4538 + [[package]] 4539 + name = "windows_x86_64_msvc" 4540 + version = "0.42.2" 4541 + source = "registry+https://github.com/rust-lang/crates.io-index" 4542 + checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 4543 + 4544 + [[package]] 4545 + name = "windows_x86_64_msvc" 4546 + version = "0.48.5" 4547 + source = "registry+https://github.com/rust-lang/crates.io-index" 4548 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4549 + 4550 + [[package]] 4551 + name = "windows_x86_64_msvc" 4552 + version = "0.52.6" 4553 + source = "registry+https://github.com/rust-lang/crates.io-index" 4554 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 4555 + 4556 + [[package]] 4557 + name = "windows_x86_64_msvc" 4558 + version = "0.53.1" 4559 + source = "registry+https://github.com/rust-lang/crates.io-index" 4560 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 4561 + 4562 + [[package]] 4563 + name = "winreg" 4564 + version = "0.50.0" 4565 + source = "registry+https://github.com/rust-lang/crates.io-index" 4566 + checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 4567 + dependencies = [ 4568 + "cfg-if", 4569 + "windows-sys 0.48.0", 4570 + ] 4571 + 4572 + [[package]] 4573 + name = "wisp-cli" 4574 + version = "0.1.0" 4575 + dependencies = [ 4576 + "base64 0.22.1", 4577 + "bytes", 4578 + "clap", 4579 + "flate2", 4580 + "jacquard", 4581 + "jacquard-api", 4582 + "jacquard-common", 4583 + "jacquard-derive", 4584 + "jacquard-identity", 4585 + "jacquard-lexicon", 4586 + "jacquard-oauth", 4587 + "miette", 4588 + "mime_guess", 4589 + "reqwest", 4590 + "rustversion", 4591 + "serde", 4592 + "serde_json", 4593 + "shellexpand", 4594 + "tokio", 4595 + "walkdir", 4596 + ] 4597 + 4598 + [[package]] 4599 + name = "wit-bindgen" 4600 + version = "0.46.0" 4601 + source = "registry+https://github.com/rust-lang/crates.io-index" 4602 + checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 4603 + 4604 + [[package]] 4605 + name = "writeable" 4606 + version = "0.6.2" 4607 + source = "registry+https://github.com/rust-lang/crates.io-index" 4608 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 4609 + 4610 + [[package]] 4611 + name = "xml5ever" 4612 + version = "0.18.1" 4613 + source = "registry+https://github.com/rust-lang/crates.io-index" 4614 + checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" 4615 + dependencies = [ 4616 + "log", 4617 + "mac", 4618 + "markup5ever", 4619 + ] 4620 + 4621 + [[package]] 4622 + name = "yansi" 4623 + version = "1.0.1" 4624 + source = "registry+https://github.com/rust-lang/crates.io-index" 4625 + checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 4626 + 4627 + [[package]] 4628 + name = "yoke" 4629 + version = "0.8.1" 4630 + source = "registry+https://github.com/rust-lang/crates.io-index" 4631 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 4632 + dependencies = [ 4633 + "stable_deref_trait", 4634 + "yoke-derive", 4635 + "zerofrom", 4636 + ] 4637 + 4638 + [[package]] 4639 + name = "yoke-derive" 4640 + version = "0.8.1" 4641 + source = "registry+https://github.com/rust-lang/crates.io-index" 4642 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 4643 + dependencies = [ 4644 + "proc-macro2", 4645 + "quote", 4646 + "syn 2.0.108", 4647 + "synstructure", 4648 + ] 4649 + 4650 + [[package]] 4651 + name = "zerocopy" 4652 + version = "0.8.27" 4653 + source = "registry+https://github.com/rust-lang/crates.io-index" 4654 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 4655 + dependencies = [ 4656 + "zerocopy-derive", 4657 + ] 4658 + 4659 + [[package]] 4660 + name = "zerocopy-derive" 4661 + version = "0.8.27" 4662 + source = "registry+https://github.com/rust-lang/crates.io-index" 4663 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 4664 + dependencies = [ 4665 + "proc-macro2", 4666 + "quote", 4667 + "syn 2.0.108", 4668 + ] 4669 + 4670 + [[package]] 4671 + name = "zerofrom" 4672 + version = "0.1.6" 4673 + source = "registry+https://github.com/rust-lang/crates.io-index" 4674 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 4675 + dependencies = [ 4676 + "zerofrom-derive", 4677 + ] 4678 + 4679 + [[package]] 4680 + name = "zerofrom-derive" 4681 + version = "0.1.6" 4682 + source = "registry+https://github.com/rust-lang/crates.io-index" 4683 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 4684 + dependencies = [ 4685 + "proc-macro2", 4686 + "quote", 4687 + "syn 2.0.108", 4688 + "synstructure", 4689 + ] 4690 + 4691 + [[package]] 4692 + name = "zeroize" 4693 + version = "1.8.2" 4694 + source = "registry+https://github.com/rust-lang/crates.io-index" 4695 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 4696 + dependencies = [ 4697 + "serde", 4698 + ] 4699 + 4700 + [[package]] 4701 + name = "zerotrie" 4702 + version = "0.2.3" 4703 + source = "registry+https://github.com/rust-lang/crates.io-index" 4704 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 4705 + dependencies = [ 4706 + "displaydoc", 4707 + "yoke", 4708 + "zerofrom", 4709 + ] 4710 + 4711 + [[package]] 4712 + name = "zerovec" 4713 + version = "0.11.5" 4714 + source = "registry+https://github.com/rust-lang/crates.io-index" 4715 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 4716 + dependencies = [ 4717 + "yoke", 4718 + "zerofrom", 4719 + "zerovec-derive", 4720 + ] 4721 + 4722 + [[package]] 4723 + name = "zerovec-derive" 4724 + version = "0.11.2" 4725 + source = "registry+https://github.com/rust-lang/crates.io-index" 4726 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 4727 + dependencies = [ 4728 + "proc-macro2", 4729 + "quote", 4730 + "syn 2.0.108", 4731 + ]
+30
cli/Cargo.toml
··· 1 + [package] 2 + name = "wisp-cli" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [features] 7 + default = ["place_wisp"] 8 + place_wisp = [] 9 + 10 + [dependencies] 11 + jacquard = { path = "jacquard/crates/jacquard", features = ["loopback"] } 12 + jacquard-oauth = { path = "jacquard/crates/jacquard-oauth" } 13 + jacquard-api = { path = "jacquard/crates/jacquard-api" } 14 + jacquard-common = { path = "jacquard/crates/jacquard-common" } 15 + jacquard-identity = { path = "jacquard/crates/jacquard-identity", features = ["dns"] } 16 + jacquard-derive = { path = "jacquard/crates/jacquard-derive" } 17 + jacquard-lexicon = { path = "jacquard/crates/jacquard-lexicon" } 18 + clap = { version = "4.5.51", features = ["derive"] } 19 + tokio = { version = "1.48", features = ["full"] } 20 + miette = { version = "7.6.0", features = ["fancy"] } 21 + serde_json = "1.0.145" 22 + serde = { version = "1.0", features = ["derive"] } 23 + shellexpand = "3.1.1" 24 + reqwest = "0.12" 25 + rustversion = "1.0" 26 + flate2 = "1.0" 27 + base64 = "0.22" 28 + walkdir = "2.5" 29 + mime_guess = "2.0" 30 + bytes = "1.10"
+51
cli/lexicons/place/wisp/fs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "place.wisp.fs", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "Virtual filesystem manifest for a Wisp site", 8 + "record": { 9 + "type": "object", 10 + "required": ["site", "root", "createdAt"], 11 + "properties": { 12 + "site": { "type": "string" }, 13 + "root": { "type": "ref", "ref": "#directory" }, 14 + "fileCount": { "type": "integer", "minimum": 0, "maximum": 1000 }, 15 + "createdAt": { "type": "string", "format": "datetime" } 16 + } 17 + } 18 + }, 19 + "file": { 20 + "type": "object", 21 + "required": ["type", "blob"], 22 + "properties": { 23 + "type": { "type": "string", "const": "file" }, 24 + "blob": { "type": "blob", "accept": ["*/*"], "maxSize": 1000000, "description": "Content blob ref" }, 25 + "encoding": { "type": "string", "enum": ["gzip"], "description": "Content encoding (e.g., gzip for compressed files)" }, 26 + "mimeType": { "type": "string", "description": "Original MIME type before compression" }, 27 + "base64": { "type": "boolean", "description": "True if blob content is base64-encoded (used to bypass PDS content sniffing)" } 28 + } 29 + }, 30 + "directory": { 31 + "type": "object", 32 + "required": ["type", "entries"], 33 + "properties": { 34 + "type": { "type": "string", "const": "directory" }, 35 + "entries": { 36 + "type": "array", 37 + "maxLength": 500, 38 + "items": { "type": "ref", "ref": "#entry" } 39 + } 40 + } 41 + }, 42 + "entry": { 43 + "type": "object", 44 + "required": ["name", "node"], 45 + "properties": { 46 + "name": { "type": "string", "maxLength": 255 }, 47 + "node": { "type": "union", "refs": ["#file", "#directory"] } 48 + } 49 + } 50 + } 51 + }
+43
cli/src/builder_types.rs
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + /// Marker type indicating a builder field has been set 7 + pub struct Set<T>(pub T); 8 + impl<T> Set<T> { 9 + /// Extract the inner value 10 + #[inline] 11 + pub fn into_inner(self) -> T { 12 + self.0 13 + } 14 + } 15 + 16 + /// Marker type indicating a builder field has not been set 17 + pub struct Unset; 18 + /// Trait indicating a builder field is set (has a value) 19 + #[rustversion::attr( 20 + since(1.78.0), 21 + diagnostic::on_unimplemented( 22 + message = "the field `{Self}` was not set, but this method requires it to be set", 23 + label = "the field `{Self}` was not set" 24 + ) 25 + )] 26 + pub trait IsSet: private::Sealed {} 27 + /// Trait indicating a builder field is unset (no value yet) 28 + #[rustversion::attr( 29 + since(1.78.0), 30 + diagnostic::on_unimplemented( 31 + message = "the field `{Self}` was already set, but this method requires it to be unset", 32 + label = "the field `{Self}` was already set" 33 + ) 34 + )] 35 + pub trait IsUnset: private::Sealed {} 36 + impl<T> IsSet for Set<T> {} 37 + impl IsUnset for Unset {} 38 + mod private { 39 + /// Sealed trait to prevent external implementations 40 + pub trait Sealed {} 41 + impl<T> Sealed for super::Set<T> {} 42 + impl Sealed for super::Unset {} 43 + }
+191
cli/src/main.rs
··· 1 + mod builder_types; 2 + mod place_wisp; 3 + 4 + use clap::Parser; 5 + use jacquard::CowStr; 6 + use jacquard::client::{Agent, FileAuthStore, AgentSessionExt}; 7 + use jacquard::oauth::client::OAuthClient; 8 + use jacquard::oauth::loopback::LoopbackConfig; 9 + use jacquard::prelude::IdentityResolver; 10 + use jacquard_common::types::string::{Datetime, Rkey, RecordKey}; 11 + use jacquard_common::types::blob::MimeType; 12 + use miette::IntoDiagnostic; 13 + use std::path::{Path, PathBuf}; 14 + use flate2::Compression; 15 + use flate2::write::GzEncoder; 16 + use std::io::Write; 17 + use base64::Engine; 18 + 19 + use place_wisp::fs::*; 20 + 21 + #[derive(Parser, Debug)] 22 + #[command(author, version, about = "Deploy a static site to wisp.place")] 23 + struct Args { 24 + /// Handle (e.g., alice.bsky.social), DID, or PDS URL 25 + input: CowStr<'static>, 26 + 27 + /// Path to the directory containing your static site 28 + #[arg(short, long, default_value = ".")] 29 + path: PathBuf, 30 + 31 + /// Site name (defaults to directory name) 32 + #[arg(short, long)] 33 + site: Option<String>, 34 + 35 + /// Path to auth store file (will be created if missing) 36 + #[arg(long, default_value = "/tmp/wisp-oauth-session.json")] 37 + store: String, 38 + } 39 + 40 + #[tokio::main] 41 + async fn main() -> miette::Result<()> { 42 + let args = Args::parse(); 43 + 44 + let oauth = OAuthClient::with_default_config(FileAuthStore::new(&args.store)); 45 + let session = oauth 46 + .login_with_local_server(args.input, Default::default(), LoopbackConfig::default()) 47 + .await?; 48 + 49 + let agent: Agent<_> = Agent::from(session); 50 + 51 + // Verify the path exists 52 + if !args.path.exists() { 53 + return Err(miette::miette!("Path does not exist: {}", args.path.display())); 54 + } 55 + 56 + // Get site name 57 + let site_name = args.site.unwrap_or_else(|| { 58 + args.path 59 + .file_name() 60 + .and_then(|n| n.to_str()) 61 + .unwrap_or("site") 62 + .to_string() 63 + }); 64 + 65 + println!("Deploying site '{}'...", site_name); 66 + 67 + // Build directory tree 68 + let root_dir = build_directory(&agent, &args.path).await?; 69 + 70 + // Count total files 71 + let file_count = count_files(&root_dir); 72 + 73 + // Create the Fs record 74 + let fs_record = Fs::new() 75 + .site(CowStr::from(site_name.clone())) 76 + .root(root_dir) 77 + .file_count(file_count as i64) 78 + .created_at(Datetime::now()) 79 + .build(); 80 + 81 + // Use site name as the record key 82 + let rkey = Rkey::new(&site_name).map_err(|e| miette::miette!("Invalid rkey: {}", e))?; 83 + let output = agent.put_record(RecordKey::from(rkey), fs_record).await?; 84 + 85 + // Extract DID from the AT URI (format: at://did:plc:xxx/collection/rkey) 86 + let uri_str = output.uri.to_string(); 87 + let did = uri_str 88 + .strip_prefix("at://") 89 + .and_then(|s| s.split('/').next()) 90 + .ok_or_else(|| miette::miette!("Failed to parse DID from URI"))?; 91 + 92 + println!("Deployed site '{}': {}", site_name, output.uri); 93 + println!("Available at: https://sites.wisp.place/{}/{}", did, site_name); 94 + 95 + Ok(()) 96 + } 97 + 98 + /// Recursively build a Directory from a filesystem path 99 + fn build_directory<'a>( 100 + agent: &'a Agent<impl jacquard::client::AgentSession + IdentityResolver + 'a>, 101 + dir_path: &'a Path, 102 + ) -> std::pin::Pin<Box<dyn std::future::Future<Output = miette::Result<Directory<'static>>> + 'a>> 103 + { 104 + Box::pin(async move { 105 + let mut entries = Vec::new(); 106 + 107 + for entry in std::fs::read_dir(dir_path).into_diagnostic()? { 108 + let entry = entry.into_diagnostic()?; 109 + let path = entry.path(); 110 + let name = entry.file_name(); 111 + let name_str = name.to_str() 112 + .ok_or_else(|| miette::miette!("Invalid filename: {:?}", name))?; 113 + 114 + // Skip hidden files 115 + if name_str.starts_with('.') { 116 + continue; 117 + } 118 + 119 + let metadata = entry.metadata().into_diagnostic()?; 120 + 121 + if metadata.is_file() { 122 + let file_node = process_file(agent, &path).await?; 123 + entries.push(Entry::new() 124 + .name(CowStr::from(name_str.to_string())) 125 + .node(EntryNode::File(Box::new(file_node))) 126 + .build()); 127 + } else if metadata.is_dir() { 128 + let subdir = build_directory(agent, &path).await?; 129 + entries.push(Entry::new() 130 + .name(CowStr::from(name_str.to_string())) 131 + .node(EntryNode::Directory(Box::new(subdir))) 132 + .build()); 133 + } 134 + } 135 + 136 + Ok(Directory::new() 137 + .r#type(CowStr::from("directory")) 138 + .entries(entries) 139 + .build()) 140 + }) 141 + } 142 + 143 + /// Process a single file: gzip -> base64 -> upload blob 144 + async fn process_file( 145 + agent: &Agent<impl jacquard::client::AgentSession + IdentityResolver>, 146 + file_path: &Path, 147 + ) -> miette::Result<File<'static>> 148 + { 149 + // Read file 150 + let file_data = std::fs::read(file_path).into_diagnostic()?; 151 + 152 + // Detect original MIME type 153 + let original_mime = mime_guess::from_path(file_path) 154 + .first_or_octet_stream() 155 + .to_string(); 156 + 157 + // Gzip compress 158 + let mut encoder = GzEncoder::new(Vec::new(), Compression::default()); 159 + encoder.write_all(&file_data).into_diagnostic()?; 160 + let gzipped = encoder.finish().into_diagnostic()?; 161 + 162 + // Base64 encode the gzipped data 163 + let base64_bytes = base64::prelude::BASE64_STANDARD.encode(&gzipped).into_bytes(); 164 + 165 + // Upload blob as octet-stream 166 + let blob = agent.upload_blob( 167 + base64_bytes, 168 + MimeType::new_static("application/octet-stream"), 169 + ).await?; 170 + 171 + Ok(File::new() 172 + .r#type(CowStr::from("file")) 173 + .blob(blob) 174 + .encoding(CowStr::from("gzip")) 175 + .mime_type(CowStr::from(original_mime)) 176 + .base64(true) 177 + .build()) 178 + } 179 + 180 + /// Count total files in a directory tree 181 + fn count_files(dir: &Directory) -> usize { 182 + let mut count = 0; 183 + for entry in &dir.entries { 184 + match &entry.node { 185 + EntryNode::File(_) => count += 1, 186 + EntryNode::Directory(subdir) => count += count_files(subdir), 187 + _ => {} // Unknown variants 188 + } 189 + } 190 + count 191 + }
+9
cli/src/mod.rs
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + pub mod builder_types; 7 + 8 + #[cfg(feature = "place_wisp")] 9 + pub mod place_wisp;
+6
cli/src/place_wisp.rs
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + pub mod fs;
+1230
cli/src/place_wisp/fs.rs
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: place.wisp.fs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[serde(rename_all = "camelCase")] 19 + pub struct Directory<'a> { 20 + #[serde(borrow)] 21 + pub entries: Vec<crate::place_wisp::fs::Entry<'a>>, 22 + #[serde(borrow)] 23 + pub r#type: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + pub mod directory_state { 27 + 28 + pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 29 + #[allow(unused)] 30 + use ::core::marker::PhantomData; 31 + mod sealed { 32 + pub trait Sealed {} 33 + } 34 + /// State trait tracking which required fields have been set 35 + pub trait State: sealed::Sealed { 36 + type Type; 37 + type Entries; 38 + } 39 + /// Empty state - all required fields are unset 40 + pub struct Empty(()); 41 + impl sealed::Sealed for Empty {} 42 + impl State for Empty { 43 + type Type = Unset; 44 + type Entries = Unset; 45 + } 46 + ///State transition - sets the `type` field to Set 47 + pub struct SetType<S: State = Empty>(PhantomData<fn() -> S>); 48 + impl<S: State> sealed::Sealed for SetType<S> {} 49 + impl<S: State> State for SetType<S> { 50 + type Type = Set<members::r#type>; 51 + type Entries = S::Entries; 52 + } 53 + ///State transition - sets the `entries` field to Set 54 + pub struct SetEntries<S: State = Empty>(PhantomData<fn() -> S>); 55 + impl<S: State> sealed::Sealed for SetEntries<S> {} 56 + impl<S: State> State for SetEntries<S> { 57 + type Type = S::Type; 58 + type Entries = Set<members::entries>; 59 + } 60 + /// Marker types for field names 61 + #[allow(non_camel_case_types)] 62 + pub mod members { 63 + ///Marker type for the `type` field 64 + pub struct r#type(()); 65 + ///Marker type for the `entries` field 66 + pub struct entries(()); 67 + } 68 + } 69 + 70 + /// Builder for constructing an instance of this type 71 + pub struct DirectoryBuilder<'a, S: directory_state::State> { 72 + _phantom_state: ::core::marker::PhantomData<fn() -> S>, 73 + __unsafe_private_named: ( 74 + ::core::option::Option<Vec<crate::place_wisp::fs::Entry<'a>>>, 75 + ::core::option::Option<jacquard_common::CowStr<'a>>, 76 + ), 77 + _phantom: ::core::marker::PhantomData<&'a ()>, 78 + } 79 + 80 + impl<'a> Directory<'a> { 81 + /// Create a new builder for this type 82 + pub fn new() -> DirectoryBuilder<'a, directory_state::Empty> { 83 + DirectoryBuilder::new() 84 + } 85 + } 86 + 87 + impl<'a> DirectoryBuilder<'a, directory_state::Empty> { 88 + /// Create a new builder with all fields unset 89 + pub fn new() -> Self { 90 + DirectoryBuilder { 91 + _phantom_state: ::core::marker::PhantomData, 92 + __unsafe_private_named: (None, None), 93 + _phantom: ::core::marker::PhantomData, 94 + } 95 + } 96 + } 97 + 98 + impl<'a, S> DirectoryBuilder<'a, S> 99 + where 100 + S: directory_state::State, 101 + S::Entries: directory_state::IsUnset, 102 + { 103 + /// Set the `entries` field (required) 104 + pub fn entries( 105 + mut self, 106 + value: impl Into<Vec<crate::place_wisp::fs::Entry<'a>>>, 107 + ) -> DirectoryBuilder<'a, directory_state::SetEntries<S>> { 108 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 109 + DirectoryBuilder { 110 + _phantom_state: ::core::marker::PhantomData, 111 + __unsafe_private_named: self.__unsafe_private_named, 112 + _phantom: ::core::marker::PhantomData, 113 + } 114 + } 115 + } 116 + 117 + impl<'a, S> DirectoryBuilder<'a, S> 118 + where 119 + S: directory_state::State, 120 + S::Type: directory_state::IsUnset, 121 + { 122 + /// Set the `type` field (required) 123 + pub fn r#type( 124 + mut self, 125 + value: impl Into<jacquard_common::CowStr<'a>>, 126 + ) -> DirectoryBuilder<'a, directory_state::SetType<S>> { 127 + self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 128 + DirectoryBuilder { 129 + _phantom_state: ::core::marker::PhantomData, 130 + __unsafe_private_named: self.__unsafe_private_named, 131 + _phantom: ::core::marker::PhantomData, 132 + } 133 + } 134 + } 135 + 136 + impl<'a, S> DirectoryBuilder<'a, S> 137 + where 138 + S: directory_state::State, 139 + S::Type: directory_state::IsSet, 140 + S::Entries: directory_state::IsSet, 141 + { 142 + /// Build the final struct 143 + pub fn build(self) -> Directory<'a> { 144 + Directory { 145 + entries: self.__unsafe_private_named.0.unwrap(), 146 + r#type: self.__unsafe_private_named.1.unwrap(), 147 + extra_data: Default::default(), 148 + } 149 + } 150 + /// Build the final struct with custom extra_data 151 + pub fn build_with_data( 152 + self, 153 + extra_data: std::collections::BTreeMap< 154 + jacquard_common::smol_str::SmolStr, 155 + jacquard_common::types::value::Data<'a>, 156 + >, 157 + ) -> Directory<'a> { 158 + Directory { 159 + entries: self.__unsafe_private_named.0.unwrap(), 160 + r#type: self.__unsafe_private_named.1.unwrap(), 161 + extra_data: Some(extra_data), 162 + } 163 + } 164 + } 165 + 166 + fn lexicon_doc_place_wisp_fs() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 167 + ::jacquard_lexicon::lexicon::LexiconDoc { 168 + lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1, 169 + id: ::jacquard_common::CowStr::new_static("place.wisp.fs"), 170 + revision: None, 171 + description: None, 172 + defs: { 173 + let mut map = ::std::collections::BTreeMap::new(); 174 + map.insert( 175 + ::jacquard_common::smol_str::SmolStr::new_static("directory"), 176 + ::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject { 177 + description: None, 178 + required: Some( 179 + vec![ 180 + ::jacquard_common::smol_str::SmolStr::new_static("type"), 181 + ::jacquard_common::smol_str::SmolStr::new_static("entries") 182 + ], 183 + ), 184 + nullable: None, 185 + properties: { 186 + #[allow(unused_mut)] 187 + let mut map = ::std::collections::BTreeMap::new(); 188 + map.insert( 189 + ::jacquard_common::smol_str::SmolStr::new_static("entries"), 190 + ::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray { 191 + description: None, 192 + items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef { 193 + description: None, 194 + r#ref: ::jacquard_common::CowStr::new_static("#entry"), 195 + }), 196 + min_length: None, 197 + max_length: Some(500usize), 198 + }), 199 + ); 200 + map.insert( 201 + ::jacquard_common::smol_str::SmolStr::new_static("type"), 202 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 203 + description: None, 204 + format: None, 205 + default: None, 206 + min_length: None, 207 + max_length: None, 208 + min_graphemes: None, 209 + max_graphemes: None, 210 + r#enum: None, 211 + r#const: None, 212 + known_values: None, 213 + }), 214 + ); 215 + map 216 + }, 217 + }), 218 + ); 219 + map.insert( 220 + ::jacquard_common::smol_str::SmolStr::new_static("entry"), 221 + ::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject { 222 + description: None, 223 + required: Some( 224 + vec![ 225 + ::jacquard_common::smol_str::SmolStr::new_static("name"), 226 + ::jacquard_common::smol_str::SmolStr::new_static("node") 227 + ], 228 + ), 229 + nullable: None, 230 + properties: { 231 + #[allow(unused_mut)] 232 + let mut map = ::std::collections::BTreeMap::new(); 233 + map.insert( 234 + ::jacquard_common::smol_str::SmolStr::new_static("name"), 235 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 236 + description: None, 237 + format: None, 238 + default: None, 239 + min_length: None, 240 + max_length: Some(255usize), 241 + min_graphemes: None, 242 + max_graphemes: None, 243 + r#enum: None, 244 + r#const: None, 245 + known_values: None, 246 + }), 247 + ); 248 + map.insert( 249 + ::jacquard_common::smol_str::SmolStr::new_static("node"), 250 + ::jacquard_lexicon::lexicon::LexObjectProperty::Union(::jacquard_lexicon::lexicon::LexRefUnion { 251 + description: None, 252 + refs: vec![ 253 + ::jacquard_common::CowStr::new_static("#file"), 254 + ::jacquard_common::CowStr::new_static("#directory") 255 + ], 256 + closed: None, 257 + }), 258 + ); 259 + map 260 + }, 261 + }), 262 + ); 263 + map.insert( 264 + ::jacquard_common::smol_str::SmolStr::new_static("file"), 265 + ::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject { 266 + description: None, 267 + required: Some( 268 + vec![ 269 + ::jacquard_common::smol_str::SmolStr::new_static("type"), 270 + ::jacquard_common::smol_str::SmolStr::new_static("blob") 271 + ], 272 + ), 273 + nullable: None, 274 + properties: { 275 + #[allow(unused_mut)] 276 + let mut map = ::std::collections::BTreeMap::new(); 277 + map.insert( 278 + ::jacquard_common::smol_str::SmolStr::new_static("base64"), 279 + ::jacquard_lexicon::lexicon::LexObjectProperty::Boolean(::jacquard_lexicon::lexicon::LexBoolean { 280 + description: None, 281 + default: None, 282 + r#const: None, 283 + }), 284 + ); 285 + map.insert( 286 + ::jacquard_common::smol_str::SmolStr::new_static("blob"), 287 + ::jacquard_lexicon::lexicon::LexObjectProperty::Blob(::jacquard_lexicon::lexicon::LexBlob { 288 + description: None, 289 + accept: None, 290 + max_size: None, 291 + }), 292 + ); 293 + map.insert( 294 + ::jacquard_common::smol_str::SmolStr::new_static("encoding"), 295 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 296 + description: Some( 297 + ::jacquard_common::CowStr::new_static( 298 + "Content encoding (e.g., gzip for compressed files)", 299 + ), 300 + ), 301 + format: None, 302 + default: None, 303 + min_length: None, 304 + max_length: None, 305 + min_graphemes: None, 306 + max_graphemes: None, 307 + r#enum: None, 308 + r#const: None, 309 + known_values: None, 310 + }), 311 + ); 312 + map.insert( 313 + ::jacquard_common::smol_str::SmolStr::new_static("mimeType"), 314 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 315 + description: Some( 316 + ::jacquard_common::CowStr::new_static( 317 + "Original MIME type before compression", 318 + ), 319 + ), 320 + format: None, 321 + default: None, 322 + min_length: None, 323 + max_length: None, 324 + min_graphemes: None, 325 + max_graphemes: None, 326 + r#enum: None, 327 + r#const: None, 328 + known_values: None, 329 + }), 330 + ); 331 + map.insert( 332 + ::jacquard_common::smol_str::SmolStr::new_static("type"), 333 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 334 + description: None, 335 + format: None, 336 + default: None, 337 + min_length: None, 338 + max_length: None, 339 + min_graphemes: None, 340 + max_graphemes: None, 341 + r#enum: None, 342 + r#const: None, 343 + known_values: None, 344 + }), 345 + ); 346 + map 347 + }, 348 + }), 349 + ); 350 + map.insert( 351 + ::jacquard_common::smol_str::SmolStr::new_static("main"), 352 + ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord { 353 + description: Some( 354 + ::jacquard_common::CowStr::new_static( 355 + "Virtual filesystem manifest for a Wisp site", 356 + ), 357 + ), 358 + key: None, 359 + record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject { 360 + description: None, 361 + required: Some( 362 + vec![ 363 + ::jacquard_common::smol_str::SmolStr::new_static("site"), 364 + ::jacquard_common::smol_str::SmolStr::new_static("root"), 365 + ::jacquard_common::smol_str::SmolStr::new_static("createdAt") 366 + ], 367 + ), 368 + nullable: None, 369 + properties: { 370 + #[allow(unused_mut)] 371 + let mut map = ::std::collections::BTreeMap::new(); 372 + map.insert( 373 + ::jacquard_common::smol_str::SmolStr::new_static( 374 + "createdAt", 375 + ), 376 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 377 + description: None, 378 + format: Some( 379 + ::jacquard_lexicon::lexicon::LexStringFormat::Datetime, 380 + ), 381 + default: None, 382 + min_length: None, 383 + max_length: None, 384 + min_graphemes: None, 385 + max_graphemes: None, 386 + r#enum: None, 387 + r#const: None, 388 + known_values: None, 389 + }), 390 + ); 391 + map.insert( 392 + ::jacquard_common::smol_str::SmolStr::new_static( 393 + "fileCount", 394 + ), 395 + ::jacquard_lexicon::lexicon::LexObjectProperty::Integer(::jacquard_lexicon::lexicon::LexInteger { 396 + description: None, 397 + default: None, 398 + minimum: Some(0i64), 399 + maximum: Some(1000i64), 400 + r#enum: None, 401 + r#const: None, 402 + }), 403 + ); 404 + map.insert( 405 + ::jacquard_common::smol_str::SmolStr::new_static("root"), 406 + ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef { 407 + description: None, 408 + r#ref: ::jacquard_common::CowStr::new_static("#directory"), 409 + }), 410 + ); 411 + map.insert( 412 + ::jacquard_common::smol_str::SmolStr::new_static("site"), 413 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 414 + description: None, 415 + format: None, 416 + default: None, 417 + min_length: None, 418 + max_length: None, 419 + min_graphemes: None, 420 + max_graphemes: None, 421 + r#enum: None, 422 + r#const: None, 423 + known_values: None, 424 + }), 425 + ); 426 + map 427 + }, 428 + }), 429 + }), 430 + ); 431 + map 432 + }, 433 + } 434 + } 435 + 436 + impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Directory<'a> { 437 + fn nsid() -> &'static str { 438 + "place.wisp.fs" 439 + } 440 + fn def_name() -> &'static str { 441 + "directory" 442 + } 443 + fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 444 + lexicon_doc_place_wisp_fs() 445 + } 446 + fn validate( 447 + &self, 448 + ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> { 449 + { 450 + let value = &self.entries; 451 + #[allow(unused_comparisons)] 452 + if value.len() > 500usize { 453 + return Err(::jacquard_lexicon::validation::ConstraintError::MaxLength { 454 + path: ::jacquard_lexicon::validation::ValidationPath::from_field( 455 + "entries", 456 + ), 457 + max: 500usize, 458 + actual: value.len(), 459 + }); 460 + } 461 + } 462 + Ok(()) 463 + } 464 + } 465 + 466 + #[jacquard_derive::lexicon] 467 + #[derive( 468 + serde::Serialize, 469 + serde::Deserialize, 470 + Debug, 471 + Clone, 472 + PartialEq, 473 + Eq, 474 + jacquard_derive::IntoStatic 475 + )] 476 + #[serde(rename_all = "camelCase")] 477 + pub struct Entry<'a> { 478 + #[serde(borrow)] 479 + pub name: jacquard_common::CowStr<'a>, 480 + #[serde(borrow)] 481 + pub node: EntryNode<'a>, 482 + } 483 + 484 + pub mod entry_state { 485 + 486 + pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 487 + #[allow(unused)] 488 + use ::core::marker::PhantomData; 489 + mod sealed { 490 + pub trait Sealed {} 491 + } 492 + /// State trait tracking which required fields have been set 493 + pub trait State: sealed::Sealed { 494 + type Name; 495 + type Node; 496 + } 497 + /// Empty state - all required fields are unset 498 + pub struct Empty(()); 499 + impl sealed::Sealed for Empty {} 500 + impl State for Empty { 501 + type Name = Unset; 502 + type Node = Unset; 503 + } 504 + ///State transition - sets the `name` field to Set 505 + pub struct SetName<S: State = Empty>(PhantomData<fn() -> S>); 506 + impl<S: State> sealed::Sealed for SetName<S> {} 507 + impl<S: State> State for SetName<S> { 508 + type Name = Set<members::name>; 509 + type Node = S::Node; 510 + } 511 + ///State transition - sets the `node` field to Set 512 + pub struct SetNode<S: State = Empty>(PhantomData<fn() -> S>); 513 + impl<S: State> sealed::Sealed for SetNode<S> {} 514 + impl<S: State> State for SetNode<S> { 515 + type Name = S::Name; 516 + type Node = Set<members::node>; 517 + } 518 + /// Marker types for field names 519 + #[allow(non_camel_case_types)] 520 + pub mod members { 521 + ///Marker type for the `name` field 522 + pub struct name(()); 523 + ///Marker type for the `node` field 524 + pub struct node(()); 525 + } 526 + } 527 + 528 + /// Builder for constructing an instance of this type 529 + pub struct EntryBuilder<'a, S: entry_state::State> { 530 + _phantom_state: ::core::marker::PhantomData<fn() -> S>, 531 + __unsafe_private_named: ( 532 + ::core::option::Option<jacquard_common::CowStr<'a>>, 533 + ::core::option::Option<EntryNode<'a>>, 534 + ), 535 + _phantom: ::core::marker::PhantomData<&'a ()>, 536 + } 537 + 538 + impl<'a> Entry<'a> { 539 + /// Create a new builder for this type 540 + pub fn new() -> EntryBuilder<'a, entry_state::Empty> { 541 + EntryBuilder::new() 542 + } 543 + } 544 + 545 + impl<'a> EntryBuilder<'a, entry_state::Empty> { 546 + /// Create a new builder with all fields unset 547 + pub fn new() -> Self { 548 + EntryBuilder { 549 + _phantom_state: ::core::marker::PhantomData, 550 + __unsafe_private_named: (None, None), 551 + _phantom: ::core::marker::PhantomData, 552 + } 553 + } 554 + } 555 + 556 + impl<'a, S> EntryBuilder<'a, S> 557 + where 558 + S: entry_state::State, 559 + S::Name: entry_state::IsUnset, 560 + { 561 + /// Set the `name` field (required) 562 + pub fn name( 563 + mut self, 564 + value: impl Into<jacquard_common::CowStr<'a>>, 565 + ) -> EntryBuilder<'a, entry_state::SetName<S>> { 566 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 567 + EntryBuilder { 568 + _phantom_state: ::core::marker::PhantomData, 569 + __unsafe_private_named: self.__unsafe_private_named, 570 + _phantom: ::core::marker::PhantomData, 571 + } 572 + } 573 + } 574 + 575 + impl<'a, S> EntryBuilder<'a, S> 576 + where 577 + S: entry_state::State, 578 + S::Node: entry_state::IsUnset, 579 + { 580 + /// Set the `node` field (required) 581 + pub fn node( 582 + mut self, 583 + value: impl Into<EntryNode<'a>>, 584 + ) -> EntryBuilder<'a, entry_state::SetNode<S>> { 585 + self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 586 + EntryBuilder { 587 + _phantom_state: ::core::marker::PhantomData, 588 + __unsafe_private_named: self.__unsafe_private_named, 589 + _phantom: ::core::marker::PhantomData, 590 + } 591 + } 592 + } 593 + 594 + impl<'a, S> EntryBuilder<'a, S> 595 + where 596 + S: entry_state::State, 597 + S::Name: entry_state::IsSet, 598 + S::Node: entry_state::IsSet, 599 + { 600 + /// Build the final struct 601 + pub fn build(self) -> Entry<'a> { 602 + Entry { 603 + name: self.__unsafe_private_named.0.unwrap(), 604 + node: self.__unsafe_private_named.1.unwrap(), 605 + extra_data: Default::default(), 606 + } 607 + } 608 + /// Build the final struct with custom extra_data 609 + pub fn build_with_data( 610 + self, 611 + extra_data: std::collections::BTreeMap< 612 + jacquard_common::smol_str::SmolStr, 613 + jacquard_common::types::value::Data<'a>, 614 + >, 615 + ) -> Entry<'a> { 616 + Entry { 617 + name: self.__unsafe_private_named.0.unwrap(), 618 + node: self.__unsafe_private_named.1.unwrap(), 619 + extra_data: Some(extra_data), 620 + } 621 + } 622 + } 623 + 624 + #[jacquard_derive::open_union] 625 + #[derive( 626 + serde::Serialize, 627 + serde::Deserialize, 628 + Debug, 629 + Clone, 630 + PartialEq, 631 + Eq, 632 + jacquard_derive::IntoStatic 633 + )] 634 + #[serde(tag = "$type")] 635 + #[serde(bound(deserialize = "'de: 'a"))] 636 + pub enum EntryNode<'a> { 637 + #[serde(rename = "place.wisp.fs#file")] 638 + File(Box<crate::place_wisp::fs::File<'a>>), 639 + #[serde(rename = "place.wisp.fs#directory")] 640 + Directory(Box<crate::place_wisp::fs::Directory<'a>>), 641 + } 642 + 643 + impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Entry<'a> { 644 + fn nsid() -> &'static str { 645 + "place.wisp.fs" 646 + } 647 + fn def_name() -> &'static str { 648 + "entry" 649 + } 650 + fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 651 + lexicon_doc_place_wisp_fs() 652 + } 653 + fn validate( 654 + &self, 655 + ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> { 656 + { 657 + let value = &self.name; 658 + #[allow(unused_comparisons)] 659 + if <str>::len(value.as_ref()) > 255usize { 660 + return Err(::jacquard_lexicon::validation::ConstraintError::MaxLength { 661 + path: ::jacquard_lexicon::validation::ValidationPath::from_field( 662 + "name", 663 + ), 664 + max: 255usize, 665 + actual: <str>::len(value.as_ref()), 666 + }); 667 + } 668 + } 669 + Ok(()) 670 + } 671 + } 672 + 673 + #[jacquard_derive::lexicon] 674 + #[derive( 675 + serde::Serialize, 676 + serde::Deserialize, 677 + Debug, 678 + Clone, 679 + PartialEq, 680 + Eq, 681 + jacquard_derive::IntoStatic 682 + )] 683 + #[serde(rename_all = "camelCase")] 684 + pub struct File<'a> { 685 + /// True if blob content is base64-encoded (used to bypass PDS content sniffing) 686 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 687 + pub base64: Option<bool>, 688 + /// Content blob ref 689 + #[serde(borrow)] 690 + pub blob: jacquard_common::types::blob::BlobRef<'a>, 691 + /// Content encoding (e.g., gzip for compressed files) 692 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 693 + #[serde(borrow)] 694 + pub encoding: Option<jacquard_common::CowStr<'a>>, 695 + /// Original MIME type before compression 696 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 697 + #[serde(borrow)] 698 + pub mime_type: Option<jacquard_common::CowStr<'a>>, 699 + #[serde(borrow)] 700 + pub r#type: jacquard_common::CowStr<'a>, 701 + } 702 + 703 + pub mod file_state { 704 + 705 + pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 706 + #[allow(unused)] 707 + use ::core::marker::PhantomData; 708 + mod sealed { 709 + pub trait Sealed {} 710 + } 711 + /// State trait tracking which required fields have been set 712 + pub trait State: sealed::Sealed { 713 + type Type; 714 + type Blob; 715 + } 716 + /// Empty state - all required fields are unset 717 + pub struct Empty(()); 718 + impl sealed::Sealed for Empty {} 719 + impl State for Empty { 720 + type Type = Unset; 721 + type Blob = Unset; 722 + } 723 + ///State transition - sets the `type` field to Set 724 + pub struct SetType<S: State = Empty>(PhantomData<fn() -> S>); 725 + impl<S: State> sealed::Sealed for SetType<S> {} 726 + impl<S: State> State for SetType<S> { 727 + type Type = Set<members::r#type>; 728 + type Blob = S::Blob; 729 + } 730 + ///State transition - sets the `blob` field to Set 731 + pub struct SetBlob<S: State = Empty>(PhantomData<fn() -> S>); 732 + impl<S: State> sealed::Sealed for SetBlob<S> {} 733 + impl<S: State> State for SetBlob<S> { 734 + type Type = S::Type; 735 + type Blob = Set<members::blob>; 736 + } 737 + /// Marker types for field names 738 + #[allow(non_camel_case_types)] 739 + pub mod members { 740 + ///Marker type for the `type` field 741 + pub struct r#type(()); 742 + ///Marker type for the `blob` field 743 + pub struct blob(()); 744 + } 745 + } 746 + 747 + /// Builder for constructing an instance of this type 748 + pub struct FileBuilder<'a, S: file_state::State> { 749 + _phantom_state: ::core::marker::PhantomData<fn() -> S>, 750 + __unsafe_private_named: ( 751 + ::core::option::Option<bool>, 752 + ::core::option::Option<jacquard_common::types::blob::BlobRef<'a>>, 753 + ::core::option::Option<jacquard_common::CowStr<'a>>, 754 + ::core::option::Option<jacquard_common::CowStr<'a>>, 755 + ::core::option::Option<jacquard_common::CowStr<'a>>, 756 + ), 757 + _phantom: ::core::marker::PhantomData<&'a ()>, 758 + } 759 + 760 + impl<'a> File<'a> { 761 + /// Create a new builder for this type 762 + pub fn new() -> FileBuilder<'a, file_state::Empty> { 763 + FileBuilder::new() 764 + } 765 + } 766 + 767 + impl<'a> FileBuilder<'a, file_state::Empty> { 768 + /// Create a new builder with all fields unset 769 + pub fn new() -> Self { 770 + FileBuilder { 771 + _phantom_state: ::core::marker::PhantomData, 772 + __unsafe_private_named: (None, None, None, None, None), 773 + _phantom: ::core::marker::PhantomData, 774 + } 775 + } 776 + } 777 + 778 + impl<'a, S: file_state::State> FileBuilder<'a, S> { 779 + /// Set the `base64` field (optional) 780 + pub fn base64(mut self, value: impl Into<Option<bool>>) -> Self { 781 + self.__unsafe_private_named.0 = value.into(); 782 + self 783 + } 784 + /// Set the `base64` field to an Option value (optional) 785 + pub fn maybe_base64(mut self, value: Option<bool>) -> Self { 786 + self.__unsafe_private_named.0 = value; 787 + self 788 + } 789 + } 790 + 791 + impl<'a, S> FileBuilder<'a, S> 792 + where 793 + S: file_state::State, 794 + S::Blob: file_state::IsUnset, 795 + { 796 + /// Set the `blob` field (required) 797 + pub fn blob( 798 + mut self, 799 + value: impl Into<jacquard_common::types::blob::BlobRef<'a>>, 800 + ) -> FileBuilder<'a, file_state::SetBlob<S>> { 801 + self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 802 + FileBuilder { 803 + _phantom_state: ::core::marker::PhantomData, 804 + __unsafe_private_named: self.__unsafe_private_named, 805 + _phantom: ::core::marker::PhantomData, 806 + } 807 + } 808 + } 809 + 810 + impl<'a, S: file_state::State> FileBuilder<'a, S> { 811 + /// Set the `encoding` field (optional) 812 + pub fn encoding( 813 + mut self, 814 + value: impl Into<Option<jacquard_common::CowStr<'a>>>, 815 + ) -> Self { 816 + self.__unsafe_private_named.2 = value.into(); 817 + self 818 + } 819 + /// Set the `encoding` field to an Option value (optional) 820 + pub fn maybe_encoding(mut self, value: Option<jacquard_common::CowStr<'a>>) -> Self { 821 + self.__unsafe_private_named.2 = value; 822 + self 823 + } 824 + } 825 + 826 + impl<'a, S: file_state::State> FileBuilder<'a, S> { 827 + /// Set the `mimeType` field (optional) 828 + pub fn mime_type( 829 + mut self, 830 + value: impl Into<Option<jacquard_common::CowStr<'a>>>, 831 + ) -> Self { 832 + self.__unsafe_private_named.3 = value.into(); 833 + self 834 + } 835 + /// Set the `mimeType` field to an Option value (optional) 836 + pub fn maybe_mime_type( 837 + mut self, 838 + value: Option<jacquard_common::CowStr<'a>>, 839 + ) -> Self { 840 + self.__unsafe_private_named.3 = value; 841 + self 842 + } 843 + } 844 + 845 + impl<'a, S> FileBuilder<'a, S> 846 + where 847 + S: file_state::State, 848 + S::Type: file_state::IsUnset, 849 + { 850 + /// Set the `type` field (required) 851 + pub fn r#type( 852 + mut self, 853 + value: impl Into<jacquard_common::CowStr<'a>>, 854 + ) -> FileBuilder<'a, file_state::SetType<S>> { 855 + self.__unsafe_private_named.4 = ::core::option::Option::Some(value.into()); 856 + FileBuilder { 857 + _phantom_state: ::core::marker::PhantomData, 858 + __unsafe_private_named: self.__unsafe_private_named, 859 + _phantom: ::core::marker::PhantomData, 860 + } 861 + } 862 + } 863 + 864 + impl<'a, S> FileBuilder<'a, S> 865 + where 866 + S: file_state::State, 867 + S::Type: file_state::IsSet, 868 + S::Blob: file_state::IsSet, 869 + { 870 + /// Build the final struct 871 + pub fn build(self) -> File<'a> { 872 + File { 873 + base64: self.__unsafe_private_named.0, 874 + blob: self.__unsafe_private_named.1.unwrap(), 875 + encoding: self.__unsafe_private_named.2, 876 + mime_type: self.__unsafe_private_named.3, 877 + r#type: self.__unsafe_private_named.4.unwrap(), 878 + extra_data: Default::default(), 879 + } 880 + } 881 + /// Build the final struct with custom extra_data 882 + pub fn build_with_data( 883 + self, 884 + extra_data: std::collections::BTreeMap< 885 + jacquard_common::smol_str::SmolStr, 886 + jacquard_common::types::value::Data<'a>, 887 + >, 888 + ) -> File<'a> { 889 + File { 890 + base64: self.__unsafe_private_named.0, 891 + blob: self.__unsafe_private_named.1.unwrap(), 892 + encoding: self.__unsafe_private_named.2, 893 + mime_type: self.__unsafe_private_named.3, 894 + r#type: self.__unsafe_private_named.4.unwrap(), 895 + extra_data: Some(extra_data), 896 + } 897 + } 898 + } 899 + 900 + impl<'a> ::jacquard_lexicon::schema::LexiconSchema for File<'a> { 901 + fn nsid() -> &'static str { 902 + "place.wisp.fs" 903 + } 904 + fn def_name() -> &'static str { 905 + "file" 906 + } 907 + fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 908 + lexicon_doc_place_wisp_fs() 909 + } 910 + fn validate( 911 + &self, 912 + ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> { 913 + Ok(()) 914 + } 915 + } 916 + 917 + /// Virtual filesystem manifest for a Wisp site 918 + #[jacquard_derive::lexicon] 919 + #[derive( 920 + serde::Serialize, 921 + serde::Deserialize, 922 + Debug, 923 + Clone, 924 + PartialEq, 925 + Eq, 926 + jacquard_derive::IntoStatic 927 + )] 928 + #[serde(rename_all = "camelCase")] 929 + pub struct Fs<'a> { 930 + pub created_at: jacquard_common::types::string::Datetime, 931 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 932 + pub file_count: Option<i64>, 933 + #[serde(borrow)] 934 + pub root: crate::place_wisp::fs::Directory<'a>, 935 + #[serde(borrow)] 936 + pub site: jacquard_common::CowStr<'a>, 937 + } 938 + 939 + pub mod fs_state { 940 + 941 + pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 942 + #[allow(unused)] 943 + use ::core::marker::PhantomData; 944 + mod sealed { 945 + pub trait Sealed {} 946 + } 947 + /// State trait tracking which required fields have been set 948 + pub trait State: sealed::Sealed { 949 + type Site; 950 + type Root; 951 + type CreatedAt; 952 + } 953 + /// Empty state - all required fields are unset 954 + pub struct Empty(()); 955 + impl sealed::Sealed for Empty {} 956 + impl State for Empty { 957 + type Site = Unset; 958 + type Root = Unset; 959 + type CreatedAt = Unset; 960 + } 961 + ///State transition - sets the `site` field to Set 962 + pub struct SetSite<S: State = Empty>(PhantomData<fn() -> S>); 963 + impl<S: State> sealed::Sealed for SetSite<S> {} 964 + impl<S: State> State for SetSite<S> { 965 + type Site = Set<members::site>; 966 + type Root = S::Root; 967 + type CreatedAt = S::CreatedAt; 968 + } 969 + ///State transition - sets the `root` field to Set 970 + pub struct SetRoot<S: State = Empty>(PhantomData<fn() -> S>); 971 + impl<S: State> sealed::Sealed for SetRoot<S> {} 972 + impl<S: State> State for SetRoot<S> { 973 + type Site = S::Site; 974 + type Root = Set<members::root>; 975 + type CreatedAt = S::CreatedAt; 976 + } 977 + ///State transition - sets the `created_at` field to Set 978 + pub struct SetCreatedAt<S: State = Empty>(PhantomData<fn() -> S>); 979 + impl<S: State> sealed::Sealed for SetCreatedAt<S> {} 980 + impl<S: State> State for SetCreatedAt<S> { 981 + type Site = S::Site; 982 + type Root = S::Root; 983 + type CreatedAt = Set<members::created_at>; 984 + } 985 + /// Marker types for field names 986 + #[allow(non_camel_case_types)] 987 + pub mod members { 988 + ///Marker type for the `site` field 989 + pub struct site(()); 990 + ///Marker type for the `root` field 991 + pub struct root(()); 992 + ///Marker type for the `created_at` field 993 + pub struct created_at(()); 994 + } 995 + } 996 + 997 + /// Builder for constructing an instance of this type 998 + pub struct FsBuilder<'a, S: fs_state::State> { 999 + _phantom_state: ::core::marker::PhantomData<fn() -> S>, 1000 + __unsafe_private_named: ( 1001 + ::core::option::Option<jacquard_common::types::string::Datetime>, 1002 + ::core::option::Option<i64>, 1003 + ::core::option::Option<crate::place_wisp::fs::Directory<'a>>, 1004 + ::core::option::Option<jacquard_common::CowStr<'a>>, 1005 + ), 1006 + _phantom: ::core::marker::PhantomData<&'a ()>, 1007 + } 1008 + 1009 + impl<'a> Fs<'a> { 1010 + /// Create a new builder for this type 1011 + pub fn new() -> FsBuilder<'a, fs_state::Empty> { 1012 + FsBuilder::new() 1013 + } 1014 + } 1015 + 1016 + impl<'a> FsBuilder<'a, fs_state::Empty> { 1017 + /// Create a new builder with all fields unset 1018 + pub fn new() -> Self { 1019 + FsBuilder { 1020 + _phantom_state: ::core::marker::PhantomData, 1021 + __unsafe_private_named: (None, None, None, None), 1022 + _phantom: ::core::marker::PhantomData, 1023 + } 1024 + } 1025 + } 1026 + 1027 + impl<'a, S> FsBuilder<'a, S> 1028 + where 1029 + S: fs_state::State, 1030 + S::CreatedAt: fs_state::IsUnset, 1031 + { 1032 + /// Set the `createdAt` field (required) 1033 + pub fn created_at( 1034 + mut self, 1035 + value: impl Into<jacquard_common::types::string::Datetime>, 1036 + ) -> FsBuilder<'a, fs_state::SetCreatedAt<S>> { 1037 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 1038 + FsBuilder { 1039 + _phantom_state: ::core::marker::PhantomData, 1040 + __unsafe_private_named: self.__unsafe_private_named, 1041 + _phantom: ::core::marker::PhantomData, 1042 + } 1043 + } 1044 + } 1045 + 1046 + impl<'a, S: fs_state::State> FsBuilder<'a, S> { 1047 + /// Set the `fileCount` field (optional) 1048 + pub fn file_count(mut self, value: impl Into<Option<i64>>) -> Self { 1049 + self.__unsafe_private_named.1 = value.into(); 1050 + self 1051 + } 1052 + /// Set the `fileCount` field to an Option value (optional) 1053 + pub fn maybe_file_count(mut self, value: Option<i64>) -> Self { 1054 + self.__unsafe_private_named.1 = value; 1055 + self 1056 + } 1057 + } 1058 + 1059 + impl<'a, S> FsBuilder<'a, S> 1060 + where 1061 + S: fs_state::State, 1062 + S::Root: fs_state::IsUnset, 1063 + { 1064 + /// Set the `root` field (required) 1065 + pub fn root( 1066 + mut self, 1067 + value: impl Into<crate::place_wisp::fs::Directory<'a>>, 1068 + ) -> FsBuilder<'a, fs_state::SetRoot<S>> { 1069 + self.__unsafe_private_named.2 = ::core::option::Option::Some(value.into()); 1070 + FsBuilder { 1071 + _phantom_state: ::core::marker::PhantomData, 1072 + __unsafe_private_named: self.__unsafe_private_named, 1073 + _phantom: ::core::marker::PhantomData, 1074 + } 1075 + } 1076 + } 1077 + 1078 + impl<'a, S> FsBuilder<'a, S> 1079 + where 1080 + S: fs_state::State, 1081 + S::Site: fs_state::IsUnset, 1082 + { 1083 + /// Set the `site` field (required) 1084 + pub fn site( 1085 + mut self, 1086 + value: impl Into<jacquard_common::CowStr<'a>>, 1087 + ) -> FsBuilder<'a, fs_state::SetSite<S>> { 1088 + self.__unsafe_private_named.3 = ::core::option::Option::Some(value.into()); 1089 + FsBuilder { 1090 + _phantom_state: ::core::marker::PhantomData, 1091 + __unsafe_private_named: self.__unsafe_private_named, 1092 + _phantom: ::core::marker::PhantomData, 1093 + } 1094 + } 1095 + } 1096 + 1097 + impl<'a, S> FsBuilder<'a, S> 1098 + where 1099 + S: fs_state::State, 1100 + S::Site: fs_state::IsSet, 1101 + S::Root: fs_state::IsSet, 1102 + S::CreatedAt: fs_state::IsSet, 1103 + { 1104 + /// Build the final struct 1105 + pub fn build(self) -> Fs<'a> { 1106 + Fs { 1107 + created_at: self.__unsafe_private_named.0.unwrap(), 1108 + file_count: self.__unsafe_private_named.1, 1109 + root: self.__unsafe_private_named.2.unwrap(), 1110 + site: self.__unsafe_private_named.3.unwrap(), 1111 + extra_data: Default::default(), 1112 + } 1113 + } 1114 + /// Build the final struct with custom extra_data 1115 + pub fn build_with_data( 1116 + self, 1117 + extra_data: std::collections::BTreeMap< 1118 + jacquard_common::smol_str::SmolStr, 1119 + jacquard_common::types::value::Data<'a>, 1120 + >, 1121 + ) -> Fs<'a> { 1122 + Fs { 1123 + created_at: self.__unsafe_private_named.0.unwrap(), 1124 + file_count: self.__unsafe_private_named.1, 1125 + root: self.__unsafe_private_named.2.unwrap(), 1126 + site: self.__unsafe_private_named.3.unwrap(), 1127 + extra_data: Some(extra_data), 1128 + } 1129 + } 1130 + } 1131 + 1132 + impl<'a> Fs<'a> { 1133 + pub fn uri( 1134 + uri: impl Into<jacquard_common::CowStr<'a>>, 1135 + ) -> Result< 1136 + jacquard_common::types::uri::RecordUri<'a, FsRecord>, 1137 + jacquard_common::types::uri::UriError, 1138 + > { 1139 + jacquard_common::types::uri::RecordUri::try_from_uri( 1140 + jacquard_common::types::string::AtUri::new_cow(uri.into())?, 1141 + ) 1142 + } 1143 + } 1144 + 1145 + /// Typed wrapper for GetRecord response with this collection's record type. 1146 + #[derive( 1147 + serde::Serialize, 1148 + serde::Deserialize, 1149 + Debug, 1150 + Clone, 1151 + PartialEq, 1152 + Eq, 1153 + jacquard_derive::IntoStatic 1154 + )] 1155 + #[serde(rename_all = "camelCase")] 1156 + pub struct FsGetRecordOutput<'a> { 1157 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 1158 + #[serde(borrow)] 1159 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 1160 + #[serde(borrow)] 1161 + pub uri: jacquard_common::types::string::AtUri<'a>, 1162 + #[serde(borrow)] 1163 + pub value: Fs<'a>, 1164 + } 1165 + 1166 + impl From<FsGetRecordOutput<'_>> for Fs<'_> { 1167 + fn from(output: FsGetRecordOutput<'_>) -> Self { 1168 + use jacquard_common::IntoStatic; 1169 + output.value.into_static() 1170 + } 1171 + } 1172 + 1173 + impl jacquard_common::types::collection::Collection for Fs<'_> { 1174 + const NSID: &'static str = "place.wisp.fs"; 1175 + type Record = FsRecord; 1176 + } 1177 + 1178 + /// Marker type for deserializing records from this collection. 1179 + #[derive(Debug, serde::Serialize, serde::Deserialize)] 1180 + pub struct FsRecord; 1181 + impl jacquard_common::xrpc::XrpcResp for FsRecord { 1182 + const NSID: &'static str = "place.wisp.fs"; 1183 + const ENCODING: &'static str = "application/json"; 1184 + type Output<'de> = FsGetRecordOutput<'de>; 1185 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 1186 + } 1187 + 1188 + impl jacquard_common::types::collection::Collection for FsRecord { 1189 + const NSID: &'static str = "place.wisp.fs"; 1190 + type Record = FsRecord; 1191 + } 1192 + 1193 + impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Fs<'a> { 1194 + fn nsid() -> &'static str { 1195 + "place.wisp.fs" 1196 + } 1197 + fn def_name() -> &'static str { 1198 + "main" 1199 + } 1200 + fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 1201 + lexicon_doc_place_wisp_fs() 1202 + } 1203 + fn validate( 1204 + &self, 1205 + ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> { 1206 + if let Some(ref value) = self.file_count { 1207 + if *value > 1000i64 { 1208 + return Err(::jacquard_lexicon::validation::ConstraintError::Maximum { 1209 + path: ::jacquard_lexicon::validation::ValidationPath::from_field( 1210 + "file_count", 1211 + ), 1212 + max: 1000i64, 1213 + actual: *value, 1214 + }); 1215 + } 1216 + } 1217 + if let Some(ref value) = self.file_count { 1218 + if *value < 0i64 { 1219 + return Err(::jacquard_lexicon::validation::ConstraintError::Minimum { 1220 + path: ::jacquard_lexicon::validation::ValidationPath::from_field( 1221 + "file_count", 1222 + ), 1223 + min: 0i64, 1224 + actual: *value, 1225 + }); 1226 + } 1227 + } 1228 + Ok(()) 1229 + } 1230 + }
+14
cli/test_headers.rs
··· 1 + use http::Request; 2 + 3 + fn main() { 4 + let builder = Request::builder() 5 + .header(http::header::CONTENT_TYPE, "*/*") 6 + .header(http::header::CONTENT_TYPE, "application/octet-stream"); 7 + 8 + let req = builder.body(()).unwrap(); 9 + 10 + println!("Content-Type headers:"); 11 + for value in req.headers().get_all(http::header::CONTENT_TYPE) { 12 + println!(" {:?}", value); 13 + } 14 + }
create-admin.ts scripts/create-admin.ts
-44
src/lexicon/index.ts
··· 1 - /** 2 - * GENERATED CODE - DO NOT MODIFY 3 - */ 4 - import { 5 - type Auth, 6 - type Options as XrpcOptions, 7 - Server as XrpcServer, 8 - type StreamConfigOrHandler, 9 - type MethodConfigOrHandler, 10 - createServer as createXrpcServer, 11 - } from '@atproto/xrpc-server' 12 - import { schemas } from './lexicons.js' 13 - 14 - export function createServer(options?: XrpcOptions): Server { 15 - return new Server(options) 16 - } 17 - 18 - export class Server { 19 - xrpc: XrpcServer 20 - place: PlaceNS 21 - 22 - constructor(options?: XrpcOptions) { 23 - this.xrpc = createXrpcServer(schemas, options) 24 - this.place = new PlaceNS(this) 25 - } 26 - } 27 - 28 - export class PlaceNS { 29 - _server: Server 30 - wisp: PlaceWispNS 31 - 32 - constructor(server: Server) { 33 - this._server = server 34 - this.wisp = new PlaceWispNS(server) 35 - } 36 - } 37 - 38 - export class PlaceWispNS { 39 - _server: Server 40 - 41 - constructor(server: Server) { 42 - this._server = server 43 - } 44 - }
-141
src/lexicon/lexicons.ts
··· 1 - /** 2 - * GENERATED CODE - DO NOT MODIFY 3 - */ 4 - import { 5 - type LexiconDoc, 6 - Lexicons, 7 - ValidationError, 8 - type ValidationResult, 9 - } from '@atproto/lexicon' 10 - import { type $Typed, is$typed, maybe$typed } from './util.js' 11 - 12 - export const schemaDict = { 13 - PlaceWispFs: { 14 - lexicon: 1, 15 - id: 'place.wisp.fs', 16 - defs: { 17 - main: { 18 - type: 'record', 19 - description: 'Virtual filesystem manifest for a Wisp site', 20 - record: { 21 - type: 'object', 22 - required: ['site', 'root', 'createdAt'], 23 - properties: { 24 - site: { 25 - type: 'string', 26 - }, 27 - root: { 28 - type: 'ref', 29 - ref: 'lex:place.wisp.fs#directory', 30 - }, 31 - fileCount: { 32 - type: 'integer', 33 - minimum: 0, 34 - maximum: 1000, 35 - }, 36 - createdAt: { 37 - type: 'string', 38 - format: 'datetime', 39 - }, 40 - }, 41 - }, 42 - }, 43 - file: { 44 - type: 'object', 45 - required: ['type', 'blob'], 46 - properties: { 47 - type: { 48 - type: 'string', 49 - const: 'file', 50 - }, 51 - blob: { 52 - type: 'blob', 53 - accept: ['*/*'], 54 - maxSize: 1000000, 55 - description: 'Content blob ref', 56 - }, 57 - encoding: { 58 - type: 'string', 59 - enum: ['gzip'], 60 - description: 'Content encoding (e.g., gzip for compressed files)', 61 - }, 62 - mimeType: { 63 - type: 'string', 64 - description: 'Original MIME type before compression', 65 - }, 66 - base64: { 67 - type: 'boolean', 68 - description: 69 - 'True if blob content is base64-encoded (used to bypass PDS content sniffing)', 70 - }, 71 - }, 72 - }, 73 - directory: { 74 - type: 'object', 75 - required: ['type', 'entries'], 76 - properties: { 77 - type: { 78 - type: 'string', 79 - const: 'directory', 80 - }, 81 - entries: { 82 - type: 'array', 83 - maxLength: 500, 84 - items: { 85 - type: 'ref', 86 - ref: 'lex:place.wisp.fs#entry', 87 - }, 88 - }, 89 - }, 90 - }, 91 - entry: { 92 - type: 'object', 93 - required: ['name', 'node'], 94 - properties: { 95 - name: { 96 - type: 'string', 97 - maxLength: 255, 98 - }, 99 - node: { 100 - type: 'union', 101 - refs: ['lex:place.wisp.fs#file', 'lex:place.wisp.fs#directory'], 102 - }, 103 - }, 104 - }, 105 - }, 106 - }, 107 - } as const satisfies Record<string, LexiconDoc> 108 - export const schemas = Object.values(schemaDict) satisfies LexiconDoc[] 109 - export const lexicons: Lexicons = new Lexicons(schemas) 110 - 111 - export function validate<T extends { $type: string }>( 112 - v: unknown, 113 - id: string, 114 - hash: string, 115 - requiredType: true, 116 - ): ValidationResult<T> 117 - export function validate<T extends { $type?: string }>( 118 - v: unknown, 119 - id: string, 120 - hash: string, 121 - requiredType?: false, 122 - ): ValidationResult<T> 123 - export function validate( 124 - v: unknown, 125 - id: string, 126 - hash: string, 127 - requiredType?: boolean, 128 - ): ValidationResult { 129 - return (requiredType ? is$typed : maybe$typed)(v, id, hash) 130 - ? lexicons.validate(`${id}#${hash}`, v) 131 - : { 132 - success: false, 133 - error: new ValidationError( 134 - `Must be an object with "${hash === 'main' ? id : `${id}#${hash}`}" $type property`, 135 - ), 136 - } 137 - } 138 - 139 - export const ids = { 140 - PlaceWispFs: 'place.wisp.fs', 141 - } as const
-85
src/lexicon/types/place/wisp/fs.ts
··· 1 - /** 2 - * GENERATED CODE - DO NOT MODIFY 3 - */ 4 - import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../lexicons' 7 - import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 8 - 9 - const is$typed = _is$typed, 10 - validate = _validate 11 - const id = 'place.wisp.fs' 12 - 13 - export interface Record { 14 - $type: 'place.wisp.fs' 15 - site: string 16 - root: Directory 17 - fileCount?: number 18 - createdAt: string 19 - [k: string]: unknown 20 - } 21 - 22 - const hashRecord = 'main' 23 - 24 - export function isRecord<V>(v: V) { 25 - return is$typed(v, id, hashRecord) 26 - } 27 - 28 - export function validateRecord<V>(v: V) { 29 - return validate<Record & V>(v, id, hashRecord, true) 30 - } 31 - 32 - export interface File { 33 - $type?: 'place.wisp.fs#file' 34 - type: 'file' 35 - /** Content blob ref */ 36 - blob: BlobRef 37 - /** Content encoding (e.g., gzip for compressed files) */ 38 - encoding?: 'gzip' 39 - /** Original MIME type before compression */ 40 - mimeType?: string 41 - /** True if blob content is base64-encoded (used to bypass PDS content sniffing) */ 42 - base64?: boolean 43 - } 44 - 45 - const hashFile = 'file' 46 - 47 - export function isFile<V>(v: V) { 48 - return is$typed(v, id, hashFile) 49 - } 50 - 51 - export function validateFile<V>(v: V) { 52 - return validate<File & V>(v, id, hashFile) 53 - } 54 - 55 - export interface Directory { 56 - $type?: 'place.wisp.fs#directory' 57 - type: 'directory' 58 - entries: Entry[] 59 - } 60 - 61 - const hashDirectory = 'directory' 62 - 63 - export function isDirectory<V>(v: V) { 64 - return is$typed(v, id, hashDirectory) 65 - } 66 - 67 - export function validateDirectory<V>(v: V) { 68 - return validate<Directory & V>(v, id, hashDirectory) 69 - } 70 - 71 - export interface Entry { 72 - $type?: 'place.wisp.fs#entry' 73 - name: string 74 - node: $Typed<File> | $Typed<Directory> | { $type: string } 75 - } 76 - 77 - const hashEntry = 'entry' 78 - 79 - export function isEntry<V>(v: V) { 80 - return is$typed(v, id, hashEntry) 81 - } 82 - 83 - export function validateEntry<V>(v: V) { 84 - return validate<Entry & V>(v, id, hashEntry) 85 - }
-82
src/lexicon/util.ts
··· 1 - /** 2 - * GENERATED CODE - DO NOT MODIFY 3 - */ 4 - 5 - import { type ValidationResult } from '@atproto/lexicon' 6 - 7 - export type OmitKey<T, K extends keyof T> = { 8 - [K2 in keyof T as K2 extends K ? never : K2]: T[K2] 9 - } 10 - 11 - export type $Typed<V, T extends string = string> = V & { $type: T } 12 - export type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'> 13 - 14 - export type $Type<Id extends string, Hash extends string> = Hash extends 'main' 15 - ? Id 16 - : `${Id}#${Hash}` 17 - 18 - function isObject<V>(v: V): v is V & object { 19 - return v != null && typeof v === 'object' 20 - } 21 - 22 - function is$type<Id extends string, Hash extends string>( 23 - $type: unknown, 24 - id: Id, 25 - hash: Hash, 26 - ): $type is $Type<Id, Hash> { 27 - return hash === 'main' 28 - ? $type === id 29 - : // $type === `${id}#${hash}` 30 - typeof $type === 'string' && 31 - $type.length === id.length + 1 + hash.length && 32 - $type.charCodeAt(id.length) === 35 /* '#' */ && 33 - $type.startsWith(id) && 34 - $type.endsWith(hash) 35 - } 36 - 37 - export type $TypedObject< 38 - V, 39 - Id extends string, 40 - Hash extends string, 41 - > = V extends { 42 - $type: $Type<Id, Hash> 43 - } 44 - ? V 45 - : V extends { $type?: string } 46 - ? V extends { $type?: infer T extends $Type<Id, Hash> } 47 - ? V & { $type: T } 48 - : never 49 - : V & { $type: $Type<Id, Hash> } 50 - 51 - export function is$typed<V, Id extends string, Hash extends string>( 52 - v: V, 53 - id: Id, 54 - hash: Hash, 55 - ): v is $TypedObject<V, Id, Hash> { 56 - return isObject(v) && '$type' in v && is$type(v.$type, id, hash) 57 - } 58 - 59 - export function maybe$typed<V, Id extends string, Hash extends string>( 60 - v: V, 61 - id: Id, 62 - hash: Hash, 63 - ): v is V & object & { $type?: $Type<Id, Hash> } { 64 - return ( 65 - isObject(v) && 66 - ('$type' in v ? v.$type === undefined || is$type(v.$type, id, hash) : true) 67 - ) 68 - } 69 - 70 - export type Validator<R = unknown> = (v: unknown) => ValidationResult<R> 71 - export type ValidatorParam<V extends Validator> = 72 - V extends Validator<infer R> ? R : never 73 - 74 - /** 75 - * Utility function that allows to convert a "validate*" utility function into a 76 - * type predicate. 77 - */ 78 - export function asPredicate<V extends Validator>(validate: V) { 79 - return function <T>(v: T): v is T & ValidatorParam<V> { 80 - return validate(v).success 81 - } 82 - }
-2
src/lib/observability.ts
··· 1 1 // DIY Observability - Logs, Metrics, and Error Tracking 2 - import type { Context } from 'elysia' 3 - 4 2 // Types 5 3 export interface LogEntry { 6 4 id: string
-2
src/lib/types.ts
··· 1 - import type { BlobRef } from "@atproto/api"; 2 - 3 1 /** 4 2 * Configuration for the Wisp client 5 3 * @typeParam Config
+2 -2
src/lib/wisp-utils.ts
··· 1 1 import type { BlobRef } from "@atproto/api"; 2 - import type { Record, Directory, File, Entry } from "../lexicon/types/place/wisp/fs"; 3 - import { validateRecord } from "../lexicon/types/place/wisp/fs"; 2 + import type { Record, Directory, File, Entry } from "../lexicons/types/place/wisp/fs"; 3 + import { validateRecord } from "../lexicons/types/place/wisp/fs"; 4 4 import { gzipSync } from 'zlib'; 5 5 6 6 export interface UploadedFile {
+1 -1
src/routes/auth.ts
··· 109 109 logger.error('[Auth] Status check error', err) 110 110 return { authenticated: false } 111 111 } 112 - }) 112 + })
+1 -1
src/routes/wisp.ts
··· 13 13 } from '../lib/wisp-utils' 14 14 import { upsertSite } from '../lib/db' 15 15 import { logger } from '../lib/observability' 16 - import { validateRecord } from '../lexicon/types/place/wisp/fs' 16 + import { validateRecord } from '../lexicons/types/place/wisp/fs' 17 17 import { MAX_SITE_SIZE, MAX_FILE_SIZE, MAX_FILE_COUNT } from '../lib/constants' 18 18 19 19 function isValidSiteName(siteName: string): boolean {