mount an atproto PDS repository as a FUSE filesystem

init pdsfs

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li 3489add0

+2
.gitignore
··· 1 + /target 2 + mnt
+3382
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "addr2line" 7 + version = "0.24.2" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 + dependencies = [ 11 + "gimli", 12 + ] 13 + 14 + [[package]] 15 + name = "adler2" 16 + version = "2.0.1" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 19 + 20 + [[package]] 21 + name = "aho-corasick" 22 + version = "1.1.3" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 + dependencies = [ 26 + "memchr", 27 + ] 28 + 29 + [[package]] 30 + name = "allocator-api2" 31 + version = "0.2.21" 32 + source = "registry+https://github.com/rust-lang/crates.io-index" 33 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 34 + 35 + [[package]] 36 + name = "android-tzdata" 37 + version = "0.1.1" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 40 + 41 + [[package]] 42 + name = "android_system_properties" 43 + version = "0.1.5" 44 + source = "registry+https://github.com/rust-lang/crates.io-index" 45 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 46 + dependencies = [ 47 + "libc", 48 + ] 49 + 50 + [[package]] 51 + name = "anstream" 52 + version = "0.6.19" 53 + source = "registry+https://github.com/rust-lang/crates.io-index" 54 + checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" 55 + dependencies = [ 56 + "anstyle", 57 + "anstyle-parse", 58 + "anstyle-query", 59 + "anstyle-wincon", 60 + "colorchoice", 61 + "is_terminal_polyfill", 62 + "utf8parse", 63 + ] 64 + 65 + [[package]] 66 + name = "anstyle" 67 + version = "1.0.11" 68 + source = "registry+https://github.com/rust-lang/crates.io-index" 69 + checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 70 + 71 + [[package]] 72 + name = "anstyle-parse" 73 + version = "0.2.7" 74 + source = "registry+https://github.com/rust-lang/crates.io-index" 75 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 76 + dependencies = [ 77 + "utf8parse", 78 + ] 79 + 80 + [[package]] 81 + name = "anstyle-query" 82 + version = "1.1.3" 83 + source = "registry+https://github.com/rust-lang/crates.io-index" 84 + checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" 85 + dependencies = [ 86 + "windows-sys 0.59.0", 87 + ] 88 + 89 + [[package]] 90 + name = "anstyle-wincon" 91 + version = "3.0.9" 92 + source = "registry+https://github.com/rust-lang/crates.io-index" 93 + checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" 94 + dependencies = [ 95 + "anstyle", 96 + "once_cell_polyfill", 97 + "windows-sys 0.59.0", 98 + ] 99 + 100 + [[package]] 101 + name = "async-channel" 102 + version = "1.9.0" 103 + source = "registry+https://github.com/rust-lang/crates.io-index" 104 + checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" 105 + dependencies = [ 106 + "concurrent-queue", 107 + "event-listener 2.5.3", 108 + "futures-core", 109 + ] 110 + 111 + [[package]] 112 + name = "async-compression" 113 + version = "0.4.27" 114 + source = "registry+https://github.com/rust-lang/crates.io-index" 115 + checksum = "ddb939d66e4ae03cee6091612804ba446b12878410cfa17f785f4dd67d4014e8" 116 + dependencies = [ 117 + "flate2", 118 + "futures-core", 119 + "memchr", 120 + "pin-project-lite", 121 + "tokio", 122 + ] 123 + 124 + [[package]] 125 + name = "async-lock" 126 + version = "3.4.0" 127 + source = "registry+https://github.com/rust-lang/crates.io-index" 128 + checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 129 + dependencies = [ 130 + "event-listener 5.4.0", 131 + "event-listener-strategy", 132 + "pin-project-lite", 133 + ] 134 + 135 + [[package]] 136 + name = "async-stream" 137 + version = "0.3.6" 138 + source = "registry+https://github.com/rust-lang/crates.io-index" 139 + checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 140 + dependencies = [ 141 + "async-stream-impl", 142 + "futures-core", 143 + "pin-project-lite", 144 + ] 145 + 146 + [[package]] 147 + name = "async-stream-impl" 148 + version = "0.3.6" 149 + source = "registry+https://github.com/rust-lang/crates.io-index" 150 + checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 151 + dependencies = [ 152 + "proc-macro2", 153 + "quote", 154 + "syn", 155 + ] 156 + 157 + [[package]] 158 + name = "async-trait" 159 + version = "0.1.88" 160 + source = "registry+https://github.com/rust-lang/crates.io-index" 161 + checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 162 + dependencies = [ 163 + "proc-macro2", 164 + "quote", 165 + "syn", 166 + ] 167 + 168 + [[package]] 169 + name = "atomic-waker" 170 + version = "1.1.2" 171 + source = "registry+https://github.com/rust-lang/crates.io-index" 172 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 173 + 174 + [[package]] 175 + name = "atrium-api" 176 + version = "0.25.4" 177 + source = "registry+https://github.com/rust-lang/crates.io-index" 178 + checksum = "46355d3245edc7b3160b2a45fe55d09a6963ebd3eee0252feb6b72fb0eb71463" 179 + dependencies = [ 180 + "atrium-common", 181 + "atrium-xrpc", 182 + "chrono", 183 + "http 1.3.1", 184 + "ipld-core", 185 + "langtag", 186 + "regex", 187 + "serde", 188 + "serde_bytes", 189 + "serde_json", 190 + "thiserror 1.0.69", 191 + "tokio", 192 + "trait-variant", 193 + ] 194 + 195 + [[package]] 196 + name = "atrium-common" 197 + version = "0.1.2" 198 + source = "registry+https://github.com/rust-lang/crates.io-index" 199 + checksum = "9ed5610654043faa396a5a15afac0ac646d76aebe45aebd7cef4f8b96b0ab7f4" 200 + dependencies = [ 201 + "dashmap", 202 + "lru", 203 + "moka", 204 + "thiserror 1.0.69", 205 + "tokio", 206 + "trait-variant", 207 + "web-time", 208 + ] 209 + 210 + [[package]] 211 + name = "atrium-identity" 212 + version = "0.1.5" 213 + source = "registry+https://github.com/rust-lang/crates.io-index" 214 + checksum = "c9e2d42bb4dbea038f4f5f45e3af2a89d61a9894a75f06aa550b74a60d2be380" 215 + dependencies = [ 216 + "atrium-api", 217 + "atrium-common", 218 + "atrium-xrpc", 219 + "serde", 220 + "serde_html_form", 221 + "serde_json", 222 + "thiserror 1.0.69", 223 + "trait-variant", 224 + ] 225 + 226 + [[package]] 227 + name = "atrium-repo" 228 + version = "0.1.4" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "23362dd513fc76a26452b50994e14261eade4b3b87b01dd19644bbfee1ca2898" 231 + dependencies = [ 232 + "async-stream", 233 + "atrium-api", 234 + "futures", 235 + "ipld-core", 236 + "serde", 237 + "serde_bytes", 238 + "serde_ipld_dagcbor", 239 + "sha2", 240 + "thiserror 1.0.69", 241 + "tokio", 242 + "tokio-util", 243 + "unsigned-varint", 244 + ] 245 + 246 + [[package]] 247 + name = "atrium-xrpc" 248 + version = "0.12.3" 249 + source = "registry+https://github.com/rust-lang/crates.io-index" 250 + checksum = "0216ad50ce34e9ff982e171c3659e65dedaa2ed5ac2994524debdc9a9647ffa8" 251 + dependencies = [ 252 + "http 1.3.1", 253 + "serde", 254 + "serde_html_form", 255 + "serde_json", 256 + "thiserror 1.0.69", 257 + "trait-variant", 258 + ] 259 + 260 + [[package]] 261 + name = "atrium-xrpc-client" 262 + version = "0.5.14" 263 + source = "registry+https://github.com/rust-lang/crates.io-index" 264 + checksum = "e099e5171f79faef52364ef0657a4cab086a71b384a779a29597a91b780de0d5" 265 + dependencies = [ 266 + "atrium-xrpc", 267 + "isahc", 268 + "reqwest", 269 + ] 270 + 271 + [[package]] 272 + name = "autocfg" 273 + version = "1.5.0" 274 + source = "registry+https://github.com/rust-lang/crates.io-index" 275 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 276 + 277 + [[package]] 278 + name = "backtrace" 279 + version = "0.3.75" 280 + source = "registry+https://github.com/rust-lang/crates.io-index" 281 + checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 282 + dependencies = [ 283 + "addr2line", 284 + "cfg-if", 285 + "libc", 286 + "miniz_oxide", 287 + "object", 288 + "rustc-demangle", 289 + "windows-targets 0.52.6", 290 + ] 291 + 292 + [[package]] 293 + name = "base-x" 294 + version = "0.2.11" 295 + source = "registry+https://github.com/rust-lang/crates.io-index" 296 + checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 297 + 298 + [[package]] 299 + name = "base64" 300 + version = "0.22.1" 301 + source = "registry+https://github.com/rust-lang/crates.io-index" 302 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 303 + 304 + [[package]] 305 + name = "bitflags" 306 + version = "1.3.2" 307 + source = "registry+https://github.com/rust-lang/crates.io-index" 308 + checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 309 + 310 + [[package]] 311 + name = "bitflags" 312 + version = "2.9.1" 313 + source = "registry+https://github.com/rust-lang/crates.io-index" 314 + checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" 315 + 316 + [[package]] 317 + name = "block-buffer" 318 + version = "0.10.4" 319 + source = "registry+https://github.com/rust-lang/crates.io-index" 320 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 321 + dependencies = [ 322 + "generic-array", 323 + ] 324 + 325 + [[package]] 326 + name = "bumpalo" 327 + version = "3.19.0" 328 + source = "registry+https://github.com/rust-lang/crates.io-index" 329 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 330 + 331 + [[package]] 332 + name = "bytes" 333 + version = "1.10.1" 334 + source = "registry+https://github.com/rust-lang/crates.io-index" 335 + checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 336 + 337 + [[package]] 338 + name = "castaway" 339 + version = "0.1.2" 340 + source = "registry+https://github.com/rust-lang/crates.io-index" 341 + checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" 342 + 343 + [[package]] 344 + name = "cbor4ii" 345 + version = "0.2.14" 346 + source = "registry+https://github.com/rust-lang/crates.io-index" 347 + checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4" 348 + dependencies = [ 349 + "serde", 350 + ] 351 + 352 + [[package]] 353 + name = "cc" 354 + version = "1.2.30" 355 + source = "registry+https://github.com/rust-lang/crates.io-index" 356 + checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 357 + dependencies = [ 358 + "shlex", 359 + ] 360 + 361 + [[package]] 362 + name = "cfg-if" 363 + version = "1.0.1" 364 + source = "registry+https://github.com/rust-lang/crates.io-index" 365 + checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 366 + 367 + [[package]] 368 + name = "cfg_aliases" 369 + version = "0.2.1" 370 + source = "registry+https://github.com/rust-lang/crates.io-index" 371 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 372 + 373 + [[package]] 374 + name = "chrono" 375 + version = "0.4.41" 376 + source = "registry+https://github.com/rust-lang/crates.io-index" 377 + checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 378 + dependencies = [ 379 + "android-tzdata", 380 + "iana-time-zone", 381 + "js-sys", 382 + "num-traits", 383 + "serde", 384 + "wasm-bindgen", 385 + "windows-link", 386 + ] 387 + 388 + [[package]] 389 + name = "cid" 390 + version = "0.11.1" 391 + source = "registry+https://github.com/rust-lang/crates.io-index" 392 + checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" 393 + dependencies = [ 394 + "core2", 395 + "multibase", 396 + "multihash", 397 + "serde", 398 + "serde_bytes", 399 + "unsigned-varint", 400 + ] 401 + 402 + [[package]] 403 + name = "clap" 404 + version = "4.5.41" 405 + source = "registry+https://github.com/rust-lang/crates.io-index" 406 + checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" 407 + dependencies = [ 408 + "clap_builder", 409 + ] 410 + 411 + [[package]] 412 + name = "clap_builder" 413 + version = "4.5.41" 414 + source = "registry+https://github.com/rust-lang/crates.io-index" 415 + checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" 416 + dependencies = [ 417 + "anstream", 418 + "anstyle", 419 + "clap_lex", 420 + "strsim", 421 + ] 422 + 423 + [[package]] 424 + name = "clap_lex" 425 + version = "0.7.5" 426 + source = "registry+https://github.com/rust-lang/crates.io-index" 427 + checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" 428 + 429 + [[package]] 430 + name = "colorchoice" 431 + version = "1.0.4" 432 + source = "registry+https://github.com/rust-lang/crates.io-index" 433 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 434 + 435 + [[package]] 436 + name = "concurrent-queue" 437 + version = "2.5.0" 438 + source = "registry+https://github.com/rust-lang/crates.io-index" 439 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 440 + dependencies = [ 441 + "crossbeam-utils", 442 + ] 443 + 444 + [[package]] 445 + name = "console" 446 + version = "0.16.0" 447 + source = "registry+https://github.com/rust-lang/crates.io-index" 448 + checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" 449 + dependencies = [ 450 + "encode_unicode", 451 + "libc", 452 + "once_cell", 453 + "unicode-width", 454 + "windows-sys 0.60.2", 455 + ] 456 + 457 + [[package]] 458 + name = "core-foundation" 459 + version = "0.9.4" 460 + source = "registry+https://github.com/rust-lang/crates.io-index" 461 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 462 + dependencies = [ 463 + "core-foundation-sys", 464 + "libc", 465 + ] 466 + 467 + [[package]] 468 + name = "core-foundation-sys" 469 + version = "0.8.7" 470 + source = "registry+https://github.com/rust-lang/crates.io-index" 471 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 472 + 473 + [[package]] 474 + name = "core2" 475 + version = "0.4.0" 476 + source = "registry+https://github.com/rust-lang/crates.io-index" 477 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 478 + dependencies = [ 479 + "memchr", 480 + ] 481 + 482 + [[package]] 483 + name = "cpufeatures" 484 + version = "0.2.17" 485 + source = "registry+https://github.com/rust-lang/crates.io-index" 486 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 487 + dependencies = [ 488 + "libc", 489 + ] 490 + 491 + [[package]] 492 + name = "crc32fast" 493 + version = "1.5.0" 494 + source = "registry+https://github.com/rust-lang/crates.io-index" 495 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 496 + dependencies = [ 497 + "cfg-if", 498 + ] 499 + 500 + [[package]] 501 + name = "critical-section" 502 + version = "1.2.0" 503 + source = "registry+https://github.com/rust-lang/crates.io-index" 504 + checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 505 + 506 + [[package]] 507 + name = "crossbeam-channel" 508 + version = "0.5.15" 509 + source = "registry+https://github.com/rust-lang/crates.io-index" 510 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 511 + dependencies = [ 512 + "crossbeam-utils", 513 + ] 514 + 515 + [[package]] 516 + name = "crossbeam-epoch" 517 + version = "0.9.18" 518 + source = "registry+https://github.com/rust-lang/crates.io-index" 519 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 520 + dependencies = [ 521 + "crossbeam-utils", 522 + ] 523 + 524 + [[package]] 525 + name = "crossbeam-utils" 526 + version = "0.8.21" 527 + source = "registry+https://github.com/rust-lang/crates.io-index" 528 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 529 + 530 + [[package]] 531 + name = "crypto-common" 532 + version = "0.1.6" 533 + source = "registry+https://github.com/rust-lang/crates.io-index" 534 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 535 + dependencies = [ 536 + "generic-array", 537 + "typenum", 538 + ] 539 + 540 + [[package]] 541 + name = "curl" 542 + version = "0.4.47" 543 + source = "registry+https://github.com/rust-lang/crates.io-index" 544 + checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" 545 + dependencies = [ 546 + "curl-sys", 547 + "libc", 548 + "openssl-probe", 549 + "openssl-sys", 550 + "schannel", 551 + "socket2 0.5.10", 552 + "windows-sys 0.52.0", 553 + ] 554 + 555 + [[package]] 556 + name = "curl-sys" 557 + version = "0.4.80+curl-8.12.1" 558 + source = "registry+https://github.com/rust-lang/crates.io-index" 559 + checksum = "55f7df2eac63200c3ab25bde3b2268ef2ee56af3d238e76d61f01c3c49bff734" 560 + dependencies = [ 561 + "cc", 562 + "libc", 563 + "libnghttp2-sys", 564 + "libz-sys", 565 + "openssl-sys", 566 + "pkg-config", 567 + "vcpkg", 568 + "windows-sys 0.52.0", 569 + ] 570 + 571 + [[package]] 572 + name = "dashmap" 573 + version = "6.1.0" 574 + source = "registry+https://github.com/rust-lang/crates.io-index" 575 + checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 576 + dependencies = [ 577 + "cfg-if", 578 + "crossbeam-utils", 579 + "hashbrown 0.14.5", 580 + "lock_api", 581 + "once_cell", 582 + "parking_lot_core", 583 + ] 584 + 585 + [[package]] 586 + name = "data-encoding" 587 + version = "2.9.0" 588 + source = "registry+https://github.com/rust-lang/crates.io-index" 589 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 590 + 591 + [[package]] 592 + name = "data-encoding-macro" 593 + version = "0.1.18" 594 + source = "registry+https://github.com/rust-lang/crates.io-index" 595 + checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" 596 + dependencies = [ 597 + "data-encoding", 598 + "data-encoding-macro-internal", 599 + ] 600 + 601 + [[package]] 602 + name = "data-encoding-macro-internal" 603 + version = "0.1.16" 604 + source = "registry+https://github.com/rust-lang/crates.io-index" 605 + checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 606 + dependencies = [ 607 + "data-encoding", 608 + "syn", 609 + ] 610 + 611 + [[package]] 612 + name = "digest" 613 + version = "0.10.7" 614 + source = "registry+https://github.com/rust-lang/crates.io-index" 615 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 616 + dependencies = [ 617 + "block-buffer", 618 + "crypto-common", 619 + ] 620 + 621 + [[package]] 622 + name = "displaydoc" 623 + version = "0.2.5" 624 + source = "registry+https://github.com/rust-lang/crates.io-index" 625 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 626 + dependencies = [ 627 + "proc-macro2", 628 + "quote", 629 + "syn", 630 + ] 631 + 632 + [[package]] 633 + name = "encode_unicode" 634 + version = "1.0.0" 635 + source = "registry+https://github.com/rust-lang/crates.io-index" 636 + checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" 637 + 638 + [[package]] 639 + name = "encoding_rs" 640 + version = "0.8.35" 641 + source = "registry+https://github.com/rust-lang/crates.io-index" 642 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 643 + dependencies = [ 644 + "cfg-if", 645 + ] 646 + 647 + [[package]] 648 + name = "enum-as-inner" 649 + version = "0.6.1" 650 + source = "registry+https://github.com/rust-lang/crates.io-index" 651 + checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 652 + dependencies = [ 653 + "heck", 654 + "proc-macro2", 655 + "quote", 656 + "syn", 657 + ] 658 + 659 + [[package]] 660 + name = "equivalent" 661 + version = "1.0.2" 662 + source = "registry+https://github.com/rust-lang/crates.io-index" 663 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 664 + 665 + [[package]] 666 + name = "errno" 667 + version = "0.3.13" 668 + source = "registry+https://github.com/rust-lang/crates.io-index" 669 + checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 670 + dependencies = [ 671 + "libc", 672 + "windows-sys 0.59.0", 673 + ] 674 + 675 + [[package]] 676 + name = "event-listener" 677 + version = "2.5.3" 678 + source = "registry+https://github.com/rust-lang/crates.io-index" 679 + checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 680 + 681 + [[package]] 682 + name = "event-listener" 683 + version = "5.4.0" 684 + source = "registry+https://github.com/rust-lang/crates.io-index" 685 + checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" 686 + dependencies = [ 687 + "concurrent-queue", 688 + "parking", 689 + "pin-project-lite", 690 + ] 691 + 692 + [[package]] 693 + name = "event-listener-strategy" 694 + version = "0.5.4" 695 + source = "registry+https://github.com/rust-lang/crates.io-index" 696 + checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 697 + dependencies = [ 698 + "event-listener 5.4.0", 699 + "pin-project-lite", 700 + ] 701 + 702 + [[package]] 703 + name = "fastrand" 704 + version = "1.9.0" 705 + source = "registry+https://github.com/rust-lang/crates.io-index" 706 + checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" 707 + dependencies = [ 708 + "instant", 709 + ] 710 + 711 + [[package]] 712 + name = "fastrand" 713 + version = "2.3.0" 714 + source = "registry+https://github.com/rust-lang/crates.io-index" 715 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 716 + 717 + [[package]] 718 + name = "flate2" 719 + version = "1.1.2" 720 + source = "registry+https://github.com/rust-lang/crates.io-index" 721 + checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" 722 + dependencies = [ 723 + "crc32fast", 724 + "miniz_oxide", 725 + ] 726 + 727 + [[package]] 728 + name = "fnv" 729 + version = "1.0.7" 730 + source = "registry+https://github.com/rust-lang/crates.io-index" 731 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 732 + 733 + [[package]] 734 + name = "foldhash" 735 + version = "0.1.5" 736 + source = "registry+https://github.com/rust-lang/crates.io-index" 737 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 738 + 739 + [[package]] 740 + name = "foreign-types" 741 + version = "0.3.2" 742 + source = "registry+https://github.com/rust-lang/crates.io-index" 743 + checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 744 + dependencies = [ 745 + "foreign-types-shared", 746 + ] 747 + 748 + [[package]] 749 + name = "foreign-types-shared" 750 + version = "0.1.1" 751 + source = "registry+https://github.com/rust-lang/crates.io-index" 752 + checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 753 + 754 + [[package]] 755 + name = "form_urlencoded" 756 + version = "1.2.1" 757 + source = "registry+https://github.com/rust-lang/crates.io-index" 758 + checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 759 + dependencies = [ 760 + "percent-encoding", 761 + ] 762 + 763 + [[package]] 764 + name = "fuser" 765 + version = "0.15.1" 766 + source = "registry+https://github.com/rust-lang/crates.io-index" 767 + checksum = "53274f494609e77794b627b1a3cddfe45d675a6b2e9ba9c0fdc8d8eee2184369" 768 + dependencies = [ 769 + "libc", 770 + "log", 771 + "memchr", 772 + "nix", 773 + "page_size", 774 + "pkg-config", 775 + "smallvec", 776 + "zerocopy", 777 + ] 778 + 779 + [[package]] 780 + name = "futures" 781 + version = "0.3.31" 782 + source = "registry+https://github.com/rust-lang/crates.io-index" 783 + checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 784 + dependencies = [ 785 + "futures-channel", 786 + "futures-core", 787 + "futures-executor", 788 + "futures-io", 789 + "futures-sink", 790 + "futures-task", 791 + "futures-util", 792 + ] 793 + 794 + [[package]] 795 + name = "futures-channel" 796 + version = "0.3.31" 797 + source = "registry+https://github.com/rust-lang/crates.io-index" 798 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 799 + dependencies = [ 800 + "futures-core", 801 + "futures-sink", 802 + ] 803 + 804 + [[package]] 805 + name = "futures-core" 806 + version = "0.3.31" 807 + source = "registry+https://github.com/rust-lang/crates.io-index" 808 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 809 + 810 + [[package]] 811 + name = "futures-executor" 812 + version = "0.3.31" 813 + source = "registry+https://github.com/rust-lang/crates.io-index" 814 + checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 815 + dependencies = [ 816 + "futures-core", 817 + "futures-task", 818 + "futures-util", 819 + ] 820 + 821 + [[package]] 822 + name = "futures-io" 823 + version = "0.3.31" 824 + source = "registry+https://github.com/rust-lang/crates.io-index" 825 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 826 + 827 + [[package]] 828 + name = "futures-lite" 829 + version = "1.13.0" 830 + source = "registry+https://github.com/rust-lang/crates.io-index" 831 + checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" 832 + dependencies = [ 833 + "fastrand 1.9.0", 834 + "futures-core", 835 + "futures-io", 836 + "memchr", 837 + "parking", 838 + "pin-project-lite", 839 + "waker-fn", 840 + ] 841 + 842 + [[package]] 843 + name = "futures-macro" 844 + version = "0.3.31" 845 + source = "registry+https://github.com/rust-lang/crates.io-index" 846 + checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 847 + dependencies = [ 848 + "proc-macro2", 849 + "quote", 850 + "syn", 851 + ] 852 + 853 + [[package]] 854 + name = "futures-sink" 855 + version = "0.3.31" 856 + source = "registry+https://github.com/rust-lang/crates.io-index" 857 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 858 + 859 + [[package]] 860 + name = "futures-task" 861 + version = "0.3.31" 862 + source = "registry+https://github.com/rust-lang/crates.io-index" 863 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 864 + 865 + [[package]] 866 + name = "futures-util" 867 + version = "0.3.31" 868 + source = "registry+https://github.com/rust-lang/crates.io-index" 869 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 870 + dependencies = [ 871 + "futures-channel", 872 + "futures-core", 873 + "futures-io", 874 + "futures-macro", 875 + "futures-sink", 876 + "futures-task", 877 + "memchr", 878 + "pin-project-lite", 879 + "pin-utils", 880 + "slab", 881 + ] 882 + 883 + [[package]] 884 + name = "generator" 885 + version = "0.8.5" 886 + source = "registry+https://github.com/rust-lang/crates.io-index" 887 + checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" 888 + dependencies = [ 889 + "cc", 890 + "cfg-if", 891 + "libc", 892 + "log", 893 + "rustversion", 894 + "windows", 895 + ] 896 + 897 + [[package]] 898 + name = "generic-array" 899 + version = "0.14.7" 900 + source = "registry+https://github.com/rust-lang/crates.io-index" 901 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 902 + dependencies = [ 903 + "typenum", 904 + "version_check", 905 + ] 906 + 907 + [[package]] 908 + name = "getrandom" 909 + version = "0.2.16" 910 + source = "registry+https://github.com/rust-lang/crates.io-index" 911 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 912 + dependencies = [ 913 + "cfg-if", 914 + "libc", 915 + "wasi 0.11.1+wasi-snapshot-preview1", 916 + ] 917 + 918 + [[package]] 919 + name = "getrandom" 920 + version = "0.3.3" 921 + source = "registry+https://github.com/rust-lang/crates.io-index" 922 + checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 923 + dependencies = [ 924 + "cfg-if", 925 + "libc", 926 + "r-efi", 927 + "wasi 0.14.2+wasi-0.2.4", 928 + ] 929 + 930 + [[package]] 931 + name = "gimli" 932 + version = "0.31.1" 933 + source = "registry+https://github.com/rust-lang/crates.io-index" 934 + checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 935 + 936 + [[package]] 937 + name = "h2" 938 + version = "0.4.10" 939 + source = "registry+https://github.com/rust-lang/crates.io-index" 940 + checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" 941 + dependencies = [ 942 + "atomic-waker", 943 + "bytes", 944 + "fnv", 945 + "futures-core", 946 + "futures-sink", 947 + "http 1.3.1", 948 + "indexmap", 949 + "slab", 950 + "tokio", 951 + "tokio-util", 952 + "tracing", 953 + ] 954 + 955 + [[package]] 956 + name = "hashbrown" 957 + version = "0.14.5" 958 + source = "registry+https://github.com/rust-lang/crates.io-index" 959 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 960 + 961 + [[package]] 962 + name = "hashbrown" 963 + version = "0.15.4" 964 + source = "registry+https://github.com/rust-lang/crates.io-index" 965 + checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" 966 + dependencies = [ 967 + "allocator-api2", 968 + "equivalent", 969 + "foldhash", 970 + ] 971 + 972 + [[package]] 973 + name = "heck" 974 + version = "0.5.0" 975 + source = "registry+https://github.com/rust-lang/crates.io-index" 976 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 977 + 978 + [[package]] 979 + name = "hickory-proto" 980 + version = "0.25.2" 981 + source = "registry+https://github.com/rust-lang/crates.io-index" 982 + checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" 983 + dependencies = [ 984 + "async-trait", 985 + "cfg-if", 986 + "data-encoding", 987 + "enum-as-inner", 988 + "futures-channel", 989 + "futures-io", 990 + "futures-util", 991 + "idna", 992 + "ipnet", 993 + "once_cell", 994 + "rand", 995 + "ring", 996 + "thiserror 2.0.12", 997 + "tinyvec", 998 + "tokio", 999 + "tracing", 1000 + "url", 1001 + ] 1002 + 1003 + [[package]] 1004 + name = "hickory-resolver" 1005 + version = "0.25.2" 1006 + source = "registry+https://github.com/rust-lang/crates.io-index" 1007 + checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" 1008 + dependencies = [ 1009 + "cfg-if", 1010 + "futures-util", 1011 + "hickory-proto", 1012 + "ipconfig", 1013 + "moka", 1014 + "once_cell", 1015 + "parking_lot", 1016 + "rand", 1017 + "resolv-conf", 1018 + "smallvec", 1019 + "thiserror 2.0.12", 1020 + "tokio", 1021 + "tracing", 1022 + ] 1023 + 1024 + [[package]] 1025 + name = "http" 1026 + version = "0.2.12" 1027 + source = "registry+https://github.com/rust-lang/crates.io-index" 1028 + checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1029 + dependencies = [ 1030 + "bytes", 1031 + "fnv", 1032 + "itoa", 1033 + ] 1034 + 1035 + [[package]] 1036 + name = "http" 1037 + version = "1.3.1" 1038 + source = "registry+https://github.com/rust-lang/crates.io-index" 1039 + checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1040 + dependencies = [ 1041 + "bytes", 1042 + "fnv", 1043 + "itoa", 1044 + ] 1045 + 1046 + [[package]] 1047 + name = "http-body" 1048 + version = "1.0.1" 1049 + source = "registry+https://github.com/rust-lang/crates.io-index" 1050 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1051 + dependencies = [ 1052 + "bytes", 1053 + "http 1.3.1", 1054 + ] 1055 + 1056 + [[package]] 1057 + name = "http-body-util" 1058 + version = "0.1.3" 1059 + source = "registry+https://github.com/rust-lang/crates.io-index" 1060 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1061 + dependencies = [ 1062 + "bytes", 1063 + "futures-core", 1064 + "http 1.3.1", 1065 + "http-body", 1066 + "pin-project-lite", 1067 + ] 1068 + 1069 + [[package]] 1070 + name = "httparse" 1071 + version = "1.10.1" 1072 + source = "registry+https://github.com/rust-lang/crates.io-index" 1073 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1074 + 1075 + [[package]] 1076 + name = "hyper" 1077 + version = "1.6.0" 1078 + source = "registry+https://github.com/rust-lang/crates.io-index" 1079 + checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 1080 + dependencies = [ 1081 + "bytes", 1082 + "futures-channel", 1083 + "futures-util", 1084 + "h2", 1085 + "http 1.3.1", 1086 + "http-body", 1087 + "httparse", 1088 + "itoa", 1089 + "pin-project-lite", 1090 + "smallvec", 1091 + "tokio", 1092 + "want", 1093 + ] 1094 + 1095 + [[package]] 1096 + name = "hyper-rustls" 1097 + version = "0.27.5" 1098 + source = "registry+https://github.com/rust-lang/crates.io-index" 1099 + checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 1100 + dependencies = [ 1101 + "futures-util", 1102 + "http 1.3.1", 1103 + "hyper", 1104 + "hyper-util", 1105 + "rustls", 1106 + "rustls-pki-types", 1107 + "tokio", 1108 + "tokio-rustls", 1109 + "tower-service", 1110 + ] 1111 + 1112 + [[package]] 1113 + name = "hyper-tls" 1114 + version = "0.6.0" 1115 + source = "registry+https://github.com/rust-lang/crates.io-index" 1116 + checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 1117 + dependencies = [ 1118 + "bytes", 1119 + "http-body-util", 1120 + "hyper", 1121 + "hyper-util", 1122 + "native-tls", 1123 + "tokio", 1124 + "tokio-native-tls", 1125 + "tower-service", 1126 + ] 1127 + 1128 + [[package]] 1129 + name = "hyper-util" 1130 + version = "0.1.16" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 1133 + dependencies = [ 1134 + "base64", 1135 + "bytes", 1136 + "futures-channel", 1137 + "futures-core", 1138 + "futures-util", 1139 + "http 1.3.1", 1140 + "http-body", 1141 + "hyper", 1142 + "ipnet", 1143 + "libc", 1144 + "percent-encoding", 1145 + "pin-project-lite", 1146 + "socket2 0.6.0", 1147 + "system-configuration", 1148 + "tokio", 1149 + "tower-service", 1150 + "tracing", 1151 + "windows-registry", 1152 + ] 1153 + 1154 + [[package]] 1155 + name = "iana-time-zone" 1156 + version = "0.1.63" 1157 + source = "registry+https://github.com/rust-lang/crates.io-index" 1158 + checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1159 + dependencies = [ 1160 + "android_system_properties", 1161 + "core-foundation-sys", 1162 + "iana-time-zone-haiku", 1163 + "js-sys", 1164 + "log", 1165 + "wasm-bindgen", 1166 + "windows-core", 1167 + ] 1168 + 1169 + [[package]] 1170 + name = "iana-time-zone-haiku" 1171 + version = "0.1.2" 1172 + source = "registry+https://github.com/rust-lang/crates.io-index" 1173 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1174 + dependencies = [ 1175 + "cc", 1176 + ] 1177 + 1178 + [[package]] 1179 + name = "icu_collections" 1180 + version = "2.0.0" 1181 + source = "registry+https://github.com/rust-lang/crates.io-index" 1182 + checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1183 + dependencies = [ 1184 + "displaydoc", 1185 + "potential_utf", 1186 + "yoke", 1187 + "zerofrom", 1188 + "zerovec", 1189 + ] 1190 + 1191 + [[package]] 1192 + name = "icu_locale_core" 1193 + version = "2.0.0" 1194 + source = "registry+https://github.com/rust-lang/crates.io-index" 1195 + checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1196 + dependencies = [ 1197 + "displaydoc", 1198 + "litemap", 1199 + "tinystr", 1200 + "writeable", 1201 + "zerovec", 1202 + ] 1203 + 1204 + [[package]] 1205 + name = "icu_normalizer" 1206 + version = "2.0.0" 1207 + source = "registry+https://github.com/rust-lang/crates.io-index" 1208 + checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1209 + dependencies = [ 1210 + "displaydoc", 1211 + "icu_collections", 1212 + "icu_normalizer_data", 1213 + "icu_properties", 1214 + "icu_provider", 1215 + "smallvec", 1216 + "zerovec", 1217 + ] 1218 + 1219 + [[package]] 1220 + name = "icu_normalizer_data" 1221 + version = "2.0.0" 1222 + source = "registry+https://github.com/rust-lang/crates.io-index" 1223 + checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1224 + 1225 + [[package]] 1226 + name = "icu_properties" 1227 + version = "2.0.1" 1228 + source = "registry+https://github.com/rust-lang/crates.io-index" 1229 + checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1230 + dependencies = [ 1231 + "displaydoc", 1232 + "icu_collections", 1233 + "icu_locale_core", 1234 + "icu_properties_data", 1235 + "icu_provider", 1236 + "potential_utf", 1237 + "zerotrie", 1238 + "zerovec", 1239 + ] 1240 + 1241 + [[package]] 1242 + name = "icu_properties_data" 1243 + version = "2.0.1" 1244 + source = "registry+https://github.com/rust-lang/crates.io-index" 1245 + checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1246 + 1247 + [[package]] 1248 + name = "icu_provider" 1249 + version = "2.0.0" 1250 + source = "registry+https://github.com/rust-lang/crates.io-index" 1251 + checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1252 + dependencies = [ 1253 + "displaydoc", 1254 + "icu_locale_core", 1255 + "stable_deref_trait", 1256 + "tinystr", 1257 + "writeable", 1258 + "yoke", 1259 + "zerofrom", 1260 + "zerotrie", 1261 + "zerovec", 1262 + ] 1263 + 1264 + [[package]] 1265 + name = "idna" 1266 + version = "1.0.3" 1267 + source = "registry+https://github.com/rust-lang/crates.io-index" 1268 + checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1269 + dependencies = [ 1270 + "idna_adapter", 1271 + "smallvec", 1272 + "utf8_iter", 1273 + ] 1274 + 1275 + [[package]] 1276 + name = "idna_adapter" 1277 + version = "1.2.1" 1278 + source = "registry+https://github.com/rust-lang/crates.io-index" 1279 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1280 + dependencies = [ 1281 + "icu_normalizer", 1282 + "icu_properties", 1283 + ] 1284 + 1285 + [[package]] 1286 + name = "indexmap" 1287 + version = "2.10.0" 1288 + source = "registry+https://github.com/rust-lang/crates.io-index" 1289 + checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" 1290 + dependencies = [ 1291 + "equivalent", 1292 + "hashbrown 0.15.4", 1293 + ] 1294 + 1295 + [[package]] 1296 + name = "indicatif" 1297 + version = "0.18.0" 1298 + source = "registry+https://github.com/rust-lang/crates.io-index" 1299 + checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" 1300 + dependencies = [ 1301 + "console", 1302 + "portable-atomic", 1303 + "unicode-width", 1304 + "unit-prefix", 1305 + "web-time", 1306 + ] 1307 + 1308 + [[package]] 1309 + name = "instant" 1310 + version = "0.1.13" 1311 + source = "registry+https://github.com/rust-lang/crates.io-index" 1312 + checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1313 + dependencies = [ 1314 + "cfg-if", 1315 + ] 1316 + 1317 + [[package]] 1318 + name = "io-uring" 1319 + version = "0.7.9" 1320 + source = "registry+https://github.com/rust-lang/crates.io-index" 1321 + checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" 1322 + dependencies = [ 1323 + "bitflags 2.9.1", 1324 + "cfg-if", 1325 + "libc", 1326 + ] 1327 + 1328 + [[package]] 1329 + name = "ipconfig" 1330 + version = "0.3.2" 1331 + source = "registry+https://github.com/rust-lang/crates.io-index" 1332 + checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1333 + dependencies = [ 1334 + "socket2 0.5.10", 1335 + "widestring", 1336 + "windows-sys 0.48.0", 1337 + "winreg", 1338 + ] 1339 + 1340 + [[package]] 1341 + name = "ipld-core" 1342 + version = "0.4.2" 1343 + source = "registry+https://github.com/rust-lang/crates.io-index" 1344 + checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db" 1345 + dependencies = [ 1346 + "cid", 1347 + "serde", 1348 + "serde_bytes", 1349 + ] 1350 + 1351 + [[package]] 1352 + name = "ipnet" 1353 + version = "2.11.0" 1354 + source = "registry+https://github.com/rust-lang/crates.io-index" 1355 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1356 + 1357 + [[package]] 1358 + name = "iri-string" 1359 + version = "0.7.8" 1360 + source = "registry+https://github.com/rust-lang/crates.io-index" 1361 + checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 1362 + dependencies = [ 1363 + "memchr", 1364 + "serde", 1365 + ] 1366 + 1367 + [[package]] 1368 + name = "is_terminal_polyfill" 1369 + version = "1.70.1" 1370 + source = "registry+https://github.com/rust-lang/crates.io-index" 1371 + checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1372 + 1373 + [[package]] 1374 + name = "isahc" 1375 + version = "1.7.2" 1376 + source = "registry+https://github.com/rust-lang/crates.io-index" 1377 + checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" 1378 + dependencies = [ 1379 + "async-channel", 1380 + "castaway", 1381 + "crossbeam-utils", 1382 + "curl", 1383 + "curl-sys", 1384 + "encoding_rs", 1385 + "event-listener 2.5.3", 1386 + "futures-lite", 1387 + "http 0.2.12", 1388 + "log", 1389 + "mime", 1390 + "once_cell", 1391 + "polling", 1392 + "slab", 1393 + "sluice", 1394 + "tracing", 1395 + "tracing-futures", 1396 + "url", 1397 + "waker-fn", 1398 + ] 1399 + 1400 + [[package]] 1401 + name = "itoa" 1402 + version = "1.0.15" 1403 + source = "registry+https://github.com/rust-lang/crates.io-index" 1404 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1405 + 1406 + [[package]] 1407 + name = "js-sys" 1408 + version = "0.3.77" 1409 + source = "registry+https://github.com/rust-lang/crates.io-index" 1410 + checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1411 + dependencies = [ 1412 + "once_cell", 1413 + "wasm-bindgen", 1414 + ] 1415 + 1416 + [[package]] 1417 + name = "langtag" 1418 + version = "0.3.4" 1419 + source = "registry+https://github.com/rust-lang/crates.io-index" 1420 + checksum = "ed60c85f254d6ae8450cec15eedd921efbc4d1bdf6fcf6202b9a58b403f6f805" 1421 + dependencies = [ 1422 + "serde", 1423 + ] 1424 + 1425 + [[package]] 1426 + name = "lazy_static" 1427 + version = "1.5.0" 1428 + source = "registry+https://github.com/rust-lang/crates.io-index" 1429 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1430 + 1431 + [[package]] 1432 + name = "libc" 1433 + version = "0.2.174" 1434 + source = "registry+https://github.com/rust-lang/crates.io-index" 1435 + checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 1436 + 1437 + [[package]] 1438 + name = "libnghttp2-sys" 1439 + version = "0.1.11+1.64.0" 1440 + source = "registry+https://github.com/rust-lang/crates.io-index" 1441 + checksum = "1b6c24e48a7167cffa7119da39d577fa482e66c688a4aac016bee862e1a713c4" 1442 + dependencies = [ 1443 + "cc", 1444 + "libc", 1445 + ] 1446 + 1447 + [[package]] 1448 + name = "libz-sys" 1449 + version = "1.1.22" 1450 + source = "registry+https://github.com/rust-lang/crates.io-index" 1451 + checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" 1452 + dependencies = [ 1453 + "cc", 1454 + "libc", 1455 + "pkg-config", 1456 + "vcpkg", 1457 + ] 1458 + 1459 + [[package]] 1460 + name = "linux-raw-sys" 1461 + version = "0.9.4" 1462 + source = "registry+https://github.com/rust-lang/crates.io-index" 1463 + checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1464 + 1465 + [[package]] 1466 + name = "litemap" 1467 + version = "0.8.0" 1468 + source = "registry+https://github.com/rust-lang/crates.io-index" 1469 + checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1470 + 1471 + [[package]] 1472 + name = "lock_api" 1473 + version = "0.4.13" 1474 + source = "registry+https://github.com/rust-lang/crates.io-index" 1475 + checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 1476 + dependencies = [ 1477 + "autocfg", 1478 + "scopeguard", 1479 + ] 1480 + 1481 + [[package]] 1482 + name = "log" 1483 + version = "0.4.27" 1484 + source = "registry+https://github.com/rust-lang/crates.io-index" 1485 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1486 + 1487 + [[package]] 1488 + name = "loom" 1489 + version = "0.7.2" 1490 + source = "registry+https://github.com/rust-lang/crates.io-index" 1491 + checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 1492 + dependencies = [ 1493 + "cfg-if", 1494 + "generator", 1495 + "scoped-tls", 1496 + "tracing", 1497 + "tracing-subscriber", 1498 + ] 1499 + 1500 + [[package]] 1501 + name = "lru" 1502 + version = "0.12.5" 1503 + source = "registry+https://github.com/rust-lang/crates.io-index" 1504 + checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 1505 + dependencies = [ 1506 + "hashbrown 0.15.4", 1507 + ] 1508 + 1509 + [[package]] 1510 + name = "matchers" 1511 + version = "0.1.0" 1512 + source = "registry+https://github.com/rust-lang/crates.io-index" 1513 + checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1514 + dependencies = [ 1515 + "regex-automata 0.1.10", 1516 + ] 1517 + 1518 + [[package]] 1519 + name = "memchr" 1520 + version = "2.7.5" 1521 + source = "registry+https://github.com/rust-lang/crates.io-index" 1522 + checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 1523 + 1524 + [[package]] 1525 + name = "mime" 1526 + version = "0.3.17" 1527 + source = "registry+https://github.com/rust-lang/crates.io-index" 1528 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1529 + 1530 + [[package]] 1531 + name = "miniz_oxide" 1532 + version = "0.8.9" 1533 + source = "registry+https://github.com/rust-lang/crates.io-index" 1534 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1535 + dependencies = [ 1536 + "adler2", 1537 + ] 1538 + 1539 + [[package]] 1540 + name = "mio" 1541 + version = "1.0.4" 1542 + source = "registry+https://github.com/rust-lang/crates.io-index" 1543 + checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 1544 + dependencies = [ 1545 + "libc", 1546 + "wasi 0.11.1+wasi-snapshot-preview1", 1547 + "windows-sys 0.59.0", 1548 + ] 1549 + 1550 + [[package]] 1551 + name = "moka" 1552 + version = "0.12.10" 1553 + source = "registry+https://github.com/rust-lang/crates.io-index" 1554 + checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" 1555 + dependencies = [ 1556 + "async-lock", 1557 + "crossbeam-channel", 1558 + "crossbeam-epoch", 1559 + "crossbeam-utils", 1560 + "event-listener 5.4.0", 1561 + "futures-util", 1562 + "loom", 1563 + "parking_lot", 1564 + "portable-atomic", 1565 + "rustc_version", 1566 + "smallvec", 1567 + "tagptr", 1568 + "thiserror 1.0.69", 1569 + "uuid", 1570 + ] 1571 + 1572 + [[package]] 1573 + name = "multibase" 1574 + version = "0.9.1" 1575 + source = "registry+https://github.com/rust-lang/crates.io-index" 1576 + checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" 1577 + dependencies = [ 1578 + "base-x", 1579 + "data-encoding", 1580 + "data-encoding-macro", 1581 + ] 1582 + 1583 + [[package]] 1584 + name = "multihash" 1585 + version = "0.19.3" 1586 + source = "registry+https://github.com/rust-lang/crates.io-index" 1587 + checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 1588 + dependencies = [ 1589 + "core2", 1590 + "serde", 1591 + "unsigned-varint", 1592 + ] 1593 + 1594 + [[package]] 1595 + name = "native-tls" 1596 + version = "0.2.14" 1597 + source = "registry+https://github.com/rust-lang/crates.io-index" 1598 + checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 1599 + dependencies = [ 1600 + "libc", 1601 + "log", 1602 + "openssl", 1603 + "openssl-probe", 1604 + "openssl-sys", 1605 + "schannel", 1606 + "security-framework", 1607 + "security-framework-sys", 1608 + "tempfile", 1609 + ] 1610 + 1611 + [[package]] 1612 + name = "nix" 1613 + version = "0.29.0" 1614 + source = "registry+https://github.com/rust-lang/crates.io-index" 1615 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 1616 + dependencies = [ 1617 + "bitflags 2.9.1", 1618 + "cfg-if", 1619 + "cfg_aliases", 1620 + "libc", 1621 + ] 1622 + 1623 + [[package]] 1624 + name = "nu-ansi-term" 1625 + version = "0.46.0" 1626 + source = "registry+https://github.com/rust-lang/crates.io-index" 1627 + checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 1628 + dependencies = [ 1629 + "overload", 1630 + "winapi", 1631 + ] 1632 + 1633 + [[package]] 1634 + name = "num-traits" 1635 + version = "0.2.19" 1636 + source = "registry+https://github.com/rust-lang/crates.io-index" 1637 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1638 + dependencies = [ 1639 + "autocfg", 1640 + ] 1641 + 1642 + [[package]] 1643 + name = "object" 1644 + version = "0.36.7" 1645 + source = "registry+https://github.com/rust-lang/crates.io-index" 1646 + checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1647 + dependencies = [ 1648 + "memchr", 1649 + ] 1650 + 1651 + [[package]] 1652 + name = "once_cell" 1653 + version = "1.21.3" 1654 + source = "registry+https://github.com/rust-lang/crates.io-index" 1655 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1656 + dependencies = [ 1657 + "critical-section", 1658 + "portable-atomic", 1659 + ] 1660 + 1661 + [[package]] 1662 + name = "once_cell_polyfill" 1663 + version = "1.70.1" 1664 + source = "registry+https://github.com/rust-lang/crates.io-index" 1665 + checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 1666 + 1667 + [[package]] 1668 + name = "openssl" 1669 + version = "0.10.73" 1670 + source = "registry+https://github.com/rust-lang/crates.io-index" 1671 + checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 1672 + dependencies = [ 1673 + "bitflags 2.9.1", 1674 + "cfg-if", 1675 + "foreign-types", 1676 + "libc", 1677 + "once_cell", 1678 + "openssl-macros", 1679 + "openssl-sys", 1680 + ] 1681 + 1682 + [[package]] 1683 + name = "openssl-macros" 1684 + version = "0.1.1" 1685 + source = "registry+https://github.com/rust-lang/crates.io-index" 1686 + checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1687 + dependencies = [ 1688 + "proc-macro2", 1689 + "quote", 1690 + "syn", 1691 + ] 1692 + 1693 + [[package]] 1694 + name = "openssl-probe" 1695 + version = "0.1.6" 1696 + source = "registry+https://github.com/rust-lang/crates.io-index" 1697 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1698 + 1699 + [[package]] 1700 + name = "openssl-sys" 1701 + version = "0.9.109" 1702 + source = "registry+https://github.com/rust-lang/crates.io-index" 1703 + checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 1704 + dependencies = [ 1705 + "cc", 1706 + "libc", 1707 + "pkg-config", 1708 + "vcpkg", 1709 + ] 1710 + 1711 + [[package]] 1712 + name = "overload" 1713 + version = "0.1.1" 1714 + source = "registry+https://github.com/rust-lang/crates.io-index" 1715 + checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 1716 + 1717 + [[package]] 1718 + name = "page_size" 1719 + version = "0.6.0" 1720 + source = "registry+https://github.com/rust-lang/crates.io-index" 1721 + checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" 1722 + dependencies = [ 1723 + "libc", 1724 + "winapi", 1725 + ] 1726 + 1727 + [[package]] 1728 + name = "parking" 1729 + version = "2.2.1" 1730 + source = "registry+https://github.com/rust-lang/crates.io-index" 1731 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 1732 + 1733 + [[package]] 1734 + name = "parking_lot" 1735 + version = "0.12.4" 1736 + source = "registry+https://github.com/rust-lang/crates.io-index" 1737 + checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" 1738 + dependencies = [ 1739 + "lock_api", 1740 + "parking_lot_core", 1741 + ] 1742 + 1743 + [[package]] 1744 + name = "parking_lot_core" 1745 + version = "0.9.11" 1746 + source = "registry+https://github.com/rust-lang/crates.io-index" 1747 + checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 1748 + dependencies = [ 1749 + "cfg-if", 1750 + "libc", 1751 + "redox_syscall", 1752 + "smallvec", 1753 + "windows-targets 0.52.6", 1754 + ] 1755 + 1756 + [[package]] 1757 + name = "pdsfs" 1758 + version = "0.1.0" 1759 + dependencies = [ 1760 + "atrium-api", 1761 + "atrium-common", 1762 + "atrium-identity", 1763 + "atrium-repo", 1764 + "atrium-xrpc", 1765 + "atrium-xrpc-client", 1766 + "clap", 1767 + "fuser", 1768 + "futures", 1769 + "hickory-resolver", 1770 + "indexmap", 1771 + "indicatif", 1772 + "ipld-core", 1773 + "libc", 1774 + "reqwest", 1775 + "serde_ipld_dagcbor", 1776 + "serde_json", 1777 + "thiserror 2.0.12", 1778 + "tokio", 1779 + "xdg", 1780 + ] 1781 + 1782 + [[package]] 1783 + name = "percent-encoding" 1784 + version = "2.3.1" 1785 + source = "registry+https://github.com/rust-lang/crates.io-index" 1786 + checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1787 + 1788 + [[package]] 1789 + name = "pin-project" 1790 + version = "1.1.10" 1791 + source = "registry+https://github.com/rust-lang/crates.io-index" 1792 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 1793 + dependencies = [ 1794 + "pin-project-internal", 1795 + ] 1796 + 1797 + [[package]] 1798 + name = "pin-project-internal" 1799 + version = "1.1.10" 1800 + source = "registry+https://github.com/rust-lang/crates.io-index" 1801 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 1802 + dependencies = [ 1803 + "proc-macro2", 1804 + "quote", 1805 + "syn", 1806 + ] 1807 + 1808 + [[package]] 1809 + name = "pin-project-lite" 1810 + version = "0.2.16" 1811 + source = "registry+https://github.com/rust-lang/crates.io-index" 1812 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1813 + 1814 + [[package]] 1815 + name = "pin-utils" 1816 + version = "0.1.0" 1817 + source = "registry+https://github.com/rust-lang/crates.io-index" 1818 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1819 + 1820 + [[package]] 1821 + name = "pkg-config" 1822 + version = "0.3.32" 1823 + source = "registry+https://github.com/rust-lang/crates.io-index" 1824 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1825 + 1826 + [[package]] 1827 + name = "polling" 1828 + version = "2.8.0" 1829 + source = "registry+https://github.com/rust-lang/crates.io-index" 1830 + checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" 1831 + dependencies = [ 1832 + "autocfg", 1833 + "bitflags 1.3.2", 1834 + "cfg-if", 1835 + "concurrent-queue", 1836 + "libc", 1837 + "log", 1838 + "pin-project-lite", 1839 + "windows-sys 0.48.0", 1840 + ] 1841 + 1842 + [[package]] 1843 + name = "portable-atomic" 1844 + version = "1.11.1" 1845 + source = "registry+https://github.com/rust-lang/crates.io-index" 1846 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 1847 + 1848 + [[package]] 1849 + name = "potential_utf" 1850 + version = "0.1.2" 1851 + source = "registry+https://github.com/rust-lang/crates.io-index" 1852 + checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 1853 + dependencies = [ 1854 + "zerovec", 1855 + ] 1856 + 1857 + [[package]] 1858 + name = "ppv-lite86" 1859 + version = "0.2.21" 1860 + source = "registry+https://github.com/rust-lang/crates.io-index" 1861 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1862 + dependencies = [ 1863 + "zerocopy", 1864 + ] 1865 + 1866 + [[package]] 1867 + name = "proc-macro2" 1868 + version = "1.0.95" 1869 + source = "registry+https://github.com/rust-lang/crates.io-index" 1870 + checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 1871 + dependencies = [ 1872 + "unicode-ident", 1873 + ] 1874 + 1875 + [[package]] 1876 + name = "quote" 1877 + version = "1.0.40" 1878 + source = "registry+https://github.com/rust-lang/crates.io-index" 1879 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1880 + dependencies = [ 1881 + "proc-macro2", 1882 + ] 1883 + 1884 + [[package]] 1885 + name = "r-efi" 1886 + version = "5.3.0" 1887 + source = "registry+https://github.com/rust-lang/crates.io-index" 1888 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 1889 + 1890 + [[package]] 1891 + name = "rand" 1892 + version = "0.9.2" 1893 + source = "registry+https://github.com/rust-lang/crates.io-index" 1894 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 1895 + dependencies = [ 1896 + "rand_chacha", 1897 + "rand_core", 1898 + ] 1899 + 1900 + [[package]] 1901 + name = "rand_chacha" 1902 + version = "0.9.0" 1903 + source = "registry+https://github.com/rust-lang/crates.io-index" 1904 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 1905 + dependencies = [ 1906 + "ppv-lite86", 1907 + "rand_core", 1908 + ] 1909 + 1910 + [[package]] 1911 + name = "rand_core" 1912 + version = "0.9.3" 1913 + source = "registry+https://github.com/rust-lang/crates.io-index" 1914 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 1915 + dependencies = [ 1916 + "getrandom 0.3.3", 1917 + ] 1918 + 1919 + [[package]] 1920 + name = "redox_syscall" 1921 + version = "0.5.15" 1922 + source = "registry+https://github.com/rust-lang/crates.io-index" 1923 + checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec" 1924 + dependencies = [ 1925 + "bitflags 2.9.1", 1926 + ] 1927 + 1928 + [[package]] 1929 + name = "regex" 1930 + version = "1.11.1" 1931 + source = "registry+https://github.com/rust-lang/crates.io-index" 1932 + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1933 + dependencies = [ 1934 + "aho-corasick", 1935 + "memchr", 1936 + "regex-automata 0.4.9", 1937 + "regex-syntax 0.8.5", 1938 + ] 1939 + 1940 + [[package]] 1941 + name = "regex-automata" 1942 + version = "0.1.10" 1943 + source = "registry+https://github.com/rust-lang/crates.io-index" 1944 + checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1945 + dependencies = [ 1946 + "regex-syntax 0.6.29", 1947 + ] 1948 + 1949 + [[package]] 1950 + name = "regex-automata" 1951 + version = "0.4.9" 1952 + source = "registry+https://github.com/rust-lang/crates.io-index" 1953 + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1954 + dependencies = [ 1955 + "aho-corasick", 1956 + "memchr", 1957 + "regex-syntax 0.8.5", 1958 + ] 1959 + 1960 + [[package]] 1961 + name = "regex-syntax" 1962 + version = "0.6.29" 1963 + source = "registry+https://github.com/rust-lang/crates.io-index" 1964 + checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1965 + 1966 + [[package]] 1967 + name = "regex-syntax" 1968 + version = "0.8.5" 1969 + source = "registry+https://github.com/rust-lang/crates.io-index" 1970 + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1971 + 1972 + [[package]] 1973 + name = "reqwest" 1974 + version = "0.12.22" 1975 + source = "registry+https://github.com/rust-lang/crates.io-index" 1976 + checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" 1977 + dependencies = [ 1978 + "async-compression", 1979 + "base64", 1980 + "bytes", 1981 + "encoding_rs", 1982 + "futures-core", 1983 + "futures-util", 1984 + "h2", 1985 + "http 1.3.1", 1986 + "http-body", 1987 + "http-body-util", 1988 + "hyper", 1989 + "hyper-rustls", 1990 + "hyper-tls", 1991 + "hyper-util", 1992 + "js-sys", 1993 + "log", 1994 + "mime", 1995 + "native-tls", 1996 + "percent-encoding", 1997 + "pin-project-lite", 1998 + "rustls-pki-types", 1999 + "serde", 2000 + "serde_json", 2001 + "serde_urlencoded", 2002 + "sync_wrapper", 2003 + "tokio", 2004 + "tokio-native-tls", 2005 + "tokio-util", 2006 + "tower", 2007 + "tower-http", 2008 + "tower-service", 2009 + "url", 2010 + "wasm-bindgen", 2011 + "wasm-bindgen-futures", 2012 + "web-sys", 2013 + ] 2014 + 2015 + [[package]] 2016 + name = "resolv-conf" 2017 + version = "0.7.4" 2018 + source = "registry+https://github.com/rust-lang/crates.io-index" 2019 + checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" 2020 + 2021 + [[package]] 2022 + name = "ring" 2023 + version = "0.17.14" 2024 + source = "registry+https://github.com/rust-lang/crates.io-index" 2025 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2026 + dependencies = [ 2027 + "cc", 2028 + "cfg-if", 2029 + "getrandom 0.2.16", 2030 + "libc", 2031 + "untrusted", 2032 + "windows-sys 0.52.0", 2033 + ] 2034 + 2035 + [[package]] 2036 + name = "rustc-demangle" 2037 + version = "0.1.25" 2038 + source = "registry+https://github.com/rust-lang/crates.io-index" 2039 + checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" 2040 + 2041 + [[package]] 2042 + name = "rustc_version" 2043 + version = "0.4.1" 2044 + source = "registry+https://github.com/rust-lang/crates.io-index" 2045 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2046 + dependencies = [ 2047 + "semver", 2048 + ] 2049 + 2050 + [[package]] 2051 + name = "rustix" 2052 + version = "1.0.8" 2053 + source = "registry+https://github.com/rust-lang/crates.io-index" 2054 + checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 2055 + dependencies = [ 2056 + "bitflags 2.9.1", 2057 + "errno", 2058 + "libc", 2059 + "linux-raw-sys", 2060 + "windows-sys 0.59.0", 2061 + ] 2062 + 2063 + [[package]] 2064 + name = "rustls" 2065 + version = "0.23.29" 2066 + source = "registry+https://github.com/rust-lang/crates.io-index" 2067 + checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" 2068 + dependencies = [ 2069 + "once_cell", 2070 + "rustls-pki-types", 2071 + "rustls-webpki", 2072 + "subtle", 2073 + "zeroize", 2074 + ] 2075 + 2076 + [[package]] 2077 + name = "rustls-pki-types" 2078 + version = "1.12.0" 2079 + source = "registry+https://github.com/rust-lang/crates.io-index" 2080 + checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 2081 + dependencies = [ 2082 + "zeroize", 2083 + ] 2084 + 2085 + [[package]] 2086 + name = "rustls-webpki" 2087 + version = "0.103.4" 2088 + source = "registry+https://github.com/rust-lang/crates.io-index" 2089 + checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 2090 + dependencies = [ 2091 + "ring", 2092 + "rustls-pki-types", 2093 + "untrusted", 2094 + ] 2095 + 2096 + [[package]] 2097 + name = "rustversion" 2098 + version = "1.0.21" 2099 + source = "registry+https://github.com/rust-lang/crates.io-index" 2100 + checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 2101 + 2102 + [[package]] 2103 + name = "ryu" 2104 + version = "1.0.20" 2105 + source = "registry+https://github.com/rust-lang/crates.io-index" 2106 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 2107 + 2108 + [[package]] 2109 + name = "schannel" 2110 + version = "0.1.27" 2111 + source = "registry+https://github.com/rust-lang/crates.io-index" 2112 + checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 2113 + dependencies = [ 2114 + "windows-sys 0.59.0", 2115 + ] 2116 + 2117 + [[package]] 2118 + name = "scoped-tls" 2119 + version = "1.0.1" 2120 + source = "registry+https://github.com/rust-lang/crates.io-index" 2121 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2122 + 2123 + [[package]] 2124 + name = "scopeguard" 2125 + version = "1.2.0" 2126 + source = "registry+https://github.com/rust-lang/crates.io-index" 2127 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2128 + 2129 + [[package]] 2130 + name = "security-framework" 2131 + version = "2.11.1" 2132 + source = "registry+https://github.com/rust-lang/crates.io-index" 2133 + checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2134 + dependencies = [ 2135 + "bitflags 2.9.1", 2136 + "core-foundation", 2137 + "core-foundation-sys", 2138 + "libc", 2139 + "security-framework-sys", 2140 + ] 2141 + 2142 + [[package]] 2143 + name = "security-framework-sys" 2144 + version = "2.14.0" 2145 + source = "registry+https://github.com/rust-lang/crates.io-index" 2146 + checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 2147 + dependencies = [ 2148 + "core-foundation-sys", 2149 + "libc", 2150 + ] 2151 + 2152 + [[package]] 2153 + name = "semver" 2154 + version = "1.0.26" 2155 + source = "registry+https://github.com/rust-lang/crates.io-index" 2156 + checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 2157 + 2158 + [[package]] 2159 + name = "serde" 2160 + version = "1.0.219" 2161 + source = "registry+https://github.com/rust-lang/crates.io-index" 2162 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 2163 + dependencies = [ 2164 + "serde_derive", 2165 + ] 2166 + 2167 + [[package]] 2168 + name = "serde_bytes" 2169 + version = "0.11.17" 2170 + source = "registry+https://github.com/rust-lang/crates.io-index" 2171 + checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" 2172 + dependencies = [ 2173 + "serde", 2174 + ] 2175 + 2176 + [[package]] 2177 + name = "serde_derive" 2178 + version = "1.0.219" 2179 + source = "registry+https://github.com/rust-lang/crates.io-index" 2180 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 2181 + dependencies = [ 2182 + "proc-macro2", 2183 + "quote", 2184 + "syn", 2185 + ] 2186 + 2187 + [[package]] 2188 + name = "serde_html_form" 2189 + version = "0.2.7" 2190 + source = "registry+https://github.com/rust-lang/crates.io-index" 2191 + checksum = "9d2de91cf02bbc07cde38891769ccd5d4f073d22a40683aa4bc7a95781aaa2c4" 2192 + dependencies = [ 2193 + "form_urlencoded", 2194 + "indexmap", 2195 + "itoa", 2196 + "ryu", 2197 + "serde", 2198 + ] 2199 + 2200 + [[package]] 2201 + name = "serde_ipld_dagcbor" 2202 + version = "0.6.3" 2203 + source = "registry+https://github.com/rust-lang/crates.io-index" 2204 + checksum = "99600723cf53fb000a66175555098db7e75217c415bdd9a16a65d52a19dcc4fc" 2205 + dependencies = [ 2206 + "cbor4ii", 2207 + "ipld-core", 2208 + "scopeguard", 2209 + "serde", 2210 + ] 2211 + 2212 + [[package]] 2213 + name = "serde_json" 2214 + version = "1.0.141" 2215 + source = "registry+https://github.com/rust-lang/crates.io-index" 2216 + checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" 2217 + dependencies = [ 2218 + "itoa", 2219 + "memchr", 2220 + "ryu", 2221 + "serde", 2222 + ] 2223 + 2224 + [[package]] 2225 + name = "serde_urlencoded" 2226 + version = "0.7.1" 2227 + source = "registry+https://github.com/rust-lang/crates.io-index" 2228 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2229 + dependencies = [ 2230 + "form_urlencoded", 2231 + "itoa", 2232 + "ryu", 2233 + "serde", 2234 + ] 2235 + 2236 + [[package]] 2237 + name = "sha2" 2238 + version = "0.10.9" 2239 + source = "registry+https://github.com/rust-lang/crates.io-index" 2240 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 2241 + dependencies = [ 2242 + "cfg-if", 2243 + "cpufeatures", 2244 + "digest", 2245 + ] 2246 + 2247 + [[package]] 2248 + name = "sharded-slab" 2249 + version = "0.1.7" 2250 + source = "registry+https://github.com/rust-lang/crates.io-index" 2251 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2252 + dependencies = [ 2253 + "lazy_static", 2254 + ] 2255 + 2256 + [[package]] 2257 + name = "shlex" 2258 + version = "1.3.0" 2259 + source = "registry+https://github.com/rust-lang/crates.io-index" 2260 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2261 + 2262 + [[package]] 2263 + name = "slab" 2264 + version = "0.4.10" 2265 + source = "registry+https://github.com/rust-lang/crates.io-index" 2266 + checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" 2267 + 2268 + [[package]] 2269 + name = "sluice" 2270 + version = "0.5.5" 2271 + source = "registry+https://github.com/rust-lang/crates.io-index" 2272 + checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" 2273 + dependencies = [ 2274 + "async-channel", 2275 + "futures-core", 2276 + "futures-io", 2277 + ] 2278 + 2279 + [[package]] 2280 + name = "smallvec" 2281 + version = "1.15.1" 2282 + source = "registry+https://github.com/rust-lang/crates.io-index" 2283 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2284 + 2285 + [[package]] 2286 + name = "socket2" 2287 + version = "0.5.10" 2288 + source = "registry+https://github.com/rust-lang/crates.io-index" 2289 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 2290 + dependencies = [ 2291 + "libc", 2292 + "windows-sys 0.52.0", 2293 + ] 2294 + 2295 + [[package]] 2296 + name = "socket2" 2297 + version = "0.6.0" 2298 + source = "registry+https://github.com/rust-lang/crates.io-index" 2299 + checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 2300 + dependencies = [ 2301 + "libc", 2302 + "windows-sys 0.59.0", 2303 + ] 2304 + 2305 + [[package]] 2306 + name = "stable_deref_trait" 2307 + version = "1.2.0" 2308 + source = "registry+https://github.com/rust-lang/crates.io-index" 2309 + checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2310 + 2311 + [[package]] 2312 + name = "strsim" 2313 + version = "0.11.1" 2314 + source = "registry+https://github.com/rust-lang/crates.io-index" 2315 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2316 + 2317 + [[package]] 2318 + name = "subtle" 2319 + version = "2.6.1" 2320 + source = "registry+https://github.com/rust-lang/crates.io-index" 2321 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2322 + 2323 + [[package]] 2324 + name = "syn" 2325 + version = "2.0.104" 2326 + source = "registry+https://github.com/rust-lang/crates.io-index" 2327 + checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 2328 + dependencies = [ 2329 + "proc-macro2", 2330 + "quote", 2331 + "unicode-ident", 2332 + ] 2333 + 2334 + [[package]] 2335 + name = "sync_wrapper" 2336 + version = "1.0.2" 2337 + source = "registry+https://github.com/rust-lang/crates.io-index" 2338 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 2339 + dependencies = [ 2340 + "futures-core", 2341 + ] 2342 + 2343 + [[package]] 2344 + name = "synstructure" 2345 + version = "0.13.2" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2348 + dependencies = [ 2349 + "proc-macro2", 2350 + "quote", 2351 + "syn", 2352 + ] 2353 + 2354 + [[package]] 2355 + name = "system-configuration" 2356 + version = "0.6.1" 2357 + source = "registry+https://github.com/rust-lang/crates.io-index" 2358 + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 2359 + dependencies = [ 2360 + "bitflags 2.9.1", 2361 + "core-foundation", 2362 + "system-configuration-sys", 2363 + ] 2364 + 2365 + [[package]] 2366 + name = "system-configuration-sys" 2367 + version = "0.6.0" 2368 + source = "registry+https://github.com/rust-lang/crates.io-index" 2369 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 2370 + dependencies = [ 2371 + "core-foundation-sys", 2372 + "libc", 2373 + ] 2374 + 2375 + [[package]] 2376 + name = "tagptr" 2377 + version = "0.2.0" 2378 + source = "registry+https://github.com/rust-lang/crates.io-index" 2379 + checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 2380 + 2381 + [[package]] 2382 + name = "tempfile" 2383 + version = "3.20.0" 2384 + source = "registry+https://github.com/rust-lang/crates.io-index" 2385 + checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 2386 + dependencies = [ 2387 + "fastrand 2.3.0", 2388 + "getrandom 0.3.3", 2389 + "once_cell", 2390 + "rustix", 2391 + "windows-sys 0.59.0", 2392 + ] 2393 + 2394 + [[package]] 2395 + name = "thiserror" 2396 + version = "1.0.69" 2397 + source = "registry+https://github.com/rust-lang/crates.io-index" 2398 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2399 + dependencies = [ 2400 + "thiserror-impl 1.0.69", 2401 + ] 2402 + 2403 + [[package]] 2404 + name = "thiserror" 2405 + version = "2.0.12" 2406 + source = "registry+https://github.com/rust-lang/crates.io-index" 2407 + checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 2408 + dependencies = [ 2409 + "thiserror-impl 2.0.12", 2410 + ] 2411 + 2412 + [[package]] 2413 + name = "thiserror-impl" 2414 + version = "1.0.69" 2415 + source = "registry+https://github.com/rust-lang/crates.io-index" 2416 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2417 + dependencies = [ 2418 + "proc-macro2", 2419 + "quote", 2420 + "syn", 2421 + ] 2422 + 2423 + [[package]] 2424 + name = "thiserror-impl" 2425 + version = "2.0.12" 2426 + source = "registry+https://github.com/rust-lang/crates.io-index" 2427 + checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 2428 + dependencies = [ 2429 + "proc-macro2", 2430 + "quote", 2431 + "syn", 2432 + ] 2433 + 2434 + [[package]] 2435 + name = "thread_local" 2436 + version = "1.1.9" 2437 + source = "registry+https://github.com/rust-lang/crates.io-index" 2438 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 2439 + dependencies = [ 2440 + "cfg-if", 2441 + ] 2442 + 2443 + [[package]] 2444 + name = "tinystr" 2445 + version = "0.8.1" 2446 + source = "registry+https://github.com/rust-lang/crates.io-index" 2447 + checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2448 + dependencies = [ 2449 + "displaydoc", 2450 + "zerovec", 2451 + ] 2452 + 2453 + [[package]] 2454 + name = "tinyvec" 2455 + version = "1.9.0" 2456 + source = "registry+https://github.com/rust-lang/crates.io-index" 2457 + checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 2458 + dependencies = [ 2459 + "tinyvec_macros", 2460 + ] 2461 + 2462 + [[package]] 2463 + name = "tinyvec_macros" 2464 + version = "0.1.1" 2465 + source = "registry+https://github.com/rust-lang/crates.io-index" 2466 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2467 + 2468 + [[package]] 2469 + name = "tokio" 2470 + version = "1.46.1" 2471 + source = "registry+https://github.com/rust-lang/crates.io-index" 2472 + checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" 2473 + dependencies = [ 2474 + "backtrace", 2475 + "bytes", 2476 + "io-uring", 2477 + "libc", 2478 + "mio", 2479 + "pin-project-lite", 2480 + "slab", 2481 + "socket2 0.5.10", 2482 + "tokio-macros", 2483 + "windows-sys 0.52.0", 2484 + ] 2485 + 2486 + [[package]] 2487 + name = "tokio-macros" 2488 + version = "2.5.0" 2489 + source = "registry+https://github.com/rust-lang/crates.io-index" 2490 + checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 2491 + dependencies = [ 2492 + "proc-macro2", 2493 + "quote", 2494 + "syn", 2495 + ] 2496 + 2497 + [[package]] 2498 + name = "tokio-native-tls" 2499 + version = "0.3.1" 2500 + source = "registry+https://github.com/rust-lang/crates.io-index" 2501 + checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 2502 + dependencies = [ 2503 + "native-tls", 2504 + "tokio", 2505 + ] 2506 + 2507 + [[package]] 2508 + name = "tokio-rustls" 2509 + version = "0.26.2" 2510 + source = "registry+https://github.com/rust-lang/crates.io-index" 2511 + checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 2512 + dependencies = [ 2513 + "rustls", 2514 + "tokio", 2515 + ] 2516 + 2517 + [[package]] 2518 + name = "tokio-util" 2519 + version = "0.7.15" 2520 + source = "registry+https://github.com/rust-lang/crates.io-index" 2521 + checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" 2522 + dependencies = [ 2523 + "bytes", 2524 + "futures-core", 2525 + "futures-io", 2526 + "futures-sink", 2527 + "pin-project-lite", 2528 + "tokio", 2529 + ] 2530 + 2531 + [[package]] 2532 + name = "tower" 2533 + version = "0.5.2" 2534 + source = "registry+https://github.com/rust-lang/crates.io-index" 2535 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 2536 + dependencies = [ 2537 + "futures-core", 2538 + "futures-util", 2539 + "pin-project-lite", 2540 + "sync_wrapper", 2541 + "tokio", 2542 + "tower-layer", 2543 + "tower-service", 2544 + ] 2545 + 2546 + [[package]] 2547 + name = "tower-http" 2548 + version = "0.6.6" 2549 + source = "registry+https://github.com/rust-lang/crates.io-index" 2550 + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 2551 + dependencies = [ 2552 + "bitflags 2.9.1", 2553 + "bytes", 2554 + "futures-util", 2555 + "http 1.3.1", 2556 + "http-body", 2557 + "iri-string", 2558 + "pin-project-lite", 2559 + "tower", 2560 + "tower-layer", 2561 + "tower-service", 2562 + ] 2563 + 2564 + [[package]] 2565 + name = "tower-layer" 2566 + version = "0.3.3" 2567 + source = "registry+https://github.com/rust-lang/crates.io-index" 2568 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 2569 + 2570 + [[package]] 2571 + name = "tower-service" 2572 + version = "0.3.3" 2573 + source = "registry+https://github.com/rust-lang/crates.io-index" 2574 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2575 + 2576 + [[package]] 2577 + name = "tracing" 2578 + version = "0.1.41" 2579 + source = "registry+https://github.com/rust-lang/crates.io-index" 2580 + checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2581 + dependencies = [ 2582 + "log", 2583 + "pin-project-lite", 2584 + "tracing-attributes", 2585 + "tracing-core", 2586 + ] 2587 + 2588 + [[package]] 2589 + name = "tracing-attributes" 2590 + version = "0.1.30" 2591 + source = "registry+https://github.com/rust-lang/crates.io-index" 2592 + checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 2593 + dependencies = [ 2594 + "proc-macro2", 2595 + "quote", 2596 + "syn", 2597 + ] 2598 + 2599 + [[package]] 2600 + name = "tracing-core" 2601 + version = "0.1.34" 2602 + source = "registry+https://github.com/rust-lang/crates.io-index" 2603 + checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 2604 + dependencies = [ 2605 + "once_cell", 2606 + "valuable", 2607 + ] 2608 + 2609 + [[package]] 2610 + name = "tracing-futures" 2611 + version = "0.2.5" 2612 + source = "registry+https://github.com/rust-lang/crates.io-index" 2613 + checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 2614 + dependencies = [ 2615 + "pin-project", 2616 + "tracing", 2617 + ] 2618 + 2619 + [[package]] 2620 + name = "tracing-log" 2621 + version = "0.2.0" 2622 + source = "registry+https://github.com/rust-lang/crates.io-index" 2623 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 2624 + dependencies = [ 2625 + "log", 2626 + "once_cell", 2627 + "tracing-core", 2628 + ] 2629 + 2630 + [[package]] 2631 + name = "tracing-subscriber" 2632 + version = "0.3.19" 2633 + source = "registry+https://github.com/rust-lang/crates.io-index" 2634 + checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 2635 + dependencies = [ 2636 + "matchers", 2637 + "nu-ansi-term", 2638 + "once_cell", 2639 + "regex", 2640 + "sharded-slab", 2641 + "smallvec", 2642 + "thread_local", 2643 + "tracing", 2644 + "tracing-core", 2645 + "tracing-log", 2646 + ] 2647 + 2648 + [[package]] 2649 + name = "trait-variant" 2650 + version = "0.1.2" 2651 + source = "registry+https://github.com/rust-lang/crates.io-index" 2652 + checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" 2653 + dependencies = [ 2654 + "proc-macro2", 2655 + "quote", 2656 + "syn", 2657 + ] 2658 + 2659 + [[package]] 2660 + name = "try-lock" 2661 + version = "0.2.5" 2662 + source = "registry+https://github.com/rust-lang/crates.io-index" 2663 + checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2664 + 2665 + [[package]] 2666 + name = "typenum" 2667 + version = "1.18.0" 2668 + source = "registry+https://github.com/rust-lang/crates.io-index" 2669 + checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 2670 + 2671 + [[package]] 2672 + name = "unicode-ident" 2673 + version = "1.0.18" 2674 + source = "registry+https://github.com/rust-lang/crates.io-index" 2675 + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 2676 + 2677 + [[package]] 2678 + name = "unicode-width" 2679 + version = "0.2.1" 2680 + source = "registry+https://github.com/rust-lang/crates.io-index" 2681 + checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" 2682 + 2683 + [[package]] 2684 + name = "unit-prefix" 2685 + version = "0.5.1" 2686 + source = "registry+https://github.com/rust-lang/crates.io-index" 2687 + checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" 2688 + 2689 + [[package]] 2690 + name = "unsigned-varint" 2691 + version = "0.8.0" 2692 + source = "registry+https://github.com/rust-lang/crates.io-index" 2693 + checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 2694 + dependencies = [ 2695 + "futures-io", 2696 + "futures-util", 2697 + ] 2698 + 2699 + [[package]] 2700 + name = "untrusted" 2701 + version = "0.9.0" 2702 + source = "registry+https://github.com/rust-lang/crates.io-index" 2703 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2704 + 2705 + [[package]] 2706 + name = "url" 2707 + version = "2.5.4" 2708 + source = "registry+https://github.com/rust-lang/crates.io-index" 2709 + checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2710 + dependencies = [ 2711 + "form_urlencoded", 2712 + "idna", 2713 + "percent-encoding", 2714 + ] 2715 + 2716 + [[package]] 2717 + name = "utf8_iter" 2718 + version = "1.0.4" 2719 + source = "registry+https://github.com/rust-lang/crates.io-index" 2720 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2721 + 2722 + [[package]] 2723 + name = "utf8parse" 2724 + version = "0.2.2" 2725 + source = "registry+https://github.com/rust-lang/crates.io-index" 2726 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2727 + 2728 + [[package]] 2729 + name = "uuid" 2730 + version = "1.17.0" 2731 + source = "registry+https://github.com/rust-lang/crates.io-index" 2732 + checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" 2733 + dependencies = [ 2734 + "getrandom 0.3.3", 2735 + "js-sys", 2736 + "wasm-bindgen", 2737 + ] 2738 + 2739 + [[package]] 2740 + name = "valuable" 2741 + version = "0.1.1" 2742 + source = "registry+https://github.com/rust-lang/crates.io-index" 2743 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 2744 + 2745 + [[package]] 2746 + name = "vcpkg" 2747 + version = "0.2.15" 2748 + source = "registry+https://github.com/rust-lang/crates.io-index" 2749 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2750 + 2751 + [[package]] 2752 + name = "version_check" 2753 + version = "0.9.5" 2754 + source = "registry+https://github.com/rust-lang/crates.io-index" 2755 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2756 + 2757 + [[package]] 2758 + name = "waker-fn" 2759 + version = "1.2.0" 2760 + source = "registry+https://github.com/rust-lang/crates.io-index" 2761 + checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" 2762 + 2763 + [[package]] 2764 + name = "want" 2765 + version = "0.3.1" 2766 + source = "registry+https://github.com/rust-lang/crates.io-index" 2767 + checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2768 + dependencies = [ 2769 + "try-lock", 2770 + ] 2771 + 2772 + [[package]] 2773 + name = "wasi" 2774 + version = "0.11.1+wasi-snapshot-preview1" 2775 + source = "registry+https://github.com/rust-lang/crates.io-index" 2776 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 2777 + 2778 + [[package]] 2779 + name = "wasi" 2780 + version = "0.14.2+wasi-0.2.4" 2781 + source = "registry+https://github.com/rust-lang/crates.io-index" 2782 + checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2783 + dependencies = [ 2784 + "wit-bindgen-rt", 2785 + ] 2786 + 2787 + [[package]] 2788 + name = "wasm-bindgen" 2789 + version = "0.2.100" 2790 + source = "registry+https://github.com/rust-lang/crates.io-index" 2791 + checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2792 + dependencies = [ 2793 + "cfg-if", 2794 + "once_cell", 2795 + "rustversion", 2796 + "wasm-bindgen-macro", 2797 + ] 2798 + 2799 + [[package]] 2800 + name = "wasm-bindgen-backend" 2801 + version = "0.2.100" 2802 + source = "registry+https://github.com/rust-lang/crates.io-index" 2803 + checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2804 + dependencies = [ 2805 + "bumpalo", 2806 + "log", 2807 + "proc-macro2", 2808 + "quote", 2809 + "syn", 2810 + "wasm-bindgen-shared", 2811 + ] 2812 + 2813 + [[package]] 2814 + name = "wasm-bindgen-futures" 2815 + version = "0.4.50" 2816 + source = "registry+https://github.com/rust-lang/crates.io-index" 2817 + checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2818 + dependencies = [ 2819 + "cfg-if", 2820 + "js-sys", 2821 + "once_cell", 2822 + "wasm-bindgen", 2823 + "web-sys", 2824 + ] 2825 + 2826 + [[package]] 2827 + name = "wasm-bindgen-macro" 2828 + version = "0.2.100" 2829 + source = "registry+https://github.com/rust-lang/crates.io-index" 2830 + checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2831 + dependencies = [ 2832 + "quote", 2833 + "wasm-bindgen-macro-support", 2834 + ] 2835 + 2836 + [[package]] 2837 + name = "wasm-bindgen-macro-support" 2838 + version = "0.2.100" 2839 + source = "registry+https://github.com/rust-lang/crates.io-index" 2840 + checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2841 + dependencies = [ 2842 + "proc-macro2", 2843 + "quote", 2844 + "syn", 2845 + "wasm-bindgen-backend", 2846 + "wasm-bindgen-shared", 2847 + ] 2848 + 2849 + [[package]] 2850 + name = "wasm-bindgen-shared" 2851 + version = "0.2.100" 2852 + source = "registry+https://github.com/rust-lang/crates.io-index" 2853 + checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2854 + dependencies = [ 2855 + "unicode-ident", 2856 + ] 2857 + 2858 + [[package]] 2859 + name = "web-sys" 2860 + version = "0.3.77" 2861 + source = "registry+https://github.com/rust-lang/crates.io-index" 2862 + checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 2863 + dependencies = [ 2864 + "js-sys", 2865 + "wasm-bindgen", 2866 + ] 2867 + 2868 + [[package]] 2869 + name = "web-time" 2870 + version = "1.1.0" 2871 + source = "registry+https://github.com/rust-lang/crates.io-index" 2872 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 2873 + dependencies = [ 2874 + "js-sys", 2875 + "wasm-bindgen", 2876 + ] 2877 + 2878 + [[package]] 2879 + name = "widestring" 2880 + version = "1.2.0" 2881 + source = "registry+https://github.com/rust-lang/crates.io-index" 2882 + checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" 2883 + 2884 + [[package]] 2885 + name = "winapi" 2886 + version = "0.3.9" 2887 + source = "registry+https://github.com/rust-lang/crates.io-index" 2888 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2889 + dependencies = [ 2890 + "winapi-i686-pc-windows-gnu", 2891 + "winapi-x86_64-pc-windows-gnu", 2892 + ] 2893 + 2894 + [[package]] 2895 + name = "winapi-i686-pc-windows-gnu" 2896 + version = "0.4.0" 2897 + source = "registry+https://github.com/rust-lang/crates.io-index" 2898 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2899 + 2900 + [[package]] 2901 + name = "winapi-x86_64-pc-windows-gnu" 2902 + version = "0.4.0" 2903 + source = "registry+https://github.com/rust-lang/crates.io-index" 2904 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2905 + 2906 + [[package]] 2907 + name = "windows" 2908 + version = "0.61.3" 2909 + source = "registry+https://github.com/rust-lang/crates.io-index" 2910 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 2911 + dependencies = [ 2912 + "windows-collections", 2913 + "windows-core", 2914 + "windows-future", 2915 + "windows-link", 2916 + "windows-numerics", 2917 + ] 2918 + 2919 + [[package]] 2920 + name = "windows-collections" 2921 + version = "0.2.0" 2922 + source = "registry+https://github.com/rust-lang/crates.io-index" 2923 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 2924 + dependencies = [ 2925 + "windows-core", 2926 + ] 2927 + 2928 + [[package]] 2929 + name = "windows-core" 2930 + version = "0.61.2" 2931 + source = "registry+https://github.com/rust-lang/crates.io-index" 2932 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2933 + dependencies = [ 2934 + "windows-implement", 2935 + "windows-interface", 2936 + "windows-link", 2937 + "windows-result", 2938 + "windows-strings", 2939 + ] 2940 + 2941 + [[package]] 2942 + name = "windows-future" 2943 + version = "0.2.1" 2944 + source = "registry+https://github.com/rust-lang/crates.io-index" 2945 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 2946 + dependencies = [ 2947 + "windows-core", 2948 + "windows-link", 2949 + "windows-threading", 2950 + ] 2951 + 2952 + [[package]] 2953 + name = "windows-implement" 2954 + version = "0.60.0" 2955 + source = "registry+https://github.com/rust-lang/crates.io-index" 2956 + checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 2957 + dependencies = [ 2958 + "proc-macro2", 2959 + "quote", 2960 + "syn", 2961 + ] 2962 + 2963 + [[package]] 2964 + name = "windows-interface" 2965 + version = "0.59.1" 2966 + source = "registry+https://github.com/rust-lang/crates.io-index" 2967 + checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 2968 + dependencies = [ 2969 + "proc-macro2", 2970 + "quote", 2971 + "syn", 2972 + ] 2973 + 2974 + [[package]] 2975 + name = "windows-link" 2976 + version = "0.1.3" 2977 + source = "registry+https://github.com/rust-lang/crates.io-index" 2978 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 2979 + 2980 + [[package]] 2981 + name = "windows-numerics" 2982 + version = "0.2.0" 2983 + source = "registry+https://github.com/rust-lang/crates.io-index" 2984 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 2985 + dependencies = [ 2986 + "windows-core", 2987 + "windows-link", 2988 + ] 2989 + 2990 + [[package]] 2991 + name = "windows-registry" 2992 + version = "0.5.2" 2993 + source = "registry+https://github.com/rust-lang/crates.io-index" 2994 + checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" 2995 + dependencies = [ 2996 + "windows-link", 2997 + "windows-result", 2998 + "windows-strings", 2999 + ] 3000 + 3001 + [[package]] 3002 + name = "windows-result" 3003 + version = "0.3.4" 3004 + source = "registry+https://github.com/rust-lang/crates.io-index" 3005 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3006 + dependencies = [ 3007 + "windows-link", 3008 + ] 3009 + 3010 + [[package]] 3011 + name = "windows-strings" 3012 + version = "0.4.2" 3013 + source = "registry+https://github.com/rust-lang/crates.io-index" 3014 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3015 + dependencies = [ 3016 + "windows-link", 3017 + ] 3018 + 3019 + [[package]] 3020 + name = "windows-sys" 3021 + version = "0.48.0" 3022 + source = "registry+https://github.com/rust-lang/crates.io-index" 3023 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3024 + dependencies = [ 3025 + "windows-targets 0.48.5", 3026 + ] 3027 + 3028 + [[package]] 3029 + name = "windows-sys" 3030 + version = "0.52.0" 3031 + source = "registry+https://github.com/rust-lang/crates.io-index" 3032 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3033 + dependencies = [ 3034 + "windows-targets 0.52.6", 3035 + ] 3036 + 3037 + [[package]] 3038 + name = "windows-sys" 3039 + version = "0.59.0" 3040 + source = "registry+https://github.com/rust-lang/crates.io-index" 3041 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3042 + dependencies = [ 3043 + "windows-targets 0.52.6", 3044 + ] 3045 + 3046 + [[package]] 3047 + name = "windows-sys" 3048 + version = "0.60.2" 3049 + source = "registry+https://github.com/rust-lang/crates.io-index" 3050 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3051 + dependencies = [ 3052 + "windows-targets 0.53.2", 3053 + ] 3054 + 3055 + [[package]] 3056 + name = "windows-targets" 3057 + version = "0.48.5" 3058 + source = "registry+https://github.com/rust-lang/crates.io-index" 3059 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3060 + dependencies = [ 3061 + "windows_aarch64_gnullvm 0.48.5", 3062 + "windows_aarch64_msvc 0.48.5", 3063 + "windows_i686_gnu 0.48.5", 3064 + "windows_i686_msvc 0.48.5", 3065 + "windows_x86_64_gnu 0.48.5", 3066 + "windows_x86_64_gnullvm 0.48.5", 3067 + "windows_x86_64_msvc 0.48.5", 3068 + ] 3069 + 3070 + [[package]] 3071 + name = "windows-targets" 3072 + version = "0.52.6" 3073 + source = "registry+https://github.com/rust-lang/crates.io-index" 3074 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3075 + dependencies = [ 3076 + "windows_aarch64_gnullvm 0.52.6", 3077 + "windows_aarch64_msvc 0.52.6", 3078 + "windows_i686_gnu 0.52.6", 3079 + "windows_i686_gnullvm 0.52.6", 3080 + "windows_i686_msvc 0.52.6", 3081 + "windows_x86_64_gnu 0.52.6", 3082 + "windows_x86_64_gnullvm 0.52.6", 3083 + "windows_x86_64_msvc 0.52.6", 3084 + ] 3085 + 3086 + [[package]] 3087 + name = "windows-targets" 3088 + version = "0.53.2" 3089 + source = "registry+https://github.com/rust-lang/crates.io-index" 3090 + checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" 3091 + dependencies = [ 3092 + "windows_aarch64_gnullvm 0.53.0", 3093 + "windows_aarch64_msvc 0.53.0", 3094 + "windows_i686_gnu 0.53.0", 3095 + "windows_i686_gnullvm 0.53.0", 3096 + "windows_i686_msvc 0.53.0", 3097 + "windows_x86_64_gnu 0.53.0", 3098 + "windows_x86_64_gnullvm 0.53.0", 3099 + "windows_x86_64_msvc 0.53.0", 3100 + ] 3101 + 3102 + [[package]] 3103 + name = "windows-threading" 3104 + version = "0.1.0" 3105 + source = "registry+https://github.com/rust-lang/crates.io-index" 3106 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3107 + dependencies = [ 3108 + "windows-link", 3109 + ] 3110 + 3111 + [[package]] 3112 + name = "windows_aarch64_gnullvm" 3113 + version = "0.48.5" 3114 + source = "registry+https://github.com/rust-lang/crates.io-index" 3115 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3116 + 3117 + [[package]] 3118 + name = "windows_aarch64_gnullvm" 3119 + version = "0.52.6" 3120 + source = "registry+https://github.com/rust-lang/crates.io-index" 3121 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3122 + 3123 + [[package]] 3124 + name = "windows_aarch64_gnullvm" 3125 + version = "0.53.0" 3126 + source = "registry+https://github.com/rust-lang/crates.io-index" 3127 + checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 3128 + 3129 + [[package]] 3130 + name = "windows_aarch64_msvc" 3131 + version = "0.48.5" 3132 + source = "registry+https://github.com/rust-lang/crates.io-index" 3133 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3134 + 3135 + [[package]] 3136 + name = "windows_aarch64_msvc" 3137 + version = "0.52.6" 3138 + source = "registry+https://github.com/rust-lang/crates.io-index" 3139 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3140 + 3141 + [[package]] 3142 + name = "windows_aarch64_msvc" 3143 + version = "0.53.0" 3144 + source = "registry+https://github.com/rust-lang/crates.io-index" 3145 + checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 3146 + 3147 + [[package]] 3148 + name = "windows_i686_gnu" 3149 + version = "0.48.5" 3150 + source = "registry+https://github.com/rust-lang/crates.io-index" 3151 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3152 + 3153 + [[package]] 3154 + name = "windows_i686_gnu" 3155 + version = "0.52.6" 3156 + source = "registry+https://github.com/rust-lang/crates.io-index" 3157 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3158 + 3159 + [[package]] 3160 + name = "windows_i686_gnu" 3161 + version = "0.53.0" 3162 + source = "registry+https://github.com/rust-lang/crates.io-index" 3163 + checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 3164 + 3165 + [[package]] 3166 + name = "windows_i686_gnullvm" 3167 + version = "0.52.6" 3168 + source = "registry+https://github.com/rust-lang/crates.io-index" 3169 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3170 + 3171 + [[package]] 3172 + name = "windows_i686_gnullvm" 3173 + version = "0.53.0" 3174 + source = "registry+https://github.com/rust-lang/crates.io-index" 3175 + checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 3176 + 3177 + [[package]] 3178 + name = "windows_i686_msvc" 3179 + version = "0.48.5" 3180 + source = "registry+https://github.com/rust-lang/crates.io-index" 3181 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3182 + 3183 + [[package]] 3184 + name = "windows_i686_msvc" 3185 + version = "0.52.6" 3186 + source = "registry+https://github.com/rust-lang/crates.io-index" 3187 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3188 + 3189 + [[package]] 3190 + name = "windows_i686_msvc" 3191 + version = "0.53.0" 3192 + source = "registry+https://github.com/rust-lang/crates.io-index" 3193 + checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 3194 + 3195 + [[package]] 3196 + name = "windows_x86_64_gnu" 3197 + version = "0.48.5" 3198 + source = "registry+https://github.com/rust-lang/crates.io-index" 3199 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3200 + 3201 + [[package]] 3202 + name = "windows_x86_64_gnu" 3203 + version = "0.52.6" 3204 + source = "registry+https://github.com/rust-lang/crates.io-index" 3205 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3206 + 3207 + [[package]] 3208 + name = "windows_x86_64_gnu" 3209 + version = "0.53.0" 3210 + source = "registry+https://github.com/rust-lang/crates.io-index" 3211 + checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 3212 + 3213 + [[package]] 3214 + name = "windows_x86_64_gnullvm" 3215 + version = "0.48.5" 3216 + source = "registry+https://github.com/rust-lang/crates.io-index" 3217 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3218 + 3219 + [[package]] 3220 + name = "windows_x86_64_gnullvm" 3221 + version = "0.52.6" 3222 + source = "registry+https://github.com/rust-lang/crates.io-index" 3223 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3224 + 3225 + [[package]] 3226 + name = "windows_x86_64_gnullvm" 3227 + version = "0.53.0" 3228 + source = "registry+https://github.com/rust-lang/crates.io-index" 3229 + checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 3230 + 3231 + [[package]] 3232 + name = "windows_x86_64_msvc" 3233 + version = "0.48.5" 3234 + source = "registry+https://github.com/rust-lang/crates.io-index" 3235 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3236 + 3237 + [[package]] 3238 + name = "windows_x86_64_msvc" 3239 + version = "0.52.6" 3240 + source = "registry+https://github.com/rust-lang/crates.io-index" 3241 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3242 + 3243 + [[package]] 3244 + name = "windows_x86_64_msvc" 3245 + version = "0.53.0" 3246 + source = "registry+https://github.com/rust-lang/crates.io-index" 3247 + checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3248 + 3249 + [[package]] 3250 + name = "winreg" 3251 + version = "0.50.0" 3252 + source = "registry+https://github.com/rust-lang/crates.io-index" 3253 + checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 3254 + dependencies = [ 3255 + "cfg-if", 3256 + "windows-sys 0.48.0", 3257 + ] 3258 + 3259 + [[package]] 3260 + name = "wit-bindgen-rt" 3261 + version = "0.39.0" 3262 + source = "registry+https://github.com/rust-lang/crates.io-index" 3263 + checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 3264 + dependencies = [ 3265 + "bitflags 2.9.1", 3266 + ] 3267 + 3268 + [[package]] 3269 + name = "writeable" 3270 + version = "0.6.1" 3271 + source = "registry+https://github.com/rust-lang/crates.io-index" 3272 + checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 3273 + 3274 + [[package]] 3275 + name = "xdg" 3276 + version = "3.0.0" 3277 + source = "registry+https://github.com/rust-lang/crates.io-index" 3278 + checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" 3279 + 3280 + [[package]] 3281 + name = "yoke" 3282 + version = "0.8.0" 3283 + source = "registry+https://github.com/rust-lang/crates.io-index" 3284 + checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 3285 + dependencies = [ 3286 + "serde", 3287 + "stable_deref_trait", 3288 + "yoke-derive", 3289 + "zerofrom", 3290 + ] 3291 + 3292 + [[package]] 3293 + name = "yoke-derive" 3294 + version = "0.8.0" 3295 + source = "registry+https://github.com/rust-lang/crates.io-index" 3296 + checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 3297 + dependencies = [ 3298 + "proc-macro2", 3299 + "quote", 3300 + "syn", 3301 + "synstructure", 3302 + ] 3303 + 3304 + [[package]] 3305 + name = "zerocopy" 3306 + version = "0.8.26" 3307 + source = "registry+https://github.com/rust-lang/crates.io-index" 3308 + checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" 3309 + dependencies = [ 3310 + "zerocopy-derive", 3311 + ] 3312 + 3313 + [[package]] 3314 + name = "zerocopy-derive" 3315 + version = "0.8.26" 3316 + source = "registry+https://github.com/rust-lang/crates.io-index" 3317 + checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" 3318 + dependencies = [ 3319 + "proc-macro2", 3320 + "quote", 3321 + "syn", 3322 + ] 3323 + 3324 + [[package]] 3325 + name = "zerofrom" 3326 + version = "0.1.6" 3327 + source = "registry+https://github.com/rust-lang/crates.io-index" 3328 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3329 + dependencies = [ 3330 + "zerofrom-derive", 3331 + ] 3332 + 3333 + [[package]] 3334 + name = "zerofrom-derive" 3335 + version = "0.1.6" 3336 + source = "registry+https://github.com/rust-lang/crates.io-index" 3337 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3338 + dependencies = [ 3339 + "proc-macro2", 3340 + "quote", 3341 + "syn", 3342 + "synstructure", 3343 + ] 3344 + 3345 + [[package]] 3346 + name = "zeroize" 3347 + version = "1.8.1" 3348 + source = "registry+https://github.com/rust-lang/crates.io-index" 3349 + checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3350 + 3351 + [[package]] 3352 + name = "zerotrie" 3353 + version = "0.2.2" 3354 + source = "registry+https://github.com/rust-lang/crates.io-index" 3355 + checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 3356 + dependencies = [ 3357 + "displaydoc", 3358 + "yoke", 3359 + "zerofrom", 3360 + ] 3361 + 3362 + [[package]] 3363 + name = "zerovec" 3364 + version = "0.11.2" 3365 + source = "registry+https://github.com/rust-lang/crates.io-index" 3366 + checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 3367 + dependencies = [ 3368 + "yoke", 3369 + "zerofrom", 3370 + "zerovec-derive", 3371 + ] 3372 + 3373 + [[package]] 3374 + name = "zerovec-derive" 3375 + version = "0.11.1" 3376 + source = "registry+https://github.com/rust-lang/crates.io-index" 3377 + checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 3378 + dependencies = [ 3379 + "proc-macro2", 3380 + "quote", 3381 + "syn", 3382 + ]
+26
Cargo.toml
··· 1 + [package] 2 + name = "pdsfs" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies] 7 + atrium-api = "0.25.4" 8 + atrium-common = "0.1.2" 9 + atrium-identity = "0.1.5" 10 + atrium-repo = "0.1.4" 11 + atrium-xrpc = "0.12.3" 12 + atrium-xrpc-client = { version = "0.5.14", features=["isahc"] } 13 + clap = { version = "4.5.41", features = ["cargo"] } 14 + fuser = "0.15.1" 15 + futures = "0.3.31" 16 + hickory-resolver = "0.25.2" 17 + indexmap = "2.10.0" 18 + indicatif = "0.18.0" 19 + ipld-core = "0.4.2" 20 + libc = "0.2.174" 21 + reqwest = "0.12.22" 22 + serde_ipld_dagcbor = "0.6.3" 23 + serde_json = "1.0.141" 24 + thiserror = "2.0.12" 25 + tokio = { version = "1.46.1", features = ["fs"] } 26 + xdg = "3.0.0"
+10
readme.txt
··· 1 + pdsfs 2 + ----- 3 + 4 + mount an atproto PDS repository as a fuse3 filesystem. 5 + 6 + 7 + usage 8 + ----- 9 + 10 + cargo run -- <DID/handle>
+32
src/client.rs
··· 1 + use atrium_xrpc::HttpClient; 2 + 3 + pub struct DefaultHttpClient { 4 + client: reqwest::Client, 5 + } 6 + 7 + impl HttpClient for DefaultHttpClient { 8 + async fn send_http( 9 + &self, 10 + request: atrium_xrpc::http::Request<Vec<u8>>, 11 + ) -> core::result::Result< 12 + atrium_xrpc::http::Response<Vec<u8>>, 13 + Box<dyn std::error::Error + Send + Sync + 'static>, 14 + > { 15 + let response = self.client.execute(request.try_into()?).await?; 16 + let mut builder = atrium_xrpc::http::Response::builder().status(response.status()); 17 + for (k, v) in response.headers() { 18 + builder = builder.header(k, v); 19 + } 20 + builder 21 + .body(response.bytes().await?.to_vec()) 22 + .map_err(Into::into) 23 + } 24 + } 25 + 26 + impl Default for DefaultHttpClient { 27 + fn default() -> Self { 28 + Self { 29 + client: reqwest::Client::new(), 30 + } 31 + } 32 + }
+7
src/error.rs
··· 1 + #[derive(thiserror::Error, Debug)] 2 + pub enum Error { 3 + #[error("atproto error: {0}")] 4 + GetRepo(#[from] atrium_xrpc::Error<atrium_api::com::atproto::sync::get_repo::Error>), 5 + #[error("io error: {0}")] 6 + Io(#[from] std::io::Error), 7 + }
+295
src/fs.rs
··· 1 + use std::{collections::BTreeMap, time}; 2 + 3 + use atrium_repo::{Repository, blockstore::AsyncBlockStoreRead}; 4 + use futures::StreamExt; 5 + use indexmap::IndexSet; 6 + pub struct PdsFs<R> { 7 + repo: Repository<R>, 8 + inodes: IndexSet<PdsFsEntry>, 9 + } 10 + 11 + #[derive(Debug, Clone, PartialEq, Eq, Hash)] 12 + pub enum PdsFsEntry { 13 + Zero, 14 + Root, 15 + Collection(String), 16 + Record(PdsFsRecord), 17 + } 18 + 19 + #[derive(Debug, Clone, PartialEq, Eq, Hash)] 20 + pub struct PdsFsRecord { 21 + collection: String, 22 + rkey: String, 23 + } 24 + 25 + impl PdsFsRecord { 26 + fn key(&self) -> String { 27 + format!("{}/{}", self.collection, self.rkey) 28 + } 29 + } 30 + 31 + const TTL: time::Duration = time::Duration::from_secs(300); 32 + const BLKSIZE: u32 = 512; 33 + 34 + const ROOTDIR_ATTR: fuser::FileAttr = fuser::FileAttr { 35 + ino: 1, 36 + size: 0, 37 + blocks: 0, 38 + atime: time::UNIX_EPOCH, 39 + mtime: time::UNIX_EPOCH, 40 + ctime: time::UNIX_EPOCH, 41 + crtime: time::UNIX_EPOCH, 42 + kind: fuser::FileType::Directory, 43 + perm: 0o755, 44 + nlink: 2, 45 + uid: 501, 46 + gid: 20, 47 + rdev: 0, 48 + flags: 0, 49 + blksize: BLKSIZE, 50 + }; 51 + 52 + impl<R> PdsFs<R> 53 + where 54 + R: AsyncBlockStoreRead, 55 + { 56 + pub async fn new(mut repo: Repository<R>) -> Self { 57 + let mut mst = repo.tree(); 58 + 59 + // collect all keys and group by collection 60 + let mut keys = Box::pin(mst.keys()); 61 + let mut collections: BTreeMap<String, Vec<PdsFsRecord>> = BTreeMap::new(); 62 + 63 + while let Some(Ok(key)) = keys.next().await { 64 + if let Some((collection, rkey)) = key.split_once("/") { 65 + let record = PdsFsRecord { 66 + collection: collection.to_owned(), 67 + rkey: rkey.to_owned(), 68 + }; 69 + 70 + collections 71 + .entry(collection.to_owned()) 72 + .or_insert_with(Vec::new) 73 + .push(record); 74 + } 75 + } 76 + 77 + drop(keys); 78 + drop(mst); 79 + 80 + // build inode structure with proper ordering 81 + let mut inodes = IndexSet::from([PdsFsEntry::Zero, PdsFsEntry::Root]); 82 + 83 + // add collections first 84 + for n in collections.keys().cloned() { 85 + inodes.insert(PdsFsEntry::Collection(n)); 86 + } 87 + 88 + // then add all records grouped by collection 89 + for r in collections.values().flatten().cloned() { 90 + inodes.insert(PdsFsEntry::Record(r)); 91 + } 92 + 93 + println!("constructed {} inodes", inodes.len()); 94 + 95 + PdsFs { repo, inodes } 96 + } 97 + 98 + fn attr(&mut self, ino: u64) -> fuser::FileAttr { 99 + match self.inodes.get_index(ino as usize) { 100 + Some(PdsFsEntry::Root) => ROOTDIR_ATTR, 101 + Some(PdsFsEntry::Collection(_)) => fuser::FileAttr { 102 + ino, 103 + size: 0, 104 + blocks: 0, 105 + atime: time::UNIX_EPOCH, 106 + mtime: time::UNIX_EPOCH, 107 + ctime: time::UNIX_EPOCH, 108 + crtime: time::UNIX_EPOCH, 109 + kind: fuser::FileType::Directory, 110 + perm: 0o755, 111 + nlink: 2, 112 + uid: 1000, 113 + gid: 1000, 114 + rdev: 0, 115 + flags: 0, 116 + blksize: BLKSIZE, 117 + }, 118 + Some(PdsFsEntry::Record(r)) => { 119 + let rt = tokio::runtime::Runtime::new().unwrap(); 120 + let size = rt 121 + .block_on(self.repo.get_raw::<ipld_core::ipld::Ipld>(&r.key())) 122 + .ok() 123 + .flatten() 124 + .map_or(0, |v| serde_json::to_string(&v).unwrap().len()) 125 + as u64; 126 + let blocks = ((size as u32 + BLKSIZE - 1) / BLKSIZE) as u64; 127 + fuser::FileAttr { 128 + ino, 129 + size, 130 + blocks, 131 + atime: time::UNIX_EPOCH, 132 + mtime: time::UNIX_EPOCH, 133 + ctime: time::UNIX_EPOCH, 134 + crtime: time::UNIX_EPOCH, 135 + kind: fuser::FileType::RegularFile, 136 + perm: 0o644, 137 + nlink: 1, 138 + uid: 501, 139 + gid: 20, 140 + rdev: 0, 141 + flags: 0, 142 + blksize: 512, 143 + } 144 + } 145 + _ => panic!("zero"), 146 + } 147 + } 148 + } 149 + 150 + impl<R> fuser::Filesystem for PdsFs<R> 151 + where 152 + R: AsyncBlockStoreRead, 153 + { 154 + fn getattr( 155 + &mut self, 156 + _req: &fuser::Request, 157 + ino: u64, 158 + _fh: Option<u64>, 159 + reply: fuser::ReplyAttr, 160 + ) { 161 + if (ino as usize) < self.inodes.len() { 162 + reply.attr(&TTL, &self.attr(ino as u64)) 163 + } else { 164 + reply.error(libc::ENOENT) 165 + } 166 + } 167 + 168 + fn readdir( 169 + &mut self, 170 + _req: &fuser::Request, 171 + ino: u64, 172 + _fh: u64, 173 + offset: i64, 174 + mut reply: fuser::ReplyDirectory, 175 + ) { 176 + match self.inodes.get_index(ino as usize) { 177 + Some(PdsFsEntry::Root) => { 178 + let entries: Vec<_> = vec![(ino, ".".to_string()), (ino, "..".to_string())] 179 + .into_iter() 180 + .chain(self.inodes.iter().enumerate().filter_map(|(i, e)| { 181 + if let PdsFsEntry::Collection(name) = e { 182 + Some((i as u64, name.clone())) 183 + } else { 184 + None 185 + } 186 + })) 187 + .collect(); 188 + 189 + for (index, (inode_num, name)) in 190 + entries.into_iter().enumerate().skip(offset as usize) 191 + { 192 + if reply.add( 193 + inode_num, 194 + (index + 1) as i64, 195 + fuser::FileType::Directory, 196 + name, 197 + ) { 198 + break; 199 + } 200 + } 201 + reply.ok() 202 + } 203 + Some(PdsFsEntry::Collection(collection_name)) => { 204 + let entries: Vec<_> = vec![ 205 + (ino, ".".to_string()), 206 + (1, "..".to_string()), // Parent is root (inode 1) 207 + ] 208 + .into_iter() 209 + .chain(self.inodes.iter().enumerate().filter_map(|(i, e)| { 210 + if let PdsFsEntry::Record(record) = e { 211 + if record.collection == *collection_name { 212 + Some((i as u64, record.rkey.clone())) 213 + } else { 214 + None 215 + } 216 + } else { 217 + None 218 + } 219 + })) 220 + .collect(); 221 + 222 + for (index, (inode_num, name)) in 223 + entries.into_iter().enumerate().skip(offset as usize) 224 + { 225 + if reply.add( 226 + inode_num, 227 + (index + 1) as i64, 228 + if name.starts_with('.') { 229 + fuser::FileType::Directory 230 + } else { 231 + fuser::FileType::RegularFile 232 + }, 233 + name, 234 + ) { 235 + break; 236 + } 237 + } 238 + reply.ok() 239 + } 240 + _ => reply.error(libc::ENOENT), 241 + } 242 + } 243 + 244 + fn lookup( 245 + &mut self, 246 + _req: &fuser::Request, 247 + parent: u64, 248 + name: &std::ffi::OsStr, 249 + reply: fuser::ReplyEntry, 250 + ) { 251 + match self.inodes.get_index(parent as usize) { 252 + Some(PdsFsEntry::Root) => { 253 + let collection = PdsFsEntry::Collection(name.to_string_lossy().to_string()); 254 + if let Some(ino) = self.inodes.get_index_of(&collection) { 255 + reply.entry(&TTL, &self.attr(ino as u64), 0); 256 + } else { 257 + reply.error(libc::ENOENT) 258 + } 259 + } 260 + Some(PdsFsEntry::Collection(c)) => { 261 + let record = PdsFsEntry::Record(PdsFsRecord { 262 + collection: c.to_owned(), 263 + rkey: name.to_string_lossy().to_string(), 264 + }); 265 + if let Some(ino) = self.inodes.get_index_of(&record) { 266 + reply.entry(&TTL, &self.attr(ino as u64), 0); 267 + } else { 268 + reply.error(libc::ENOENT) 269 + } 270 + } 271 + _ => reply.error(libc::ENOENT), 272 + } 273 + } 274 + 275 + fn read( 276 + &mut self, 277 + _req: &fuser::Request, 278 + ino: u64, 279 + _fh: u64, 280 + offset: i64, 281 + _size: u32, 282 + _flags: i32, 283 + _lock: Option<u64>, 284 + reply: fuser::ReplyData, 285 + ) { 286 + let rt = tokio::runtime::Runtime::new().unwrap(); 287 + if let Some(PdsFsEntry::Record(r)) = self.inodes.get_index(ino as usize) 288 + && let Ok(Some(val)) = rt.block_on(self.repo.get_raw::<ipld_core::ipld::Ipld>(&r.key())) 289 + { 290 + reply.data(&serde_json::to_string(&val).unwrap().as_bytes()[offset as usize..]); 291 + } else { 292 + reply.error(libc::ENOENT); 293 + } 294 + } 295 + }
+125
src/main.rs
··· 1 + #![feature(let_chains)] 2 + mod client; 3 + mod error; 4 + mod fs; 5 + mod resolver; 6 + 7 + use atrium_api::{client::AtpServiceClient, com, types}; 8 + use atrium_common::resolver::Resolver; 9 + use atrium_identity::identity_resolver::ResolvedIdentity; 10 + use atrium_repo::{Repository, blockstore::CarStore}; 11 + use atrium_xrpc_client::isahc::IsahcClient; 12 + use fuser::MountOption; 13 + use indicatif::{ProgressBar, ProgressStyle}; 14 + use std::{ 15 + io::{Cursor, Write}, 16 + path::PathBuf, 17 + }; 18 + use xdg::BaseDirectories; 19 + 20 + fn main() { 21 + let rt = tokio::runtime::Runtime::new().unwrap(); 22 + let matches = clap::command!() 23 + .arg(clap::Arg::new("handle").index(1)) 24 + .arg( 25 + clap::Arg::new("mountpoint") 26 + .short('m') 27 + .action(clap::ArgAction::Set) 28 + .value_parser(clap::value_parser!(PathBuf)), 29 + ) 30 + .get_matches(); 31 + let handle = matches.get_one::<String>("handle").unwrap(); 32 + let mountpoint = matches 33 + .get_one::<PathBuf>("mountpoint") 34 + .map(ToOwned::to_owned) 35 + .unwrap_or(PathBuf::from(&handle)); 36 + let _ = std::fs::create_dir_all(&mountpoint); 37 + let resolver = resolver::id_resolver(); 38 + let id = rt.block_on(async { 39 + resolver 40 + .resolve(&atrium_api::types::string::Handle::new(handle.into()).unwrap()) 41 + .await 42 + .unwrap() 43 + }); 44 + 45 + let pb = ProgressBar::new_spinner(); 46 + pb.set_style( 47 + ProgressStyle::default_spinner() 48 + .template("{spinner:.green} [{elapsed_precise}] {msg}") 49 + .unwrap() 50 + .tick_strings(&["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]), 51 + ); 52 + 53 + let bytes = rt.block_on(cached_download(&id, &pb)).unwrap(); 54 + let store = rt.block_on(async { CarStore::open(Cursor::new(bytes)).await.unwrap() }); 55 + let root = store.roots().next().unwrap(); 56 + let repo = rt.block_on(async { Repository::open(store, root).await.unwrap() }); 57 + 58 + // construct the fs 59 + let fs = rt.block_on(fs::PdsFs::new(repo)); 60 + 61 + // mount 62 + let options = vec![MountOption::RO, MountOption::FSName("pdsfs".to_string())]; 63 + let join_handle = fuser::spawn_mount2(fs, &mountpoint, &options).unwrap(); 64 + 65 + println!("mounted at {mountpoint:?}"); 66 + print!("hit enter to unmount and exit..."); 67 + std::io::stdout().flush().unwrap(); 68 + 69 + // Wait for user input 70 + let mut input = String::new(); 71 + std::io::stdin().read_line(&mut input).unwrap(); 72 + 73 + join_handle.join(); 74 + std::fs::remove_dir(&mountpoint).unwrap(); 75 + 76 + println!("unmounted {mountpoint:?}"); 77 + } 78 + 79 + async fn cached_download(id: &ResolvedIdentity, pb: &ProgressBar) -> Result<Vec<u8>, error::Error> { 80 + let dirs = BaseDirectories::new(); 81 + 82 + let dir = dirs.get_data_home().expect("$HOME is absent").join("pdsfs"); 83 + tokio::fs::create_dir_all(&dir).await?; 84 + 85 + let file = dir.join(&id.did); 86 + let exists = std::fs::exists(&file)?; 87 + 88 + let bytes = if !exists { 89 + pb.set_message(format!("downloading CAR file for\t...\t{}", id.did)); 90 + download_car_file(id, pb).await? 91 + } else { 92 + pb.set_message(format!("using cached CAR file for\t...\t{}", id.did)); 93 + tokio::fs::read(file).await? 94 + }; 95 + 96 + pb.set_message(format!( 97 + "received {} bytes for \t...\t{}", 98 + bytes.len(), 99 + id.did 100 + )); 101 + Ok(bytes) 102 + } 103 + 104 + async fn download_car_file( 105 + id: &ResolvedIdentity, 106 + pb: &ProgressBar, 107 + ) -> Result<Vec<u8>, error::Error> { 108 + // download the entire car file first before mounting it as a fusefs 109 + let client = AtpServiceClient::new(IsahcClient::new(&id.pds)); 110 + let did = types::string::Did::new(id.did.clone()).unwrap(); 111 + 112 + let bytes = client 113 + .service 114 + .com 115 + .atproto 116 + .sync 117 + .get_repo(com::atproto::sync::get_repo::Parameters::from( 118 + com::atproto::sync::get_repo::ParametersData { did, since: None }, 119 + )) 120 + .await?; 121 + 122 + pb.finish_with_message(format!("download complete for \t...\t{}", id.did)); 123 + 124 + Ok(bytes) 125 + }
+57
src/resolver.rs
··· 1 + use std::sync::Arc; 2 + 3 + use crate::client::DefaultHttpClient; 4 + 5 + use atrium_identity::{ 6 + did::{CommonDidResolver, CommonDidResolverConfig, DEFAULT_PLC_DIRECTORY_URL}, 7 + handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig, DnsTxtResolver}, 8 + identity_resolver::{IdentityResolver, IdentityResolverConfig}, 9 + }; 10 + use hickory_resolver::TokioResolver; 11 + 12 + pub struct HickoryDnsTxtResolver { 13 + resolver: TokioResolver, 14 + } 15 + 16 + impl Default for HickoryDnsTxtResolver { 17 + fn default() -> Self { 18 + let resolver = TokioResolver::builder_tokio() 19 + .expect("failed to create resolver") 20 + .build(); 21 + Self { resolver } 22 + } 23 + } 24 + 25 + impl DnsTxtResolver for HickoryDnsTxtResolver { 26 + async fn resolve( 27 + &self, 28 + query: &str, 29 + ) -> core::result::Result<Vec<String>, Box<dyn std::error::Error + Send + Sync + 'static>> { 30 + Ok(self 31 + .resolver 32 + .txt_lookup(query) 33 + .await? 34 + .iter() 35 + .map(|txt| txt.to_string()) 36 + .collect()) 37 + } 38 + } 39 + 40 + pub fn id_resolver() -> IdentityResolver< 41 + CommonDidResolver<DefaultHttpClient>, 42 + AtprotoHandleResolver<HickoryDnsTxtResolver, DefaultHttpClient>, 43 + > { 44 + let http_client = Arc::new(DefaultHttpClient::default()); 45 + let handle_resolver = AtprotoHandleResolver::new(AtprotoHandleResolverConfig { 46 + dns_txt_resolver: HickoryDnsTxtResolver::default(), 47 + http_client: Arc::clone(&http_client), 48 + }); 49 + let did_resolver = CommonDidResolver::new(CommonDidResolverConfig { 50 + plc_directory_url: DEFAULT_PLC_DIRECTORY_URL.into(), 51 + http_client: Arc::clone(&http_client), 52 + }); 53 + IdentityResolver::new(IdentityResolverConfig { 54 + did_resolver, 55 + handle_resolver, 56 + }) 57 + }