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

wahwehwahweh

+2
.gitignore
···
/.pnp
.pnp.js
+
cli/target/
+
target/
# testing
/coverage
change-admin-password.ts scripts/change-admin-password.ts
+4731
cli/Cargo.lock
···
+
# This file is automatically @generated by Cargo.
+
# It is not intended for manual editing.
+
version = 4
+
+
[[package]]
+
name = "abnf"
+
version = "0.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a"
+
dependencies = [
+
"abnf-core",
+
"nom",
+
]
+
+
[[package]]
+
name = "abnf-core"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d"
+
dependencies = [
+
"nom",
+
]
+
+
[[package]]
+
name = "addr2line"
+
version = "0.25.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
+
dependencies = [
+
"gimli",
+
]
+
+
[[package]]
+
name = "adler2"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+
[[package]]
+
name = "adler32"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+
[[package]]
+
name = "aho-corasick"
+
version = "1.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "aliasable"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
+
+
[[package]]
+
name = "alloc-no-stdlib"
+
version = "2.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+
[[package]]
+
name = "alloc-stdlib"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+
dependencies = [
+
"alloc-no-stdlib",
+
]
+
+
[[package]]
+
name = "android_system_properties"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "anstream"
+
version = "0.6.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
+
dependencies = [
+
"anstyle",
+
"anstyle-parse",
+
"anstyle-query",
+
"anstyle-wincon",
+
"colorchoice",
+
"is_terminal_polyfill",
+
"utf8parse",
+
]
+
+
[[package]]
+
name = "anstyle"
+
version = "1.0.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
+
+
[[package]]
+
name = "anstyle-parse"
+
version = "0.2.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
+
dependencies = [
+
"utf8parse",
+
]
+
+
[[package]]
+
name = "anstyle-query"
+
version = "1.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
+
dependencies = [
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "anstyle-wincon"
+
version = "3.0.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
+
dependencies = [
+
"anstyle",
+
"once_cell_polyfill",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "ascii"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
+
+
[[package]]
+
name = "async-compression"
+
version = "0.4.32"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5a89bce6054c720275ac2432fbba080a66a2106a44a1b804553930ca6909f4e0"
+
dependencies = [
+
"compression-codecs",
+
"compression-core",
+
"futures-core",
+
"pin-project-lite",
+
"tokio",
+
]
+
+
[[package]]
+
name = "async-lock"
+
version = "3.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
+
dependencies = [
+
"event-listener",
+
"event-listener-strategy",
+
"pin-project-lite",
+
]
+
+
[[package]]
+
name = "async-trait"
+
version = "0.1.89"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "atomic-waker"
+
version = "1.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+
[[package]]
+
name = "autocfg"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+
+
[[package]]
+
name = "backtrace"
+
version = "0.3.76"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
+
dependencies = [
+
"addr2line",
+
"cfg-if",
+
"libc",
+
"miniz_oxide",
+
"object",
+
"rustc-demangle",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "backtrace-ext"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50"
+
dependencies = [
+
"backtrace",
+
]
+
+
[[package]]
+
name = "base-x"
+
version = "0.2.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
+
+
[[package]]
+
name = "base16ct"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+
[[package]]
+
name = "base256emoji"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c"
+
dependencies = [
+
"const-str",
+
"match-lookup",
+
]
+
+
[[package]]
+
name = "base64"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+
[[package]]
+
name = "base64"
+
version = "0.22.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+
[[package]]
+
name = "base64ct"
+
version = "1.8.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
+
+
[[package]]
+
name = "bitflags"
+
version = "2.10.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
+
+
[[package]]
+
name = "block-buffer"
+
version = "0.10.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+
dependencies = [
+
"generic-array",
+
]
+
+
[[package]]
+
name = "bon"
+
version = "3.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1"
+
dependencies = [
+
"bon-macros",
+
"rustversion",
+
]
+
+
[[package]]
+
name = "bon-macros"
+
version = "3.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645"
+
dependencies = [
+
"darling",
+
"ident_case",
+
"prettyplease",
+
"proc-macro2",
+
"quote",
+
"rustversion",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "borsh"
+
version = "1.5.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce"
+
dependencies = [
+
"cfg_aliases",
+
]
+
+
[[package]]
+
name = "brotli"
+
version = "3.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391"
+
dependencies = [
+
"alloc-no-stdlib",
+
"alloc-stdlib",
+
"brotli-decompressor",
+
]
+
+
[[package]]
+
name = "brotli-decompressor"
+
version = "2.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
+
dependencies = [
+
"alloc-no-stdlib",
+
"alloc-stdlib",
+
]
+
+
[[package]]
+
name = "btree-range-map"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1be5c9672446d3800bcbcaabaeba121fe22f1fb25700c4562b22faf76d377c33"
+
dependencies = [
+
"btree-slab",
+
"cc-traits",
+
"range-traits",
+
"serde",
+
"slab",
+
]
+
+
[[package]]
+
name = "btree-slab"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c"
+
dependencies = [
+
"cc-traits",
+
"slab",
+
"smallvec",
+
]
+
+
[[package]]
+
name = "buf_redux"
+
version = "0.8.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f"
+
dependencies = [
+
"memchr",
+
"safemem",
+
]
+
+
[[package]]
+
name = "bumpalo"
+
version = "3.19.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
+
+
[[package]]
+
name = "bytes"
+
version = "1.10.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "cbor4ii"
+
version = "0.2.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "cc"
+
version = "1.2.44"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3"
+
dependencies = [
+
"find-msvc-tools",
+
"shlex",
+
]
+
+
[[package]]
+
name = "cc-traits"
+
version = "2.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5"
+
dependencies = [
+
"slab",
+
]
+
+
[[package]]
+
name = "cesu8"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+
[[package]]
+
name = "cfg-if"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+
[[package]]
+
name = "cfg_aliases"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+
[[package]]
+
name = "chrono"
+
version = "0.4.42"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
+
dependencies = [
+
"iana-time-zone",
+
"js-sys",
+
"num-traits",
+
"serde",
+
"wasm-bindgen",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "chunked_transfer"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901"
+
+
[[package]]
+
name = "ciborium"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+
dependencies = [
+
"ciborium-io",
+
"ciborium-ll",
+
"serde",
+
]
+
+
[[package]]
+
name = "ciborium-io"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+
+
[[package]]
+
name = "ciborium-ll"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+
dependencies = [
+
"ciborium-io",
+
"half",
+
]
+
+
[[package]]
+
name = "cid"
+
version = "0.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
+
dependencies = [
+
"core2",
+
"multibase",
+
"multihash",
+
"serde",
+
"serde_bytes",
+
"unsigned-varint",
+
]
+
+
[[package]]
+
name = "clap"
+
version = "4.5.51"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5"
+
dependencies = [
+
"clap_builder",
+
"clap_derive",
+
]
+
+
[[package]]
+
name = "clap_builder"
+
version = "4.5.51"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a"
+
dependencies = [
+
"anstream",
+
"anstyle",
+
"clap_lex",
+
"strsim",
+
]
+
+
[[package]]
+
name = "clap_derive"
+
version = "4.5.49"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
+
dependencies = [
+
"heck 0.5.0",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "clap_lex"
+
version = "0.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
+
+
[[package]]
+
name = "colorchoice"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
+
+
[[package]]
+
name = "combine"
+
version = "4.6.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+
dependencies = [
+
"bytes",
+
"memchr",
+
]
+
+
[[package]]
+
name = "compression-codecs"
+
version = "0.4.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ef8a506ec4b81c460798f572caead636d57d3d7e940f998160f52bd254bf2d23"
+
dependencies = [
+
"compression-core",
+
"flate2",
+
"memchr",
+
]
+
+
[[package]]
+
name = "compression-core"
+
version = "0.4.29"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb"
+
+
[[package]]
+
name = "concurrent-queue"
+
version = "2.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
+
dependencies = [
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "const-oid"
+
version = "0.9.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
+
[[package]]
+
name = "const-str"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
+
+
[[package]]
+
name = "core-foundation"
+
version = "0.9.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+
dependencies = [
+
"core-foundation-sys",
+
"libc",
+
]
+
+
[[package]]
+
name = "core-foundation-sys"
+
version = "0.8.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+
[[package]]
+
name = "core2"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "cpufeatures"
+
version = "0.2.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "crc32fast"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
+
dependencies = [
+
"cfg-if",
+
]
+
+
[[package]]
+
name = "crossbeam-channel"
+
version = "0.5.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
+
dependencies = [
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-epoch"
+
version = "0.9.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+
dependencies = [
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-utils"
+
version = "0.8.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+
[[package]]
+
name = "crunchy"
+
version = "0.2.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
+
+
[[package]]
+
name = "crypto-bigint"
+
version = "0.5.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+
dependencies = [
+
"generic-array",
+
"rand_core 0.6.4",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "crypto-common"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+
dependencies = [
+
"generic-array",
+
"typenum",
+
]
+
+
[[package]]
+
name = "darling"
+
version = "0.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
+
dependencies = [
+
"darling_core",
+
"darling_macro",
+
]
+
+
[[package]]
+
name = "darling_core"
+
version = "0.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
+
dependencies = [
+
"fnv",
+
"ident_case",
+
"proc-macro2",
+
"quote",
+
"strsim",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "darling_macro"
+
version = "0.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
+
dependencies = [
+
"darling_core",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "dashmap"
+
version = "6.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
+
dependencies = [
+
"cfg-if",
+
"crossbeam-utils",
+
"hashbrown 0.14.5",
+
"lock_api",
+
"once_cell",
+
"parking_lot_core",
+
]
+
+
[[package]]
+
name = "data-encoding"
+
version = "2.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
+
+
[[package]]
+
name = "data-encoding-macro"
+
version = "0.1.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
+
dependencies = [
+
"data-encoding",
+
"data-encoding-macro-internal",
+
]
+
+
[[package]]
+
name = "data-encoding-macro-internal"
+
version = "0.1.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
+
dependencies = [
+
"data-encoding",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "deflate"
+
version = "1.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f"
+
dependencies = [
+
"adler32",
+
"gzip-header",
+
]
+
+
[[package]]
+
name = "der"
+
version = "0.7.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
+
dependencies = [
+
"const-oid",
+
"pem-rfc7468",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "deranged"
+
version = "0.5.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
+
dependencies = [
+
"powerfmt",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "digest"
+
version = "0.10.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+
dependencies = [
+
"block-buffer",
+
"const-oid",
+
"crypto-common",
+
"subtle",
+
]
+
+
[[package]]
+
name = "dirs"
+
version = "6.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
+
dependencies = [
+
"dirs-sys",
+
]
+
+
[[package]]
+
name = "dirs-sys"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
+
dependencies = [
+
"libc",
+
"option-ext",
+
"redox_users",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "displaydoc"
+
version = "0.2.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "dyn-clone"
+
version = "1.0.20"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
+
[[package]]
+
name = "ecdsa"
+
version = "0.16.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+
dependencies = [
+
"der",
+
"digest",
+
"elliptic-curve",
+
"rfc6979",
+
"signature",
+
"spki",
+
]
+
+
[[package]]
+
name = "elliptic-curve"
+
version = "0.13.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+
dependencies = [
+
"base16ct",
+
"crypto-bigint",
+
"digest",
+
"ff",
+
"generic-array",
+
"group",
+
"pem-rfc7468",
+
"pkcs8",
+
"rand_core 0.6.4",
+
"sec1",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "encoding_rs"
+
version = "0.8.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
+
dependencies = [
+
"cfg-if",
+
]
+
+
[[package]]
+
name = "enum-as-inner"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
+
dependencies = [
+
"heck 0.5.0",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "equivalent"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+
[[package]]
+
name = "errno"
+
version = "0.3.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+
dependencies = [
+
"libc",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "event-listener"
+
version = "5.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
+
dependencies = [
+
"concurrent-queue",
+
"parking",
+
"pin-project-lite",
+
]
+
+
[[package]]
+
name = "event-listener-strategy"
+
version = "0.5.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
+
dependencies = [
+
"event-listener",
+
"pin-project-lite",
+
]
+
+
[[package]]
+
name = "fastrand"
+
version = "2.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+
+
[[package]]
+
name = "ff"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
+
dependencies = [
+
"rand_core 0.6.4",
+
"subtle",
+
]
+
+
[[package]]
+
name = "filetime"
+
version = "0.2.26"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed"
+
dependencies = [
+
"cfg-if",
+
"libc",
+
"libredox",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "find-msvc-tools"
+
version = "0.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
+
+
[[package]]
+
name = "flate2"
+
version = "1.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
+
dependencies = [
+
"crc32fast",
+
"miniz_oxide",
+
]
+
+
[[package]]
+
name = "fnv"
+
version = "1.0.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+
[[package]]
+
name = "foreign-types"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+
dependencies = [
+
"foreign-types-shared",
+
]
+
+
[[package]]
+
name = "foreign-types-shared"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+
[[package]]
+
name = "form_urlencoded"
+
version = "1.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+
dependencies = [
+
"percent-encoding",
+
]
+
+
[[package]]
+
name = "futf"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+
dependencies = [
+
"mac",
+
"new_debug_unreachable",
+
]
+
+
[[package]]
+
name = "futures-channel"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
+
dependencies = [
+
"futures-core",
+
]
+
+
[[package]]
+
name = "futures-core"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+
+
[[package]]
+
name = "futures-io"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
+
+
[[package]]
+
name = "futures-macro"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "futures-sink"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+
+
[[package]]
+
name = "futures-task"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+
+
[[package]]
+
name = "futures-util"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+
dependencies = [
+
"futures-core",
+
"futures-io",
+
"futures-macro",
+
"futures-sink",
+
"futures-task",
+
"memchr",
+
"pin-project-lite",
+
"pin-utils",
+
"slab",
+
]
+
+
[[package]]
+
name = "generic-array"
+
version = "0.14.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
+
dependencies = [
+
"typenum",
+
"version_check",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "getrandom"
+
version = "0.2.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
+
dependencies = [
+
"cfg-if",
+
"js-sys",
+
"libc",
+
"wasi",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "getrandom"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+
dependencies = [
+
"cfg-if",
+
"js-sys",
+
"libc",
+
"r-efi",
+
"wasip2",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "gimli"
+
version = "0.32.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
+
+
[[package]]
+
name = "group"
+
version = "0.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+
dependencies = [
+
"ff",
+
"rand_core 0.6.4",
+
"subtle",
+
]
+
+
[[package]]
+
name = "gzip-header"
+
version = "1.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2"
+
dependencies = [
+
"crc32fast",
+
]
+
+
[[package]]
+
name = "h2"
+
version = "0.4.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
+
dependencies = [
+
"atomic-waker",
+
"bytes",
+
"fnv",
+
"futures-core",
+
"futures-sink",
+
"http",
+
"indexmap 2.12.0",
+
"slab",
+
"tokio",
+
"tokio-util",
+
"tracing",
+
]
+
+
[[package]]
+
name = "half"
+
version = "2.7.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
+
dependencies = [
+
"cfg-if",
+
"crunchy",
+
"zerocopy",
+
]
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.12.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.14.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.16.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
+
+
[[package]]
+
name = "heck"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+
[[package]]
+
name = "heck"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+
[[package]]
+
name = "hermit-abi"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
+
+
[[package]]
+
name = "hex"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+
[[package]]
+
name = "hex_fmt"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f"
+
+
[[package]]
+
name = "hickory-proto"
+
version = "0.24.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248"
+
dependencies = [
+
"async-trait",
+
"cfg-if",
+
"data-encoding",
+
"enum-as-inner",
+
"futures-channel",
+
"futures-io",
+
"futures-util",
+
"idna",
+
"ipnet",
+
"once_cell",
+
"rand 0.8.5",
+
"thiserror 1.0.69",
+
"tinyvec",
+
"tokio",
+
"tracing",
+
"url",
+
]
+
+
[[package]]
+
name = "hickory-resolver"
+
version = "0.24.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e"
+
dependencies = [
+
"cfg-if",
+
"futures-util",
+
"hickory-proto",
+
"ipconfig",
+
"lru-cache",
+
"once_cell",
+
"parking_lot",
+
"rand 0.8.5",
+
"resolv-conf",
+
"smallvec",
+
"thiserror 1.0.69",
+
"tokio",
+
"tracing",
+
]
+
+
[[package]]
+
name = "hmac"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+
dependencies = [
+
"digest",
+
]
+
+
[[package]]
+
name = "home"
+
version = "0.5.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d"
+
dependencies = [
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "html5ever"
+
version = "0.27.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4"
+
dependencies = [
+
"log",
+
"mac",
+
"markup5ever",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "http"
+
version = "1.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
+
dependencies = [
+
"bytes",
+
"fnv",
+
"itoa",
+
]
+
+
[[package]]
+
name = "http-body"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+
dependencies = [
+
"bytes",
+
"http",
+
]
+
+
[[package]]
+
name = "http-body-util"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
+
dependencies = [
+
"bytes",
+
"futures-core",
+
"http",
+
"http-body",
+
"pin-project-lite",
+
]
+
+
[[package]]
+
name = "httparse"
+
version = "1.10.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+
[[package]]
+
name = "httpdate"
+
version = "1.0.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+
[[package]]
+
name = "hyper"
+
version = "1.7.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
+
dependencies = [
+
"atomic-waker",
+
"bytes",
+
"futures-channel",
+
"futures-core",
+
"h2",
+
"http",
+
"http-body",
+
"httparse",
+
"itoa",
+
"pin-project-lite",
+
"pin-utils",
+
"smallvec",
+
"tokio",
+
"want",
+
]
+
+
[[package]]
+
name = "hyper-rustls"
+
version = "0.27.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
+
dependencies = [
+
"http",
+
"hyper",
+
"hyper-util",
+
"rustls",
+
"rustls-pki-types",
+
"tokio",
+
"tokio-rustls",
+
"tower-service",
+
"webpki-roots",
+
]
+
+
[[package]]
+
name = "hyper-tls"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
+
dependencies = [
+
"bytes",
+
"http-body-util",
+
"hyper",
+
"hyper-util",
+
"native-tls",
+
"tokio",
+
"tokio-native-tls",
+
"tower-service",
+
]
+
+
[[package]]
+
name = "hyper-util"
+
version = "0.1.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
+
dependencies = [
+
"base64 0.22.1",
+
"bytes",
+
"futures-channel",
+
"futures-core",
+
"futures-util",
+
"http",
+
"http-body",
+
"hyper",
+
"ipnet",
+
"libc",
+
"percent-encoding",
+
"pin-project-lite",
+
"socket2 0.6.1",
+
"system-configuration",
+
"tokio",
+
"tower-service",
+
"tracing",
+
"windows-registry",
+
]
+
+
[[package]]
+
name = "iana-time-zone"
+
version = "0.1.64"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
+
dependencies = [
+
"android_system_properties",
+
"core-foundation-sys",
+
"iana-time-zone-haiku",
+
"js-sys",
+
"log",
+
"wasm-bindgen",
+
"windows-core",
+
]
+
+
[[package]]
+
name = "iana-time-zone-haiku"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+
dependencies = [
+
"cc",
+
]
+
+
[[package]]
+
name = "icu_collections"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
+
dependencies = [
+
"displaydoc",
+
"potential_utf",
+
"yoke",
+
"zerofrom",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_locale_core"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
+
dependencies = [
+
"displaydoc",
+
"litemap",
+
"tinystr",
+
"writeable",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_normalizer"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
+
dependencies = [
+
"icu_collections",
+
"icu_normalizer_data",
+
"icu_properties",
+
"icu_provider",
+
"smallvec",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_normalizer_data"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
+
+
[[package]]
+
name = "icu_properties"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
+
dependencies = [
+
"icu_collections",
+
"icu_locale_core",
+
"icu_properties_data",
+
"icu_provider",
+
"zerotrie",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_properties_data"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
+
+
[[package]]
+
name = "icu_provider"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
+
dependencies = [
+
"displaydoc",
+
"icu_locale_core",
+
"writeable",
+
"yoke",
+
"zerofrom",
+
"zerotrie",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "ident_case"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+
[[package]]
+
name = "idna"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+
dependencies = [
+
"idna_adapter",
+
"smallvec",
+
"utf8_iter",
+
]
+
+
[[package]]
+
name = "idna_adapter"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+
dependencies = [
+
"icu_normalizer",
+
"icu_properties",
+
]
+
+
[[package]]
+
name = "indexmap"
+
version = "1.9.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+
dependencies = [
+
"autocfg",
+
"hashbrown 0.12.3",
+
"serde",
+
]
+
+
[[package]]
+
name = "indexmap"
+
version = "2.12.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
+
dependencies = [
+
"equivalent",
+
"hashbrown 0.16.0",
+
"serde",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "indoc"
+
version = "2.0.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
+
dependencies = [
+
"rustversion",
+
]
+
+
[[package]]
+
name = "inventory"
+
version = "0.3.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e"
+
dependencies = [
+
"rustversion",
+
]
+
+
[[package]]
+
name = "ipconfig"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+
dependencies = [
+
"socket2 0.5.10",
+
"widestring",
+
"windows-sys 0.48.0",
+
"winreg",
+
]
+
+
[[package]]
+
name = "ipld-core"
+
version = "0.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
+
dependencies = [
+
"cid",
+
"serde",
+
"serde_bytes",
+
]
+
+
[[package]]
+
name = "ipnet"
+
version = "2.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
+
+
[[package]]
+
name = "iri-string"
+
version = "0.7.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
+
dependencies = [
+
"memchr",
+
"serde",
+
]
+
+
[[package]]
+
name = "is_ci"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
+
+
[[package]]
+
name = "is_terminal_polyfill"
+
version = "1.70.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
+
+
[[package]]
+
name = "itoa"
+
version = "1.0.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+
[[package]]
+
name = "jacquard"
+
version = "0.8.0"
+
dependencies = [
+
"bytes",
+
"getrandom 0.2.16",
+
"http",
+
"jacquard-api",
+
"jacquard-common",
+
"jacquard-derive",
+
"jacquard-identity",
+
"jacquard-oauth",
+
"jose-jwk",
+
"miette",
+
"regex",
+
"reqwest",
+
"serde",
+
"serde_html_form",
+
"serde_json",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
"url",
+
"webpage",
+
]
+
+
[[package]]
+
name = "jacquard-api"
+
version = "0.8.0"
+
dependencies = [
+
"bon",
+
"bytes",
+
"jacquard-common",
+
"jacquard-derive",
+
"jacquard-lexicon",
+
"miette",
+
"rustversion",
+
"serde",
+
"serde_ipld_dagcbor",
+
"thiserror 2.0.17",
+
"unicode-segmentation",
+
]
+
+
[[package]]
+
name = "jacquard-common"
+
version = "0.8.0"
+
dependencies = [
+
"base64 0.22.1",
+
"bon",
+
"bytes",
+
"chrono",
+
"cid",
+
"getrandom 0.2.16",
+
"getrandom 0.3.4",
+
"http",
+
"ipld-core",
+
"k256",
+
"langtag",
+
"miette",
+
"multibase",
+
"multihash",
+
"ouroboros",
+
"p256",
+
"rand 0.9.2",
+
"regex",
+
"reqwest",
+
"serde",
+
"serde_html_form",
+
"serde_ipld_dagcbor",
+
"serde_json",
+
"signature",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"tokio-util",
+
"trait-variant",
+
"url",
+
]
+
+
[[package]]
+
name = "jacquard-derive"
+
version = "0.8.0"
+
dependencies = [
+
"heck 0.5.0",
+
"jacquard-lexicon",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "jacquard-identity"
+
version = "0.8.0"
+
dependencies = [
+
"bon",
+
"bytes",
+
"hickory-resolver",
+
"http",
+
"jacquard-api",
+
"jacquard-common",
+
"jacquard-lexicon",
+
"miette",
+
"moka",
+
"percent-encoding",
+
"reqwest",
+
"serde",
+
"serde_html_form",
+
"serde_json",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
"url",
+
"urlencoding",
+
]
+
+
[[package]]
+
name = "jacquard-lexicon"
+
version = "0.8.0"
+
dependencies = [
+
"cid",
+
"dashmap",
+
"heck 0.5.0",
+
"inventory",
+
"jacquard-common",
+
"miette",
+
"multihash",
+
"prettyplease",
+
"proc-macro2",
+
"quote",
+
"serde",
+
"serde_ipld_dagcbor",
+
"serde_json",
+
"serde_repr",
+
"serde_with",
+
"sha2",
+
"syn 2.0.108",
+
"thiserror 2.0.17",
+
"unicode-segmentation",
+
]
+
+
[[package]]
+
name = "jacquard-oauth"
+
version = "0.8.0"
+
dependencies = [
+
"base64 0.22.1",
+
"bytes",
+
"chrono",
+
"dashmap",
+
"elliptic-curve",
+
"http",
+
"jacquard-common",
+
"jacquard-identity",
+
"jose-jwa",
+
"jose-jwk",
+
"miette",
+
"p256",
+
"rand 0.8.5",
+
"rouille",
+
"serde",
+
"serde_html_form",
+
"serde_json",
+
"sha2",
+
"signature",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
"url",
+
"webbrowser",
+
]
+
+
[[package]]
+
name = "jni"
+
version = "0.21.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+
dependencies = [
+
"cesu8",
+
"cfg-if",
+
"combine",
+
"jni-sys",
+
"log",
+
"thiserror 1.0.69",
+
"walkdir",
+
"windows-sys 0.45.0",
+
]
+
+
[[package]]
+
name = "jni-sys"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+
[[package]]
+
name = "jose-b64"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56"
+
dependencies = [
+
"base64ct",
+
"serde",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "jose-jwa"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "jose-jwk"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7"
+
dependencies = [
+
"jose-b64",
+
"jose-jwa",
+
"p256",
+
"p384",
+
"rsa",
+
"serde",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "js-sys"
+
version = "0.3.82"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
+
dependencies = [
+
"once_cell",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "k256"
+
version = "0.13.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
+
dependencies = [
+
"cfg-if",
+
"ecdsa",
+
"elliptic-curve",
+
"sha2",
+
]
+
+
[[package]]
+
name = "langtag"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9ecb4c689a30e48ebeaa14237f34037e300dd072e6ad21a9ec72e810ff3c6600"
+
dependencies = [
+
"serde",
+
"static-regular-grammar",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "lazy_static"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
dependencies = [
+
"spin",
+
]
+
+
[[package]]
+
name = "libc"
+
version = "0.2.177"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
+
+
[[package]]
+
name = "libm"
+
version = "0.2.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
+
+
[[package]]
+
name = "libredox"
+
version = "0.1.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
+
dependencies = [
+
"bitflags",
+
"libc",
+
"redox_syscall",
+
]
+
+
[[package]]
+
name = "linked-hash-map"
+
version = "0.5.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+
[[package]]
+
name = "linux-raw-sys"
+
version = "0.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+
+
[[package]]
+
name = "litemap"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
+
+
[[package]]
+
name = "lock_api"
+
version = "0.4.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+
dependencies = [
+
"scopeguard",
+
]
+
+
[[package]]
+
name = "log"
+
version = "0.4.28"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
+
+
[[package]]
+
name = "lru-cache"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+
dependencies = [
+
"linked-hash-map",
+
]
+
+
[[package]]
+
name = "lru-slab"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
+
+
[[package]]
+
name = "mac"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+
[[package]]
+
name = "malloc_buf"
+
version = "0.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "markup5ever"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45"
+
dependencies = [
+
"log",
+
"phf",
+
"phf_codegen",
+
"string_cache",
+
"string_cache_codegen",
+
"tendril",
+
]
+
+
[[package]]
+
name = "markup5ever_rcdom"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18"
+
dependencies = [
+
"html5ever",
+
"markup5ever",
+
"tendril",
+
"xml5ever",
+
]
+
+
[[package]]
+
name = "match-lookup"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 1.0.109",
+
]
+
+
[[package]]
+
name = "memchr"
+
version = "2.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
+
+
[[package]]
+
name = "miette"
+
version = "7.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7"
+
dependencies = [
+
"backtrace",
+
"backtrace-ext",
+
"cfg-if",
+
"miette-derive",
+
"owo-colors",
+
"supports-color",
+
"supports-hyperlinks",
+
"supports-unicode",
+
"terminal_size",
+
"textwrap",
+
"unicode-width 0.1.14",
+
]
+
+
[[package]]
+
name = "miette-derive"
+
version = "7.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "mime"
+
version = "0.3.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+
[[package]]
+
name = "mime_guess"
+
version = "2.0.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
+
dependencies = [
+
"mime",
+
"unicase",
+
]
+
+
[[package]]
+
name = "minimal-lexical"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+
[[package]]
+
name = "miniz_oxide"
+
version = "0.8.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+
dependencies = [
+
"adler2",
+
"simd-adler32",
+
]
+
+
[[package]]
+
name = "mio"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
+
dependencies = [
+
"libc",
+
"wasi",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "moka"
+
version = "0.12.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077"
+
dependencies = [
+
"async-lock",
+
"crossbeam-channel",
+
"crossbeam-epoch",
+
"crossbeam-utils",
+
"equivalent",
+
"event-listener",
+
"futures-util",
+
"parking_lot",
+
"portable-atomic",
+
"rustc_version",
+
"smallvec",
+
"tagptr",
+
"uuid",
+
]
+
+
[[package]]
+
name = "multibase"
+
version = "0.9.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77"
+
dependencies = [
+
"base-x",
+
"base256emoji",
+
"data-encoding",
+
"data-encoding-macro",
+
]
+
+
[[package]]
+
name = "multihash"
+
version = "0.19.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
+
dependencies = [
+
"core2",
+
"serde",
+
"unsigned-varint",
+
]
+
+
[[package]]
+
name = "multipart"
+
version = "0.18.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182"
+
dependencies = [
+
"buf_redux",
+
"httparse",
+
"log",
+
"mime",
+
"mime_guess",
+
"quick-error",
+
"rand 0.8.5",
+
"safemem",
+
"tempfile",
+
"twoway",
+
]
+
+
[[package]]
+
name = "native-tls"
+
version = "0.2.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
+
dependencies = [
+
"libc",
+
"log",
+
"openssl",
+
"openssl-probe",
+
"openssl-sys",
+
"schannel",
+
"security-framework",
+
"security-framework-sys",
+
"tempfile",
+
]
+
+
[[package]]
+
name = "ndk-context"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+
[[package]]
+
name = "new_debug_unreachable"
+
version = "1.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
+
+
[[package]]
+
name = "nom"
+
version = "7.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+
dependencies = [
+
"memchr",
+
"minimal-lexical",
+
]
+
+
[[package]]
+
name = "num-bigint-dig"
+
version = "0.8.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b"
+
dependencies = [
+
"lazy_static",
+
"libm",
+
"num-integer",
+
"num-iter",
+
"num-traits",
+
"rand 0.8.5",
+
"smallvec",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "num-conv"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+
[[package]]
+
name = "num-integer"
+
version = "0.1.46"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+
dependencies = [
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-iter"
+
version = "0.1.45"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
+
dependencies = [
+
"autocfg",
+
"num-integer",
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-traits"
+
version = "0.2.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+
dependencies = [
+
"autocfg",
+
"libm",
+
]
+
+
[[package]]
+
name = "num_cpus"
+
version = "1.17.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
+
dependencies = [
+
"hermit-abi",
+
"libc",
+
]
+
+
[[package]]
+
name = "num_threads"
+
version = "0.1.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "objc"
+
version = "0.2.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+
dependencies = [
+
"malloc_buf",
+
]
+
+
[[package]]
+
name = "object"
+
version = "0.37.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "once_cell"
+
version = "1.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+
[[package]]
+
name = "once_cell_polyfill"
+
version = "1.70.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
+
+
[[package]]
+
name = "openssl"
+
version = "0.10.74"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654"
+
dependencies = [
+
"bitflags",
+
"cfg-if",
+
"foreign-types",
+
"libc",
+
"once_cell",
+
"openssl-macros",
+
"openssl-sys",
+
]
+
+
[[package]]
+
name = "openssl-macros"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "openssl-probe"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
+
+
[[package]]
+
name = "openssl-sys"
+
version = "0.9.110"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2"
+
dependencies = [
+
"cc",
+
"libc",
+
"pkg-config",
+
"vcpkg",
+
]
+
+
[[package]]
+
name = "option-ext"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+
[[package]]
+
name = "ouroboros"
+
version = "0.18.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59"
+
dependencies = [
+
"aliasable",
+
"ouroboros_macro",
+
"static_assertions",
+
]
+
+
[[package]]
+
name = "ouroboros_macro"
+
version = "0.18.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0"
+
dependencies = [
+
"heck 0.4.1",
+
"proc-macro2",
+
"proc-macro2-diagnostics",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "owo-colors"
+
version = "4.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52"
+
+
[[package]]
+
name = "p256"
+
version = "0.13.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
+
dependencies = [
+
"ecdsa",
+
"elliptic-curve",
+
"primeorder",
+
"sha2",
+
]
+
+
[[package]]
+
name = "p384"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6"
+
dependencies = [
+
"elliptic-curve",
+
"primeorder",
+
]
+
+
[[package]]
+
name = "parking"
+
version = "2.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
+
+
[[package]]
+
name = "parking_lot"
+
version = "0.12.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+
dependencies = [
+
"lock_api",
+
"parking_lot_core",
+
]
+
+
[[package]]
+
name = "parking_lot_core"
+
version = "0.9.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+
dependencies = [
+
"cfg-if",
+
"libc",
+
"redox_syscall",
+
"smallvec",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "pem-rfc7468"
+
version = "0.7.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+
dependencies = [
+
"base64ct",
+
]
+
+
[[package]]
+
name = "percent-encoding"
+
version = "2.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+
[[package]]
+
name = "phf"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+
dependencies = [
+
"phf_shared",
+
]
+
+
[[package]]
+
name = "phf_codegen"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
+
dependencies = [
+
"phf_generator",
+
"phf_shared",
+
]
+
+
[[package]]
+
name = "phf_generator"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+
dependencies = [
+
"phf_shared",
+
"rand 0.8.5",
+
]
+
+
[[package]]
+
name = "phf_shared"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+
dependencies = [
+
"siphasher",
+
]
+
+
[[package]]
+
name = "pin-project-lite"
+
version = "0.2.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+
+
[[package]]
+
name = "pin-utils"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+
[[package]]
+
name = "pkcs1"
+
version = "0.7.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+
dependencies = [
+
"der",
+
"pkcs8",
+
"spki",
+
]
+
+
[[package]]
+
name = "pkcs8"
+
version = "0.10.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+
dependencies = [
+
"der",
+
"spki",
+
]
+
+
[[package]]
+
name = "pkg-config"
+
version = "0.3.32"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
+
+
[[package]]
+
name = "portable-atomic"
+
version = "1.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
+
+
[[package]]
+
name = "potential_utf"
+
version = "0.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
+
dependencies = [
+
"zerovec",
+
]
+
+
[[package]]
+
name = "powerfmt"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+
[[package]]
+
name = "ppv-lite86"
+
version = "0.2.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+
dependencies = [
+
"zerocopy",
+
]
+
+
[[package]]
+
name = "precomputed-hash"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+
[[package]]
+
name = "prettyplease"
+
version = "0.2.37"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+
dependencies = [
+
"proc-macro2",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "primeorder"
+
version = "0.13.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
+
dependencies = [
+
"elliptic-curve",
+
]
+
+
[[package]]
+
name = "proc-macro-error"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+
dependencies = [
+
"proc-macro-error-attr",
+
"proc-macro2",
+
"quote",
+
"syn 1.0.109",
+
"version_check",
+
]
+
+
[[package]]
+
name = "proc-macro-error-attr"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"version_check",
+
]
+
+
[[package]]
+
name = "proc-macro2"
+
version = "1.0.103"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
+
dependencies = [
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "proc-macro2-diagnostics"
+
version = "0.10.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
"version_check",
+
"yansi",
+
]
+
+
[[package]]
+
name = "quick-error"
+
version = "1.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+
[[package]]
+
name = "quinn"
+
version = "0.11.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
+
dependencies = [
+
"bytes",
+
"cfg_aliases",
+
"pin-project-lite",
+
"quinn-proto",
+
"quinn-udp",
+
"rustc-hash",
+
"rustls",
+
"socket2 0.6.1",
+
"thiserror 2.0.17",
+
"tokio",
+
"tracing",
+
"web-time",
+
]
+
+
[[package]]
+
name = "quinn-proto"
+
version = "0.11.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
+
dependencies = [
+
"bytes",
+
"getrandom 0.3.4",
+
"lru-slab",
+
"rand 0.9.2",
+
"ring",
+
"rustc-hash",
+
"rustls",
+
"rustls-pki-types",
+
"slab",
+
"thiserror 2.0.17",
+
"tinyvec",
+
"tracing",
+
"web-time",
+
]
+
+
[[package]]
+
name = "quinn-udp"
+
version = "0.5.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
+
dependencies = [
+
"cfg_aliases",
+
"libc",
+
"once_cell",
+
"socket2 0.6.1",
+
"tracing",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "quote"
+
version = "1.0.41"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
+
dependencies = [
+
"proc-macro2",
+
]
+
+
[[package]]
+
name = "r-efi"
+
version = "5.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+
[[package]]
+
name = "rand"
+
version = "0.8.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+
dependencies = [
+
"libc",
+
"rand_chacha 0.3.1",
+
"rand_core 0.6.4",
+
]
+
+
[[package]]
+
name = "rand"
+
version = "0.9.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+
dependencies = [
+
"rand_chacha 0.9.0",
+
"rand_core 0.9.3",
+
]
+
+
[[package]]
+
name = "rand_chacha"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+
dependencies = [
+
"ppv-lite86",
+
"rand_core 0.6.4",
+
]
+
+
[[package]]
+
name = "rand_chacha"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+
dependencies = [
+
"ppv-lite86",
+
"rand_core 0.9.3",
+
]
+
+
[[package]]
+
name = "rand_core"
+
version = "0.6.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+
dependencies = [
+
"getrandom 0.2.16",
+
]
+
+
[[package]]
+
name = "rand_core"
+
version = "0.9.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+
dependencies = [
+
"getrandom 0.3.4",
+
]
+
+
[[package]]
+
name = "range-traits"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab"
+
+
[[package]]
+
name = "raw-window-handle"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+
[[package]]
+
name = "redox_syscall"
+
version = "0.5.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+
dependencies = [
+
"bitflags",
+
]
+
+
[[package]]
+
name = "redox_users"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
+
dependencies = [
+
"getrandom 0.2.16",
+
"libredox",
+
"thiserror 2.0.17",
+
]
+
+
[[package]]
+
name = "ref-cast"
+
version = "1.0.25"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
+
dependencies = [
+
"ref-cast-impl",
+
]
+
+
[[package]]
+
name = "ref-cast-impl"
+
version = "1.0.25"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "regex"
+
version = "1.12.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
+
dependencies = [
+
"aho-corasick",
+
"memchr",
+
"regex-automata",
+
"regex-syntax",
+
]
+
+
[[package]]
+
name = "regex-automata"
+
version = "0.4.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
+
dependencies = [
+
"aho-corasick",
+
"memchr",
+
"regex-syntax",
+
]
+
+
[[package]]
+
name = "regex-syntax"
+
version = "0.8.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
+
+
[[package]]
+
name = "reqwest"
+
version = "0.12.24"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
+
dependencies = [
+
"async-compression",
+
"base64 0.22.1",
+
"bytes",
+
"encoding_rs",
+
"futures-core",
+
"futures-util",
+
"h2",
+
"http",
+
"http-body",
+
"http-body-util",
+
"hyper",
+
"hyper-rustls",
+
"hyper-tls",
+
"hyper-util",
+
"js-sys",
+
"log",
+
"mime",
+
"native-tls",
+
"percent-encoding",
+
"pin-project-lite",
+
"quinn",
+
"rustls",
+
"rustls-pki-types",
+
"serde",
+
"serde_json",
+
"serde_urlencoded",
+
"sync_wrapper",
+
"tokio",
+
"tokio-native-tls",
+
"tokio-rustls",
+
"tokio-util",
+
"tower",
+
"tower-http",
+
"tower-service",
+
"url",
+
"wasm-bindgen",
+
"wasm-bindgen-futures",
+
"wasm-streams",
+
"web-sys",
+
"webpki-roots",
+
]
+
+
[[package]]
+
name = "resolv-conf"
+
version = "0.7.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799"
+
+
[[package]]
+
name = "rfc6979"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+
dependencies = [
+
"hmac",
+
"subtle",
+
]
+
+
[[package]]
+
name = "ring"
+
version = "0.17.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
+
dependencies = [
+
"cc",
+
"cfg-if",
+
"getrandom 0.2.16",
+
"libc",
+
"untrusted",
+
"windows-sys 0.52.0",
+
]
+
+
[[package]]
+
name = "rouille"
+
version = "3.6.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3716fbf57fc1084d7a706adf4e445298d123e4a44294c4e8213caf1b85fcc921"
+
dependencies = [
+
"base64 0.13.1",
+
"brotli",
+
"chrono",
+
"deflate",
+
"filetime",
+
"multipart",
+
"percent-encoding",
+
"rand 0.8.5",
+
"serde",
+
"serde_derive",
+
"serde_json",
+
"sha1_smol",
+
"threadpool",
+
"time",
+
"tiny_http",
+
"url",
+
]
+
+
[[package]]
+
name = "rsa"
+
version = "0.9.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
+
dependencies = [
+
"const-oid",
+
"digest",
+
"num-bigint-dig",
+
"num-integer",
+
"num-traits",
+
"pkcs1",
+
"pkcs8",
+
"rand_core 0.6.4",
+
"signature",
+
"spki",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "rustc-demangle"
+
version = "0.1.26"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
+
+
[[package]]
+
name = "rustc-hash"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+
+
[[package]]
+
name = "rustc_version"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+
dependencies = [
+
"semver",
+
]
+
+
[[package]]
+
name = "rustix"
+
version = "1.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
+
dependencies = [
+
"bitflags",
+
"errno",
+
"libc",
+
"linux-raw-sys",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "rustls"
+
version = "0.23.34"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7"
+
dependencies = [
+
"once_cell",
+
"ring",
+
"rustls-pki-types",
+
"rustls-webpki",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "rustls-pki-types"
+
version = "1.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a"
+
dependencies = [
+
"web-time",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "rustls-webpki"
+
version = "0.103.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
+
dependencies = [
+
"ring",
+
"rustls-pki-types",
+
"untrusted",
+
]
+
+
[[package]]
+
name = "rustversion"
+
version = "1.0.22"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+
[[package]]
+
name = "ryu"
+
version = "1.0.20"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+
+
[[package]]
+
name = "safemem"
+
version = "0.3.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+
[[package]]
+
name = "same-file"
+
version = "1.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+
dependencies = [
+
"winapi-util",
+
]
+
+
[[package]]
+
name = "schannel"
+
version = "0.1.28"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
+
dependencies = [
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "schemars"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
+
dependencies = [
+
"dyn-clone",
+
"ref-cast",
+
"serde",
+
"serde_json",
+
]
+
+
[[package]]
+
name = "schemars"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
+
dependencies = [
+
"dyn-clone",
+
"ref-cast",
+
"serde",
+
"serde_json",
+
]
+
+
[[package]]
+
name = "scopeguard"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+
[[package]]
+
name = "sec1"
+
version = "0.7.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+
dependencies = [
+
"base16ct",
+
"der",
+
"generic-array",
+
"pkcs8",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "security-framework"
+
version = "2.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
+
dependencies = [
+
"bitflags",
+
"core-foundation",
+
"core-foundation-sys",
+
"libc",
+
"security-framework-sys",
+
]
+
+
[[package]]
+
name = "security-framework-sys"
+
version = "2.15.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
+
dependencies = [
+
"core-foundation-sys",
+
"libc",
+
]
+
+
[[package]]
+
name = "semver"
+
version = "1.0.27"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+
+
[[package]]
+
name = "serde"
+
version = "1.0.228"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+
dependencies = [
+
"serde_core",
+
"serde_derive",
+
]
+
+
[[package]]
+
name = "serde_bytes"
+
version = "0.11.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
+
dependencies = [
+
"serde",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "serde_core"
+
version = "1.0.228"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+
dependencies = [
+
"serde_derive",
+
]
+
+
[[package]]
+
name = "serde_derive"
+
version = "1.0.228"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "serde_html_form"
+
version = "0.2.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f"
+
dependencies = [
+
"form_urlencoded",
+
"indexmap 2.12.0",
+
"itoa",
+
"ryu",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "serde_ipld_dagcbor"
+
version = "0.6.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778"
+
dependencies = [
+
"cbor4ii",
+
"ipld-core",
+
"scopeguard",
+
"serde",
+
]
+
+
[[package]]
+
name = "serde_json"
+
version = "1.0.145"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
+
dependencies = [
+
"itoa",
+
"memchr",
+
"ryu",
+
"serde",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "serde_repr"
+
version = "0.1.20"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "serde_urlencoded"
+
version = "0.7.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+
dependencies = [
+
"form_urlencoded",
+
"itoa",
+
"ryu",
+
"serde",
+
]
+
+
[[package]]
+
name = "serde_with"
+
version = "3.15.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04"
+
dependencies = [
+
"base64 0.22.1",
+
"chrono",
+
"hex",
+
"indexmap 1.9.3",
+
"indexmap 2.12.0",
+
"schemars 0.9.0",
+
"schemars 1.0.4",
+
"serde_core",
+
"serde_json",
+
"serde_with_macros",
+
"time",
+
]
+
+
[[package]]
+
name = "serde_with_macros"
+
version = "3.15.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955"
+
dependencies = [
+
"darling",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "sha1_smol"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d"
+
+
[[package]]
+
name = "sha2"
+
version = "0.10.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+
dependencies = [
+
"cfg-if",
+
"cpufeatures",
+
"digest",
+
]
+
+
[[package]]
+
name = "shellexpand"
+
version = "3.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb"
+
dependencies = [
+
"dirs",
+
]
+
+
[[package]]
+
name = "shlex"
+
version = "1.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+
[[package]]
+
name = "signal-hook-registry"
+
version = "1.4.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "signature"
+
version = "2.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+
dependencies = [
+
"digest",
+
"rand_core 0.6.4",
+
]
+
+
[[package]]
+
name = "simd-adler32"
+
version = "0.3.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+
[[package]]
+
name = "siphasher"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
+
[[package]]
+
name = "slab"
+
version = "0.4.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
+
+
[[package]]
+
name = "smallvec"
+
version = "1.15.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+
+
[[package]]
+
name = "smol_str"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5"
+
dependencies = [
+
"borsh",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "socket2"
+
version = "0.5.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
+
dependencies = [
+
"libc",
+
"windows-sys 0.52.0",
+
]
+
+
[[package]]
+
name = "socket2"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
+
dependencies = [
+
"libc",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "spin"
+
version = "0.9.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+
[[package]]
+
name = "spki"
+
version = "0.7.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+
dependencies = [
+
"base64ct",
+
"der",
+
]
+
+
[[package]]
+
name = "stable_deref_trait"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
+
[[package]]
+
name = "static-regular-grammar"
+
version = "2.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4f4a6c40247579acfbb138c3cd7de3dab113ab4ac6227f1b7de7d626ee667957"
+
dependencies = [
+
"abnf",
+
"btree-range-map",
+
"ciborium",
+
"hex_fmt",
+
"indoc",
+
"proc-macro-error",
+
"proc-macro2",
+
"quote",
+
"serde",
+
"sha2",
+
"syn 2.0.108",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "static_assertions"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+
[[package]]
+
name = "string_cache"
+
version = "0.8.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
+
dependencies = [
+
"new_debug_unreachable",
+
"parking_lot",
+
"phf_shared",
+
"precomputed-hash",
+
"serde",
+
]
+
+
[[package]]
+
name = "string_cache_codegen"
+
version = "0.5.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
+
dependencies = [
+
"phf_generator",
+
"phf_shared",
+
"proc-macro2",
+
"quote",
+
]
+
+
[[package]]
+
name = "strsim"
+
version = "0.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+
[[package]]
+
name = "subtle"
+
version = "2.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+
[[package]]
+
name = "supports-color"
+
version = "3.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6"
+
dependencies = [
+
"is_ci",
+
]
+
+
[[package]]
+
name = "supports-hyperlinks"
+
version = "3.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b"
+
+
[[package]]
+
name = "supports-unicode"
+
version = "3.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2"
+
+
[[package]]
+
name = "syn"
+
version = "1.0.109"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "syn"
+
version = "2.0.108"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "sync_wrapper"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+
dependencies = [
+
"futures-core",
+
]
+
+
[[package]]
+
name = "synstructure"
+
version = "0.13.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "system-configuration"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
+
dependencies = [
+
"bitflags",
+
"core-foundation",
+
"system-configuration-sys",
+
]
+
+
[[package]]
+
name = "system-configuration-sys"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
+
dependencies = [
+
"core-foundation-sys",
+
"libc",
+
]
+
+
[[package]]
+
name = "tagptr"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
+
+
[[package]]
+
name = "tempfile"
+
version = "3.23.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
+
dependencies = [
+
"fastrand",
+
"getrandom 0.3.4",
+
"once_cell",
+
"rustix",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "tendril"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+
dependencies = [
+
"futf",
+
"mac",
+
"utf-8",
+
]
+
+
[[package]]
+
name = "terminal_size"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0"
+
dependencies = [
+
"rustix",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "textwrap"
+
version = "0.16.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
+
dependencies = [
+
"unicode-linebreak",
+
"unicode-width 0.2.2",
+
]
+
+
[[package]]
+
name = "thiserror"
+
version = "1.0.69"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+
dependencies = [
+
"thiserror-impl 1.0.69",
+
]
+
+
[[package]]
+
name = "thiserror"
+
version = "2.0.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
+
dependencies = [
+
"thiserror-impl 2.0.17",
+
]
+
+
[[package]]
+
name = "thiserror-impl"
+
version = "1.0.69"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "thiserror-impl"
+
version = "2.0.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "threadpool"
+
version = "1.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+
dependencies = [
+
"num_cpus",
+
]
+
+
[[package]]
+
name = "time"
+
version = "0.3.44"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
+
dependencies = [
+
"deranged",
+
"itoa",
+
"libc",
+
"num-conv",
+
"num_threads",
+
"powerfmt",
+
"serde",
+
"time-core",
+
"time-macros",
+
]
+
+
[[package]]
+
name = "time-core"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
+
+
[[package]]
+
name = "time-macros"
+
version = "0.2.24"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
+
dependencies = [
+
"num-conv",
+
"time-core",
+
]
+
+
[[package]]
+
name = "tiny_http"
+
version = "0.12.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82"
+
dependencies = [
+
"ascii",
+
"chunked_transfer",
+
"httpdate",
+
"log",
+
]
+
+
[[package]]
+
name = "tinystr"
+
version = "0.8.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
+
dependencies = [
+
"displaydoc",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "tinyvec"
+
version = "1.10.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
+
dependencies = [
+
"tinyvec_macros",
+
]
+
+
[[package]]
+
name = "tinyvec_macros"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+
[[package]]
+
name = "tokio"
+
version = "1.48.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
+
dependencies = [
+
"bytes",
+
"libc",
+
"mio",
+
"parking_lot",
+
"pin-project-lite",
+
"signal-hook-registry",
+
"socket2 0.6.1",
+
"tokio-macros",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "tokio-macros"
+
version = "2.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "tokio-native-tls"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+
dependencies = [
+
"native-tls",
+
"tokio",
+
]
+
+
[[package]]
+
name = "tokio-rustls"
+
version = "0.26.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
+
dependencies = [
+
"rustls",
+
"tokio",
+
]
+
+
[[package]]
+
name = "tokio-util"
+
version = "0.7.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
+
dependencies = [
+
"bytes",
+
"futures-core",
+
"futures-sink",
+
"pin-project-lite",
+
"tokio",
+
]
+
+
[[package]]
+
name = "tower"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+
dependencies = [
+
"futures-core",
+
"futures-util",
+
"pin-project-lite",
+
"sync_wrapper",
+
"tokio",
+
"tower-layer",
+
"tower-service",
+
]
+
+
[[package]]
+
name = "tower-http"
+
version = "0.6.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
+
dependencies = [
+
"bitflags",
+
"bytes",
+
"futures-util",
+
"http",
+
"http-body",
+
"iri-string",
+
"pin-project-lite",
+
"tower",
+
"tower-layer",
+
"tower-service",
+
]
+
+
[[package]]
+
name = "tower-layer"
+
version = "0.3.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+
[[package]]
+
name = "tower-service"
+
version = "0.3.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+
[[package]]
+
name = "tracing"
+
version = "0.1.41"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
+
dependencies = [
+
"pin-project-lite",
+
"tracing-attributes",
+
"tracing-core",
+
]
+
+
[[package]]
+
name = "tracing-attributes"
+
version = "0.1.30"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "tracing-core"
+
version = "0.1.34"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
+
dependencies = [
+
"once_cell",
+
]
+
+
[[package]]
+
name = "trait-variant"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "try-lock"
+
version = "0.2.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+
[[package]]
+
name = "twoway"
+
version = "0.1.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "typenum"
+
version = "1.19.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+
+
[[package]]
+
name = "unicase"
+
version = "2.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
+
+
[[package]]
+
name = "unicode-ident"
+
version = "1.0.22"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
+
+
[[package]]
+
name = "unicode-linebreak"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+
[[package]]
+
name = "unicode-segmentation"
+
version = "1.12.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+
+
[[package]]
+
name = "unicode-width"
+
version = "0.1.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
+
+
[[package]]
+
name = "unicode-width"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+
+
[[package]]
+
name = "unsigned-varint"
+
version = "0.8.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
+
+
[[package]]
+
name = "untrusted"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+
[[package]]
+
name = "url"
+
version = "2.5.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
+
dependencies = [
+
"form_urlencoded",
+
"idna",
+
"percent-encoding",
+
"serde",
+
]
+
+
[[package]]
+
name = "urlencoding"
+
version = "2.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+
[[package]]
+
name = "utf-8"
+
version = "0.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+
[[package]]
+
name = "utf8_iter"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+
[[package]]
+
name = "utf8parse"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
+
[[package]]
+
name = "uuid"
+
version = "1.18.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
+
dependencies = [
+
"getrandom 0.3.4",
+
"js-sys",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "vcpkg"
+
version = "0.2.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+
[[package]]
+
name = "version_check"
+
version = "0.9.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+
[[package]]
+
name = "walkdir"
+
version = "2.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+
dependencies = [
+
"same-file",
+
"winapi-util",
+
]
+
+
[[package]]
+
name = "want"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+
dependencies = [
+
"try-lock",
+
]
+
+
[[package]]
+
name = "wasi"
+
version = "0.11.1+wasi-snapshot-preview1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+
[[package]]
+
name = "wasip2"
+
version = "1.0.1+wasi-0.2.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
+
dependencies = [
+
"wit-bindgen",
+
]
+
+
[[package]]
+
name = "wasm-bindgen"
+
version = "0.2.105"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
+
dependencies = [
+
"cfg-if",
+
"once_cell",
+
"rustversion",
+
"wasm-bindgen-macro",
+
"wasm-bindgen-shared",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-futures"
+
version = "0.4.55"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
+
dependencies = [
+
"cfg-if",
+
"js-sys",
+
"once_cell",
+
"wasm-bindgen",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-macro"
+
version = "0.2.105"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
+
dependencies = [
+
"quote",
+
"wasm-bindgen-macro-support",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-macro-support"
+
version = "0.2.105"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
+
dependencies = [
+
"bumpalo",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
"wasm-bindgen-shared",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-shared"
+
version = "0.2.105"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
+
dependencies = [
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "wasm-streams"
+
version = "0.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65"
+
dependencies = [
+
"futures-util",
+
"js-sys",
+
"wasm-bindgen",
+
"wasm-bindgen-futures",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "web-sys"
+
version = "0.3.82"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
+
dependencies = [
+
"js-sys",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "web-time"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+
dependencies = [
+
"js-sys",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "webbrowser"
+
version = "0.8.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b"
+
dependencies = [
+
"core-foundation",
+
"home",
+
"jni",
+
"log",
+
"ndk-context",
+
"objc",
+
"raw-window-handle",
+
"url",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "webpage"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac"
+
dependencies = [
+
"html5ever",
+
"markup5ever_rcdom",
+
"serde_json",
+
"url",
+
]
+
+
[[package]]
+
name = "webpki-roots"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
+
dependencies = [
+
"rustls-pki-types",
+
]
+
+
[[package]]
+
name = "widestring"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
+
+
[[package]]
+
name = "winapi-util"
+
version = "0.1.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+
dependencies = [
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "windows-core"
+
version = "0.62.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+
dependencies = [
+
"windows-implement",
+
"windows-interface",
+
"windows-link 0.2.1",
+
"windows-result 0.4.1",
+
"windows-strings 0.5.1",
+
]
+
+
[[package]]
+
name = "windows-implement"
+
version = "0.60.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "windows-interface"
+
version = "0.59.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "windows-link"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
+
+
[[package]]
+
name = "windows-link"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+
[[package]]
+
name = "windows-registry"
+
version = "0.5.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
+
dependencies = [
+
"windows-link 0.1.3",
+
"windows-result 0.3.4",
+
"windows-strings 0.4.2",
+
]
+
+
[[package]]
+
name = "windows-result"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
+
dependencies = [
+
"windows-link 0.1.3",
+
]
+
+
[[package]]
+
name = "windows-result"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-strings"
+
version = "0.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
+
dependencies = [
+
"windows-link 0.1.3",
+
]
+
+
[[package]]
+
name = "windows-strings"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.45.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+
dependencies = [
+
"windows-targets 0.42.2",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.48.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+
dependencies = [
+
"windows-targets 0.48.5",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.52.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+
dependencies = [
+
"windows-targets 0.52.6",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.60.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+
dependencies = [
+
"windows-targets 0.53.5",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.61.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+
dependencies = [
+
"windows_aarch64_gnullvm 0.42.2",
+
"windows_aarch64_msvc 0.42.2",
+
"windows_i686_gnu 0.42.2",
+
"windows_i686_msvc 0.42.2",
+
"windows_x86_64_gnu 0.42.2",
+
"windows_x86_64_gnullvm 0.42.2",
+
"windows_x86_64_msvc 0.42.2",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+
dependencies = [
+
"windows_aarch64_gnullvm 0.48.5",
+
"windows_aarch64_msvc 0.48.5",
+
"windows_i686_gnu 0.48.5",
+
"windows_i686_msvc 0.48.5",
+
"windows_x86_64_gnu 0.48.5",
+
"windows_x86_64_gnullvm 0.48.5",
+
"windows_x86_64_msvc 0.48.5",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+
dependencies = [
+
"windows_aarch64_gnullvm 0.52.6",
+
"windows_aarch64_msvc 0.52.6",
+
"windows_i686_gnu 0.52.6",
+
"windows_i686_gnullvm 0.52.6",
+
"windows_i686_msvc 0.52.6",
+
"windows_x86_64_gnu 0.52.6",
+
"windows_x86_64_gnullvm 0.52.6",
+
"windows_x86_64_msvc 0.52.6",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.53.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
+
dependencies = [
+
"windows-link 0.2.1",
+
"windows_aarch64_gnullvm 0.53.1",
+
"windows_aarch64_msvc 0.53.1",
+
"windows_i686_gnu 0.53.1",
+
"windows_i686_gnullvm 0.53.1",
+
"windows_i686_msvc 0.53.1",
+
"windows_x86_64_gnu 0.53.1",
+
"windows_x86_64_gnullvm 0.53.1",
+
"windows_x86_64_msvc 0.53.1",
+
]
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
+
+
[[package]]
+
name = "windows_i686_gnullvm"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+
[[package]]
+
name = "windows_i686_gnullvm"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.42.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
+
+
[[package]]
+
name = "winreg"
+
version = "0.50.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+
dependencies = [
+
"cfg-if",
+
"windows-sys 0.48.0",
+
]
+
+
[[package]]
+
name = "wisp-cli"
+
version = "0.1.0"
+
dependencies = [
+
"base64 0.22.1",
+
"bytes",
+
"clap",
+
"flate2",
+
"jacquard",
+
"jacquard-api",
+
"jacquard-common",
+
"jacquard-derive",
+
"jacquard-identity",
+
"jacquard-lexicon",
+
"jacquard-oauth",
+
"miette",
+
"mime_guess",
+
"reqwest",
+
"rustversion",
+
"serde",
+
"serde_json",
+
"shellexpand",
+
"tokio",
+
"walkdir",
+
]
+
+
[[package]]
+
name = "wit-bindgen"
+
version = "0.46.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+
+
[[package]]
+
name = "writeable"
+
version = "0.6.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
+
+
[[package]]
+
name = "xml5ever"
+
version = "0.18.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69"
+
dependencies = [
+
"log",
+
"mac",
+
"markup5ever",
+
]
+
+
[[package]]
+
name = "yansi"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
+
+
[[package]]
+
name = "yoke"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
+
dependencies = [
+
"stable_deref_trait",
+
"yoke-derive",
+
"zerofrom",
+
]
+
+
[[package]]
+
name = "yoke-derive"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
"synstructure",
+
]
+
+
[[package]]
+
name = "zerocopy"
+
version = "0.8.27"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
+
dependencies = [
+
"zerocopy-derive",
+
]
+
+
[[package]]
+
name = "zerocopy-derive"
+
version = "0.8.27"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+
+
[[package]]
+
name = "zerofrom"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+
dependencies = [
+
"zerofrom-derive",
+
]
+
+
[[package]]
+
name = "zerofrom-derive"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
"synstructure",
+
]
+
+
[[package]]
+
name = "zeroize"
+
version = "1.8.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "zerotrie"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
+
dependencies = [
+
"displaydoc",
+
"yoke",
+
"zerofrom",
+
]
+
+
[[package]]
+
name = "zerovec"
+
version = "0.11.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
+
dependencies = [
+
"yoke",
+
"zerofrom",
+
"zerovec-derive",
+
]
+
+
[[package]]
+
name = "zerovec-derive"
+
version = "0.11.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.108",
+
]
+30
cli/Cargo.toml
···
+
[package]
+
name = "wisp-cli"
+
version = "0.1.0"
+
edition = "2024"
+
+
[features]
+
default = ["place_wisp"]
+
place_wisp = []
+
+
[dependencies]
+
jacquard = { path = "jacquard/crates/jacquard", features = ["loopback"] }
+
jacquard-oauth = { path = "jacquard/crates/jacquard-oauth" }
+
jacquard-api = { path = "jacquard/crates/jacquard-api" }
+
jacquard-common = { path = "jacquard/crates/jacquard-common" }
+
jacquard-identity = { path = "jacquard/crates/jacquard-identity", features = ["dns"] }
+
jacquard-derive = { path = "jacquard/crates/jacquard-derive" }
+
jacquard-lexicon = { path = "jacquard/crates/jacquard-lexicon" }
+
clap = { version = "4.5.51", features = ["derive"] }
+
tokio = { version = "1.48", features = ["full"] }
+
miette = { version = "7.6.0", features = ["fancy"] }
+
serde_json = "1.0.145"
+
serde = { version = "1.0", features = ["derive"] }
+
shellexpand = "3.1.1"
+
reqwest = "0.12"
+
rustversion = "1.0"
+
flate2 = "1.0"
+
base64 = "0.22"
+
walkdir = "2.5"
+
mime_guess = "2.0"
+
bytes = "1.10"
+51
cli/lexicons/place/wisp/fs.json
···
+
{
+
"lexicon": 1,
+
"id": "place.wisp.fs",
+
"defs": {
+
"main": {
+
"type": "record",
+
"description": "Virtual filesystem manifest for a Wisp site",
+
"record": {
+
"type": "object",
+
"required": ["site", "root", "createdAt"],
+
"properties": {
+
"site": { "type": "string" },
+
"root": { "type": "ref", "ref": "#directory" },
+
"fileCount": { "type": "integer", "minimum": 0, "maximum": 1000 },
+
"createdAt": { "type": "string", "format": "datetime" }
+
}
+
}
+
},
+
"file": {
+
"type": "object",
+
"required": ["type", "blob"],
+
"properties": {
+
"type": { "type": "string", "const": "file" },
+
"blob": { "type": "blob", "accept": ["*/*"], "maxSize": 1000000, "description": "Content blob ref" },
+
"encoding": { "type": "string", "enum": ["gzip"], "description": "Content encoding (e.g., gzip for compressed files)" },
+
"mimeType": { "type": "string", "description": "Original MIME type before compression" },
+
"base64": { "type": "boolean", "description": "True if blob content is base64-encoded (used to bypass PDS content sniffing)" }
+
}
+
},
+
"directory": {
+
"type": "object",
+
"required": ["type", "entries"],
+
"properties": {
+
"type": { "type": "string", "const": "directory" },
+
"entries": {
+
"type": "array",
+
"maxLength": 500,
+
"items": { "type": "ref", "ref": "#entry" }
+
}
+
}
+
},
+
"entry": {
+
"type": "object",
+
"required": ["name", "node"],
+
"properties": {
+
"name": { "type": "string", "maxLength": 255 },
+
"node": { "type": "union", "refs": ["#file", "#directory"] }
+
}
+
}
+
}
+
}
+43
cli/src/builder_types.rs
···
+
// @generated by jacquard-lexicon. DO NOT EDIT.
+
//
+
// This file was automatically generated from Lexicon schemas.
+
// Any manual changes will be overwritten on the next regeneration.
+
+
/// Marker type indicating a builder field has been set
+
pub struct Set<T>(pub T);
+
impl<T> Set<T> {
+
/// Extract the inner value
+
#[inline]
+
pub fn into_inner(self) -> T {
+
self.0
+
}
+
}
+
+
/// Marker type indicating a builder field has not been set
+
pub struct Unset;
+
/// Trait indicating a builder field is set (has a value)
+
#[rustversion::attr(
+
since(1.78.0),
+
diagnostic::on_unimplemented(
+
message = "the field `{Self}` was not set, but this method requires it to be set",
+
label = "the field `{Self}` was not set"
+
)
+
)]
+
pub trait IsSet: private::Sealed {}
+
/// Trait indicating a builder field is unset (no value yet)
+
#[rustversion::attr(
+
since(1.78.0),
+
diagnostic::on_unimplemented(
+
message = "the field `{Self}` was already set, but this method requires it to be unset",
+
label = "the field `{Self}` was already set"
+
)
+
)]
+
pub trait IsUnset: private::Sealed {}
+
impl<T> IsSet for Set<T> {}
+
impl IsUnset for Unset {}
+
mod private {
+
/// Sealed trait to prevent external implementations
+
pub trait Sealed {}
+
impl<T> Sealed for super::Set<T> {}
+
impl Sealed for super::Unset {}
+
}
+191
cli/src/main.rs
···
+
mod builder_types;
+
mod place_wisp;
+
+
use clap::Parser;
+
use jacquard::CowStr;
+
use jacquard::client::{Agent, FileAuthStore, AgentSessionExt};
+
use jacquard::oauth::client::OAuthClient;
+
use jacquard::oauth::loopback::LoopbackConfig;
+
use jacquard::prelude::IdentityResolver;
+
use jacquard_common::types::string::{Datetime, Rkey, RecordKey};
+
use jacquard_common::types::blob::MimeType;
+
use miette::IntoDiagnostic;
+
use std::path::{Path, PathBuf};
+
use flate2::Compression;
+
use flate2::write::GzEncoder;
+
use std::io::Write;
+
use base64::Engine;
+
+
use place_wisp::fs::*;
+
+
#[derive(Parser, Debug)]
+
#[command(author, version, about = "Deploy a static site to wisp.place")]
+
struct Args {
+
/// Handle (e.g., alice.bsky.social), DID, or PDS URL
+
input: CowStr<'static>,
+
+
/// Path to the directory containing your static site
+
#[arg(short, long, default_value = ".")]
+
path: PathBuf,
+
+
/// Site name (defaults to directory name)
+
#[arg(short, long)]
+
site: Option<String>,
+
+
/// Path to auth store file (will be created if missing)
+
#[arg(long, default_value = "/tmp/wisp-oauth-session.json")]
+
store: String,
+
}
+
+
#[tokio::main]
+
async fn main() -> miette::Result<()> {
+
let args = Args::parse();
+
+
let oauth = OAuthClient::with_default_config(FileAuthStore::new(&args.store));
+
let session = oauth
+
.login_with_local_server(args.input, Default::default(), LoopbackConfig::default())
+
.await?;
+
+
let agent: Agent<_> = Agent::from(session);
+
+
// Verify the path exists
+
if !args.path.exists() {
+
return Err(miette::miette!("Path does not exist: {}", args.path.display()));
+
}
+
+
// Get site name
+
let site_name = args.site.unwrap_or_else(|| {
+
args.path
+
.file_name()
+
.and_then(|n| n.to_str())
+
.unwrap_or("site")
+
.to_string()
+
});
+
+
println!("Deploying site '{}'...", site_name);
+
+
// Build directory tree
+
let root_dir = build_directory(&agent, &args.path).await?;
+
+
// Count total files
+
let file_count = count_files(&root_dir);
+
+
// Create the Fs record
+
let fs_record = Fs::new()
+
.site(CowStr::from(site_name.clone()))
+
.root(root_dir)
+
.file_count(file_count as i64)
+
.created_at(Datetime::now())
+
.build();
+
+
// Use site name as the record key
+
let rkey = Rkey::new(&site_name).map_err(|e| miette::miette!("Invalid rkey: {}", e))?;
+
let output = agent.put_record(RecordKey::from(rkey), fs_record).await?;
+
+
// Extract DID from the AT URI (format: at://did:plc:xxx/collection/rkey)
+
let uri_str = output.uri.to_string();
+
let did = uri_str
+
.strip_prefix("at://")
+
.and_then(|s| s.split('/').next())
+
.ok_or_else(|| miette::miette!("Failed to parse DID from URI"))?;
+
+
println!("Deployed site '{}': {}", site_name, output.uri);
+
println!("Available at: https://sites.wisp.place/{}/{}", did, site_name);
+
+
Ok(())
+
}
+
+
/// Recursively build a Directory from a filesystem path
+
fn build_directory<'a>(
+
agent: &'a Agent<impl jacquard::client::AgentSession + IdentityResolver + 'a>,
+
dir_path: &'a Path,
+
) -> std::pin::Pin<Box<dyn std::future::Future<Output = miette::Result<Directory<'static>>> + 'a>>
+
{
+
Box::pin(async move {
+
let mut entries = Vec::new();
+
+
for entry in std::fs::read_dir(dir_path).into_diagnostic()? {
+
let entry = entry.into_diagnostic()?;
+
let path = entry.path();
+
let name = entry.file_name();
+
let name_str = name.to_str()
+
.ok_or_else(|| miette::miette!("Invalid filename: {:?}", name))?;
+
+
// Skip hidden files
+
if name_str.starts_with('.') {
+
continue;
+
}
+
+
let metadata = entry.metadata().into_diagnostic()?;
+
+
if metadata.is_file() {
+
let file_node = process_file(agent, &path).await?;
+
entries.push(Entry::new()
+
.name(CowStr::from(name_str.to_string()))
+
.node(EntryNode::File(Box::new(file_node)))
+
.build());
+
} else if metadata.is_dir() {
+
let subdir = build_directory(agent, &path).await?;
+
entries.push(Entry::new()
+
.name(CowStr::from(name_str.to_string()))
+
.node(EntryNode::Directory(Box::new(subdir)))
+
.build());
+
}
+
}
+
+
Ok(Directory::new()
+
.r#type(CowStr::from("directory"))
+
.entries(entries)
+
.build())
+
})
+
}
+
+
/// Process a single file: gzip -> base64 -> upload blob
+
async fn process_file(
+
agent: &Agent<impl jacquard::client::AgentSession + IdentityResolver>,
+
file_path: &Path,
+
) -> miette::Result<File<'static>>
+
{
+
// Read file
+
let file_data = std::fs::read(file_path).into_diagnostic()?;
+
+
// Detect original MIME type
+
let original_mime = mime_guess::from_path(file_path)
+
.first_or_octet_stream()
+
.to_string();
+
+
// Gzip compress
+
let mut encoder = GzEncoder::new(Vec::new(), Compression::default());
+
encoder.write_all(&file_data).into_diagnostic()?;
+
let gzipped = encoder.finish().into_diagnostic()?;
+
+
// Base64 encode the gzipped data
+
let base64_bytes = base64::prelude::BASE64_STANDARD.encode(&gzipped).into_bytes();
+
+
// Upload blob as octet-stream
+
let blob = agent.upload_blob(
+
base64_bytes,
+
MimeType::new_static("application/octet-stream"),
+
).await?;
+
+
Ok(File::new()
+
.r#type(CowStr::from("file"))
+
.blob(blob)
+
.encoding(CowStr::from("gzip"))
+
.mime_type(CowStr::from(original_mime))
+
.base64(true)
+
.build())
+
}
+
+
/// Count total files in a directory tree
+
fn count_files(dir: &Directory) -> usize {
+
let mut count = 0;
+
for entry in &dir.entries {
+
match &entry.node {
+
EntryNode::File(_) => count += 1,
+
EntryNode::Directory(subdir) => count += count_files(subdir),
+
_ => {} // Unknown variants
+
}
+
}
+
count
+
}
+9
cli/src/mod.rs
···
+
// @generated by jacquard-lexicon. DO NOT EDIT.
+
//
+
// This file was automatically generated from Lexicon schemas.
+
// Any manual changes will be overwritten on the next regeneration.
+
+
pub mod builder_types;
+
+
#[cfg(feature = "place_wisp")]
+
pub mod place_wisp;
+6
cli/src/place_wisp.rs
···
+
// @generated by jacquard-lexicon. DO NOT EDIT.
+
//
+
// This file was automatically generated from Lexicon schemas.
+
// Any manual changes will be overwritten on the next regeneration.
+
+
pub mod fs;
+1230
cli/src/place_wisp/fs.rs
···
+
// @generated by jacquard-lexicon. DO NOT EDIT.
+
//
+
// Lexicon: place.wisp.fs
+
//
+
// This file was automatically generated from Lexicon schemas.
+
// Any manual changes will be overwritten on the next regeneration.
+
+
#[jacquard_derive::lexicon]
+
#[derive(
+
serde::Serialize,
+
serde::Deserialize,
+
Debug,
+
Clone,
+
PartialEq,
+
Eq,
+
jacquard_derive::IntoStatic
+
)]
+
#[serde(rename_all = "camelCase")]
+
pub struct Directory<'a> {
+
#[serde(borrow)]
+
pub entries: Vec<crate::place_wisp::fs::Entry<'a>>,
+
#[serde(borrow)]
+
pub r#type: jacquard_common::CowStr<'a>,
+
}
+
+
pub mod directory_state {
+
+
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
+
#[allow(unused)]
+
use ::core::marker::PhantomData;
+
mod sealed {
+
pub trait Sealed {}
+
}
+
/// State trait tracking which required fields have been set
+
pub trait State: sealed::Sealed {
+
type Type;
+
type Entries;
+
}
+
/// Empty state - all required fields are unset
+
pub struct Empty(());
+
impl sealed::Sealed for Empty {}
+
impl State for Empty {
+
type Type = Unset;
+
type Entries = Unset;
+
}
+
///State transition - sets the `type` field to Set
+
pub struct SetType<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetType<S> {}
+
impl<S: State> State for SetType<S> {
+
type Type = Set<members::r#type>;
+
type Entries = S::Entries;
+
}
+
///State transition - sets the `entries` field to Set
+
pub struct SetEntries<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetEntries<S> {}
+
impl<S: State> State for SetEntries<S> {
+
type Type = S::Type;
+
type Entries = Set<members::entries>;
+
}
+
/// Marker types for field names
+
#[allow(non_camel_case_types)]
+
pub mod members {
+
///Marker type for the `type` field
+
pub struct r#type(());
+
///Marker type for the `entries` field
+
pub struct entries(());
+
}
+
}
+
+
/// Builder for constructing an instance of this type
+
pub struct DirectoryBuilder<'a, S: directory_state::State> {
+
_phantom_state: ::core::marker::PhantomData<fn() -> S>,
+
__unsafe_private_named: (
+
::core::option::Option<Vec<crate::place_wisp::fs::Entry<'a>>>,
+
::core::option::Option<jacquard_common::CowStr<'a>>,
+
),
+
_phantom: ::core::marker::PhantomData<&'a ()>,
+
}
+
+
impl<'a> Directory<'a> {
+
/// Create a new builder for this type
+
pub fn new() -> DirectoryBuilder<'a, directory_state::Empty> {
+
DirectoryBuilder::new()
+
}
+
}
+
+
impl<'a> DirectoryBuilder<'a, directory_state::Empty> {
+
/// Create a new builder with all fields unset
+
pub fn new() -> Self {
+
DirectoryBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: (None, None),
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> DirectoryBuilder<'a, S>
+
where
+
S: directory_state::State,
+
S::Entries: directory_state::IsUnset,
+
{
+
/// Set the `entries` field (required)
+
pub fn entries(
+
mut self,
+
value: impl Into<Vec<crate::place_wisp::fs::Entry<'a>>>,
+
) -> DirectoryBuilder<'a, directory_state::SetEntries<S>> {
+
self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
+
DirectoryBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> DirectoryBuilder<'a, S>
+
where
+
S: directory_state::State,
+
S::Type: directory_state::IsUnset,
+
{
+
/// Set the `type` field (required)
+
pub fn r#type(
+
mut self,
+
value: impl Into<jacquard_common::CowStr<'a>>,
+
) -> DirectoryBuilder<'a, directory_state::SetType<S>> {
+
self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into());
+
DirectoryBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> DirectoryBuilder<'a, S>
+
where
+
S: directory_state::State,
+
S::Type: directory_state::IsSet,
+
S::Entries: directory_state::IsSet,
+
{
+
/// Build the final struct
+
pub fn build(self) -> Directory<'a> {
+
Directory {
+
entries: self.__unsafe_private_named.0.unwrap(),
+
r#type: self.__unsafe_private_named.1.unwrap(),
+
extra_data: Default::default(),
+
}
+
}
+
/// Build the final struct with custom extra_data
+
pub fn build_with_data(
+
self,
+
extra_data: std::collections::BTreeMap<
+
jacquard_common::smol_str::SmolStr,
+
jacquard_common::types::value::Data<'a>,
+
>,
+
) -> Directory<'a> {
+
Directory {
+
entries: self.__unsafe_private_named.0.unwrap(),
+
r#type: self.__unsafe_private_named.1.unwrap(),
+
extra_data: Some(extra_data),
+
}
+
}
+
}
+
+
fn lexicon_doc_place_wisp_fs() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
+
::jacquard_lexicon::lexicon::LexiconDoc {
+
lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1,
+
id: ::jacquard_common::CowStr::new_static("place.wisp.fs"),
+
revision: None,
+
description: None,
+
defs: {
+
let mut map = ::std::collections::BTreeMap::new();
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("directory"),
+
::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject {
+
description: None,
+
required: Some(
+
vec![
+
::jacquard_common::smol_str::SmolStr::new_static("type"),
+
::jacquard_common::smol_str::SmolStr::new_static("entries")
+
],
+
),
+
nullable: None,
+
properties: {
+
#[allow(unused_mut)]
+
let mut map = ::std::collections::BTreeMap::new();
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("entries"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray {
+
description: None,
+
items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef {
+
description: None,
+
r#ref: ::jacquard_common::CowStr::new_static("#entry"),
+
}),
+
min_length: None,
+
max_length: Some(500usize),
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("type"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: None,
+
format: None,
+
default: None,
+
min_length: None,
+
max_length: None,
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map
+
},
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("entry"),
+
::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject {
+
description: None,
+
required: Some(
+
vec![
+
::jacquard_common::smol_str::SmolStr::new_static("name"),
+
::jacquard_common::smol_str::SmolStr::new_static("node")
+
],
+
),
+
nullable: None,
+
properties: {
+
#[allow(unused_mut)]
+
let mut map = ::std::collections::BTreeMap::new();
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("name"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: None,
+
format: None,
+
default: None,
+
min_length: None,
+
max_length: Some(255usize),
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("node"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::Union(::jacquard_lexicon::lexicon::LexRefUnion {
+
description: None,
+
refs: vec![
+
::jacquard_common::CowStr::new_static("#file"),
+
::jacquard_common::CowStr::new_static("#directory")
+
],
+
closed: None,
+
}),
+
);
+
map
+
},
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("file"),
+
::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject {
+
description: None,
+
required: Some(
+
vec![
+
::jacquard_common::smol_str::SmolStr::new_static("type"),
+
::jacquard_common::smol_str::SmolStr::new_static("blob")
+
],
+
),
+
nullable: None,
+
properties: {
+
#[allow(unused_mut)]
+
let mut map = ::std::collections::BTreeMap::new();
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("base64"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::Boolean(::jacquard_lexicon::lexicon::LexBoolean {
+
description: None,
+
default: None,
+
r#const: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("blob"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::Blob(::jacquard_lexicon::lexicon::LexBlob {
+
description: None,
+
accept: None,
+
max_size: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("encoding"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: Some(
+
::jacquard_common::CowStr::new_static(
+
"Content encoding (e.g., gzip for compressed files)",
+
),
+
),
+
format: None,
+
default: None,
+
min_length: None,
+
max_length: None,
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("mimeType"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: Some(
+
::jacquard_common::CowStr::new_static(
+
"Original MIME type before compression",
+
),
+
),
+
format: None,
+
default: None,
+
min_length: None,
+
max_length: None,
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("type"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: None,
+
format: None,
+
default: None,
+
min_length: None,
+
max_length: None,
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map
+
},
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("main"),
+
::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord {
+
description: Some(
+
::jacquard_common::CowStr::new_static(
+
"Virtual filesystem manifest for a Wisp site",
+
),
+
),
+
key: None,
+
record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject {
+
description: None,
+
required: Some(
+
vec![
+
::jacquard_common::smol_str::SmolStr::new_static("site"),
+
::jacquard_common::smol_str::SmolStr::new_static("root"),
+
::jacquard_common::smol_str::SmolStr::new_static("createdAt")
+
],
+
),
+
nullable: None,
+
properties: {
+
#[allow(unused_mut)]
+
let mut map = ::std::collections::BTreeMap::new();
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static(
+
"createdAt",
+
),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: None,
+
format: Some(
+
::jacquard_lexicon::lexicon::LexStringFormat::Datetime,
+
),
+
default: None,
+
min_length: None,
+
max_length: None,
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static(
+
"fileCount",
+
),
+
::jacquard_lexicon::lexicon::LexObjectProperty::Integer(::jacquard_lexicon::lexicon::LexInteger {
+
description: None,
+
default: None,
+
minimum: Some(0i64),
+
maximum: Some(1000i64),
+
r#enum: None,
+
r#const: None,
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("root"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef {
+
description: None,
+
r#ref: ::jacquard_common::CowStr::new_static("#directory"),
+
}),
+
);
+
map.insert(
+
::jacquard_common::smol_str::SmolStr::new_static("site"),
+
::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
+
description: None,
+
format: None,
+
default: None,
+
min_length: None,
+
max_length: None,
+
min_graphemes: None,
+
max_graphemes: None,
+
r#enum: None,
+
r#const: None,
+
known_values: None,
+
}),
+
);
+
map
+
},
+
}),
+
}),
+
);
+
map
+
},
+
}
+
}
+
+
impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Directory<'a> {
+
fn nsid() -> &'static str {
+
"place.wisp.fs"
+
}
+
fn def_name() -> &'static str {
+
"directory"
+
}
+
fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
+
lexicon_doc_place_wisp_fs()
+
}
+
fn validate(
+
&self,
+
) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
+
{
+
let value = &self.entries;
+
#[allow(unused_comparisons)]
+
if value.len() > 500usize {
+
return Err(::jacquard_lexicon::validation::ConstraintError::MaxLength {
+
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
+
"entries",
+
),
+
max: 500usize,
+
actual: value.len(),
+
});
+
}
+
}
+
Ok(())
+
}
+
}
+
+
#[jacquard_derive::lexicon]
+
#[derive(
+
serde::Serialize,
+
serde::Deserialize,
+
Debug,
+
Clone,
+
PartialEq,
+
Eq,
+
jacquard_derive::IntoStatic
+
)]
+
#[serde(rename_all = "camelCase")]
+
pub struct Entry<'a> {
+
#[serde(borrow)]
+
pub name: jacquard_common::CowStr<'a>,
+
#[serde(borrow)]
+
pub node: EntryNode<'a>,
+
}
+
+
pub mod entry_state {
+
+
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
+
#[allow(unused)]
+
use ::core::marker::PhantomData;
+
mod sealed {
+
pub trait Sealed {}
+
}
+
/// State trait tracking which required fields have been set
+
pub trait State: sealed::Sealed {
+
type Name;
+
type Node;
+
}
+
/// Empty state - all required fields are unset
+
pub struct Empty(());
+
impl sealed::Sealed for Empty {}
+
impl State for Empty {
+
type Name = Unset;
+
type Node = Unset;
+
}
+
///State transition - sets the `name` field to Set
+
pub struct SetName<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetName<S> {}
+
impl<S: State> State for SetName<S> {
+
type Name = Set<members::name>;
+
type Node = S::Node;
+
}
+
///State transition - sets the `node` field to Set
+
pub struct SetNode<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetNode<S> {}
+
impl<S: State> State for SetNode<S> {
+
type Name = S::Name;
+
type Node = Set<members::node>;
+
}
+
/// Marker types for field names
+
#[allow(non_camel_case_types)]
+
pub mod members {
+
///Marker type for the `name` field
+
pub struct name(());
+
///Marker type for the `node` field
+
pub struct node(());
+
}
+
}
+
+
/// Builder for constructing an instance of this type
+
pub struct EntryBuilder<'a, S: entry_state::State> {
+
_phantom_state: ::core::marker::PhantomData<fn() -> S>,
+
__unsafe_private_named: (
+
::core::option::Option<jacquard_common::CowStr<'a>>,
+
::core::option::Option<EntryNode<'a>>,
+
),
+
_phantom: ::core::marker::PhantomData<&'a ()>,
+
}
+
+
impl<'a> Entry<'a> {
+
/// Create a new builder for this type
+
pub fn new() -> EntryBuilder<'a, entry_state::Empty> {
+
EntryBuilder::new()
+
}
+
}
+
+
impl<'a> EntryBuilder<'a, entry_state::Empty> {
+
/// Create a new builder with all fields unset
+
pub fn new() -> Self {
+
EntryBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: (None, None),
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> EntryBuilder<'a, S>
+
where
+
S: entry_state::State,
+
S::Name: entry_state::IsUnset,
+
{
+
/// Set the `name` field (required)
+
pub fn name(
+
mut self,
+
value: impl Into<jacquard_common::CowStr<'a>>,
+
) -> EntryBuilder<'a, entry_state::SetName<S>> {
+
self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
+
EntryBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> EntryBuilder<'a, S>
+
where
+
S: entry_state::State,
+
S::Node: entry_state::IsUnset,
+
{
+
/// Set the `node` field (required)
+
pub fn node(
+
mut self,
+
value: impl Into<EntryNode<'a>>,
+
) -> EntryBuilder<'a, entry_state::SetNode<S>> {
+
self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into());
+
EntryBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> EntryBuilder<'a, S>
+
where
+
S: entry_state::State,
+
S::Name: entry_state::IsSet,
+
S::Node: entry_state::IsSet,
+
{
+
/// Build the final struct
+
pub fn build(self) -> Entry<'a> {
+
Entry {
+
name: self.__unsafe_private_named.0.unwrap(),
+
node: self.__unsafe_private_named.1.unwrap(),
+
extra_data: Default::default(),
+
}
+
}
+
/// Build the final struct with custom extra_data
+
pub fn build_with_data(
+
self,
+
extra_data: std::collections::BTreeMap<
+
jacquard_common::smol_str::SmolStr,
+
jacquard_common::types::value::Data<'a>,
+
>,
+
) -> Entry<'a> {
+
Entry {
+
name: self.__unsafe_private_named.0.unwrap(),
+
node: self.__unsafe_private_named.1.unwrap(),
+
extra_data: Some(extra_data),
+
}
+
}
+
}
+
+
#[jacquard_derive::open_union]
+
#[derive(
+
serde::Serialize,
+
serde::Deserialize,
+
Debug,
+
Clone,
+
PartialEq,
+
Eq,
+
jacquard_derive::IntoStatic
+
)]
+
#[serde(tag = "$type")]
+
#[serde(bound(deserialize = "'de: 'a"))]
+
pub enum EntryNode<'a> {
+
#[serde(rename = "place.wisp.fs#file")]
+
File(Box<crate::place_wisp::fs::File<'a>>),
+
#[serde(rename = "place.wisp.fs#directory")]
+
Directory(Box<crate::place_wisp::fs::Directory<'a>>),
+
}
+
+
impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Entry<'a> {
+
fn nsid() -> &'static str {
+
"place.wisp.fs"
+
}
+
fn def_name() -> &'static str {
+
"entry"
+
}
+
fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
+
lexicon_doc_place_wisp_fs()
+
}
+
fn validate(
+
&self,
+
) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
+
{
+
let value = &self.name;
+
#[allow(unused_comparisons)]
+
if <str>::len(value.as_ref()) > 255usize {
+
return Err(::jacquard_lexicon::validation::ConstraintError::MaxLength {
+
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
+
"name",
+
),
+
max: 255usize,
+
actual: <str>::len(value.as_ref()),
+
});
+
}
+
}
+
Ok(())
+
}
+
}
+
+
#[jacquard_derive::lexicon]
+
#[derive(
+
serde::Serialize,
+
serde::Deserialize,
+
Debug,
+
Clone,
+
PartialEq,
+
Eq,
+
jacquard_derive::IntoStatic
+
)]
+
#[serde(rename_all = "camelCase")]
+
pub struct File<'a> {
+
/// True if blob content is base64-encoded (used to bypass PDS content sniffing)
+
#[serde(skip_serializing_if = "std::option::Option::is_none")]
+
pub base64: Option<bool>,
+
/// Content blob ref
+
#[serde(borrow)]
+
pub blob: jacquard_common::types::blob::BlobRef<'a>,
+
/// Content encoding (e.g., gzip for compressed files)
+
#[serde(skip_serializing_if = "std::option::Option::is_none")]
+
#[serde(borrow)]
+
pub encoding: Option<jacquard_common::CowStr<'a>>,
+
/// Original MIME type before compression
+
#[serde(skip_serializing_if = "std::option::Option::is_none")]
+
#[serde(borrow)]
+
pub mime_type: Option<jacquard_common::CowStr<'a>>,
+
#[serde(borrow)]
+
pub r#type: jacquard_common::CowStr<'a>,
+
}
+
+
pub mod file_state {
+
+
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
+
#[allow(unused)]
+
use ::core::marker::PhantomData;
+
mod sealed {
+
pub trait Sealed {}
+
}
+
/// State trait tracking which required fields have been set
+
pub trait State: sealed::Sealed {
+
type Type;
+
type Blob;
+
}
+
/// Empty state - all required fields are unset
+
pub struct Empty(());
+
impl sealed::Sealed for Empty {}
+
impl State for Empty {
+
type Type = Unset;
+
type Blob = Unset;
+
}
+
///State transition - sets the `type` field to Set
+
pub struct SetType<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetType<S> {}
+
impl<S: State> State for SetType<S> {
+
type Type = Set<members::r#type>;
+
type Blob = S::Blob;
+
}
+
///State transition - sets the `blob` field to Set
+
pub struct SetBlob<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetBlob<S> {}
+
impl<S: State> State for SetBlob<S> {
+
type Type = S::Type;
+
type Blob = Set<members::blob>;
+
}
+
/// Marker types for field names
+
#[allow(non_camel_case_types)]
+
pub mod members {
+
///Marker type for the `type` field
+
pub struct r#type(());
+
///Marker type for the `blob` field
+
pub struct blob(());
+
}
+
}
+
+
/// Builder for constructing an instance of this type
+
pub struct FileBuilder<'a, S: file_state::State> {
+
_phantom_state: ::core::marker::PhantomData<fn() -> S>,
+
__unsafe_private_named: (
+
::core::option::Option<bool>,
+
::core::option::Option<jacquard_common::types::blob::BlobRef<'a>>,
+
::core::option::Option<jacquard_common::CowStr<'a>>,
+
::core::option::Option<jacquard_common::CowStr<'a>>,
+
::core::option::Option<jacquard_common::CowStr<'a>>,
+
),
+
_phantom: ::core::marker::PhantomData<&'a ()>,
+
}
+
+
impl<'a> File<'a> {
+
/// Create a new builder for this type
+
pub fn new() -> FileBuilder<'a, file_state::Empty> {
+
FileBuilder::new()
+
}
+
}
+
+
impl<'a> FileBuilder<'a, file_state::Empty> {
+
/// Create a new builder with all fields unset
+
pub fn new() -> Self {
+
FileBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: (None, None, None, None, None),
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S: file_state::State> FileBuilder<'a, S> {
+
/// Set the `base64` field (optional)
+
pub fn base64(mut self, value: impl Into<Option<bool>>) -> Self {
+
self.__unsafe_private_named.0 = value.into();
+
self
+
}
+
/// Set the `base64` field to an Option value (optional)
+
pub fn maybe_base64(mut self, value: Option<bool>) -> Self {
+
self.__unsafe_private_named.0 = value;
+
self
+
}
+
}
+
+
impl<'a, S> FileBuilder<'a, S>
+
where
+
S: file_state::State,
+
S::Blob: file_state::IsUnset,
+
{
+
/// Set the `blob` field (required)
+
pub fn blob(
+
mut self,
+
value: impl Into<jacquard_common::types::blob::BlobRef<'a>>,
+
) -> FileBuilder<'a, file_state::SetBlob<S>> {
+
self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into());
+
FileBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S: file_state::State> FileBuilder<'a, S> {
+
/// Set the `encoding` field (optional)
+
pub fn encoding(
+
mut self,
+
value: impl Into<Option<jacquard_common::CowStr<'a>>>,
+
) -> Self {
+
self.__unsafe_private_named.2 = value.into();
+
self
+
}
+
/// Set the `encoding` field to an Option value (optional)
+
pub fn maybe_encoding(mut self, value: Option<jacquard_common::CowStr<'a>>) -> Self {
+
self.__unsafe_private_named.2 = value;
+
self
+
}
+
}
+
+
impl<'a, S: file_state::State> FileBuilder<'a, S> {
+
/// Set the `mimeType` field (optional)
+
pub fn mime_type(
+
mut self,
+
value: impl Into<Option<jacquard_common::CowStr<'a>>>,
+
) -> Self {
+
self.__unsafe_private_named.3 = value.into();
+
self
+
}
+
/// Set the `mimeType` field to an Option value (optional)
+
pub fn maybe_mime_type(
+
mut self,
+
value: Option<jacquard_common::CowStr<'a>>,
+
) -> Self {
+
self.__unsafe_private_named.3 = value;
+
self
+
}
+
}
+
+
impl<'a, S> FileBuilder<'a, S>
+
where
+
S: file_state::State,
+
S::Type: file_state::IsUnset,
+
{
+
/// Set the `type` field (required)
+
pub fn r#type(
+
mut self,
+
value: impl Into<jacquard_common::CowStr<'a>>,
+
) -> FileBuilder<'a, file_state::SetType<S>> {
+
self.__unsafe_private_named.4 = ::core::option::Option::Some(value.into());
+
FileBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> FileBuilder<'a, S>
+
where
+
S: file_state::State,
+
S::Type: file_state::IsSet,
+
S::Blob: file_state::IsSet,
+
{
+
/// Build the final struct
+
pub fn build(self) -> File<'a> {
+
File {
+
base64: self.__unsafe_private_named.0,
+
blob: self.__unsafe_private_named.1.unwrap(),
+
encoding: self.__unsafe_private_named.2,
+
mime_type: self.__unsafe_private_named.3,
+
r#type: self.__unsafe_private_named.4.unwrap(),
+
extra_data: Default::default(),
+
}
+
}
+
/// Build the final struct with custom extra_data
+
pub fn build_with_data(
+
self,
+
extra_data: std::collections::BTreeMap<
+
jacquard_common::smol_str::SmolStr,
+
jacquard_common::types::value::Data<'a>,
+
>,
+
) -> File<'a> {
+
File {
+
base64: self.__unsafe_private_named.0,
+
blob: self.__unsafe_private_named.1.unwrap(),
+
encoding: self.__unsafe_private_named.2,
+
mime_type: self.__unsafe_private_named.3,
+
r#type: self.__unsafe_private_named.4.unwrap(),
+
extra_data: Some(extra_data),
+
}
+
}
+
}
+
+
impl<'a> ::jacquard_lexicon::schema::LexiconSchema for File<'a> {
+
fn nsid() -> &'static str {
+
"place.wisp.fs"
+
}
+
fn def_name() -> &'static str {
+
"file"
+
}
+
fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
+
lexicon_doc_place_wisp_fs()
+
}
+
fn validate(
+
&self,
+
) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
+
Ok(())
+
}
+
}
+
+
/// Virtual filesystem manifest for a Wisp site
+
#[jacquard_derive::lexicon]
+
#[derive(
+
serde::Serialize,
+
serde::Deserialize,
+
Debug,
+
Clone,
+
PartialEq,
+
Eq,
+
jacquard_derive::IntoStatic
+
)]
+
#[serde(rename_all = "camelCase")]
+
pub struct Fs<'a> {
+
pub created_at: jacquard_common::types::string::Datetime,
+
#[serde(skip_serializing_if = "std::option::Option::is_none")]
+
pub file_count: Option<i64>,
+
#[serde(borrow)]
+
pub root: crate::place_wisp::fs::Directory<'a>,
+
#[serde(borrow)]
+
pub site: jacquard_common::CowStr<'a>,
+
}
+
+
pub mod fs_state {
+
+
pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
+
#[allow(unused)]
+
use ::core::marker::PhantomData;
+
mod sealed {
+
pub trait Sealed {}
+
}
+
/// State trait tracking which required fields have been set
+
pub trait State: sealed::Sealed {
+
type Site;
+
type Root;
+
type CreatedAt;
+
}
+
/// Empty state - all required fields are unset
+
pub struct Empty(());
+
impl sealed::Sealed for Empty {}
+
impl State for Empty {
+
type Site = Unset;
+
type Root = Unset;
+
type CreatedAt = Unset;
+
}
+
///State transition - sets the `site` field to Set
+
pub struct SetSite<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetSite<S> {}
+
impl<S: State> State for SetSite<S> {
+
type Site = Set<members::site>;
+
type Root = S::Root;
+
type CreatedAt = S::CreatedAt;
+
}
+
///State transition - sets the `root` field to Set
+
pub struct SetRoot<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetRoot<S> {}
+
impl<S: State> State for SetRoot<S> {
+
type Site = S::Site;
+
type Root = Set<members::root>;
+
type CreatedAt = S::CreatedAt;
+
}
+
///State transition - sets the `created_at` field to Set
+
pub struct SetCreatedAt<S: State = Empty>(PhantomData<fn() -> S>);
+
impl<S: State> sealed::Sealed for SetCreatedAt<S> {}
+
impl<S: State> State for SetCreatedAt<S> {
+
type Site = S::Site;
+
type Root = S::Root;
+
type CreatedAt = Set<members::created_at>;
+
}
+
/// Marker types for field names
+
#[allow(non_camel_case_types)]
+
pub mod members {
+
///Marker type for the `site` field
+
pub struct site(());
+
///Marker type for the `root` field
+
pub struct root(());
+
///Marker type for the `created_at` field
+
pub struct created_at(());
+
}
+
}
+
+
/// Builder for constructing an instance of this type
+
pub struct FsBuilder<'a, S: fs_state::State> {
+
_phantom_state: ::core::marker::PhantomData<fn() -> S>,
+
__unsafe_private_named: (
+
::core::option::Option<jacquard_common::types::string::Datetime>,
+
::core::option::Option<i64>,
+
::core::option::Option<crate::place_wisp::fs::Directory<'a>>,
+
::core::option::Option<jacquard_common::CowStr<'a>>,
+
),
+
_phantom: ::core::marker::PhantomData<&'a ()>,
+
}
+
+
impl<'a> Fs<'a> {
+
/// Create a new builder for this type
+
pub fn new() -> FsBuilder<'a, fs_state::Empty> {
+
FsBuilder::new()
+
}
+
}
+
+
impl<'a> FsBuilder<'a, fs_state::Empty> {
+
/// Create a new builder with all fields unset
+
pub fn new() -> Self {
+
FsBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: (None, None, None, None),
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> FsBuilder<'a, S>
+
where
+
S: fs_state::State,
+
S::CreatedAt: fs_state::IsUnset,
+
{
+
/// Set the `createdAt` field (required)
+
pub fn created_at(
+
mut self,
+
value: impl Into<jacquard_common::types::string::Datetime>,
+
) -> FsBuilder<'a, fs_state::SetCreatedAt<S>> {
+
self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
+
FsBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S: fs_state::State> FsBuilder<'a, S> {
+
/// Set the `fileCount` field (optional)
+
pub fn file_count(mut self, value: impl Into<Option<i64>>) -> Self {
+
self.__unsafe_private_named.1 = value.into();
+
self
+
}
+
/// Set the `fileCount` field to an Option value (optional)
+
pub fn maybe_file_count(mut self, value: Option<i64>) -> Self {
+
self.__unsafe_private_named.1 = value;
+
self
+
}
+
}
+
+
impl<'a, S> FsBuilder<'a, S>
+
where
+
S: fs_state::State,
+
S::Root: fs_state::IsUnset,
+
{
+
/// Set the `root` field (required)
+
pub fn root(
+
mut self,
+
value: impl Into<crate::place_wisp::fs::Directory<'a>>,
+
) -> FsBuilder<'a, fs_state::SetRoot<S>> {
+
self.__unsafe_private_named.2 = ::core::option::Option::Some(value.into());
+
FsBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> FsBuilder<'a, S>
+
where
+
S: fs_state::State,
+
S::Site: fs_state::IsUnset,
+
{
+
/// Set the `site` field (required)
+
pub fn site(
+
mut self,
+
value: impl Into<jacquard_common::CowStr<'a>>,
+
) -> FsBuilder<'a, fs_state::SetSite<S>> {
+
self.__unsafe_private_named.3 = ::core::option::Option::Some(value.into());
+
FsBuilder {
+
_phantom_state: ::core::marker::PhantomData,
+
__unsafe_private_named: self.__unsafe_private_named,
+
_phantom: ::core::marker::PhantomData,
+
}
+
}
+
}
+
+
impl<'a, S> FsBuilder<'a, S>
+
where
+
S: fs_state::State,
+
S::Site: fs_state::IsSet,
+
S::Root: fs_state::IsSet,
+
S::CreatedAt: fs_state::IsSet,
+
{
+
/// Build the final struct
+
pub fn build(self) -> Fs<'a> {
+
Fs {
+
created_at: self.__unsafe_private_named.0.unwrap(),
+
file_count: self.__unsafe_private_named.1,
+
root: self.__unsafe_private_named.2.unwrap(),
+
site: self.__unsafe_private_named.3.unwrap(),
+
extra_data: Default::default(),
+
}
+
}
+
/// Build the final struct with custom extra_data
+
pub fn build_with_data(
+
self,
+
extra_data: std::collections::BTreeMap<
+
jacquard_common::smol_str::SmolStr,
+
jacquard_common::types::value::Data<'a>,
+
>,
+
) -> Fs<'a> {
+
Fs {
+
created_at: self.__unsafe_private_named.0.unwrap(),
+
file_count: self.__unsafe_private_named.1,
+
root: self.__unsafe_private_named.2.unwrap(),
+
site: self.__unsafe_private_named.3.unwrap(),
+
extra_data: Some(extra_data),
+
}
+
}
+
}
+
+
impl<'a> Fs<'a> {
+
pub fn uri(
+
uri: impl Into<jacquard_common::CowStr<'a>>,
+
) -> Result<
+
jacquard_common::types::uri::RecordUri<'a, FsRecord>,
+
jacquard_common::types::uri::UriError,
+
> {
+
jacquard_common::types::uri::RecordUri::try_from_uri(
+
jacquard_common::types::string::AtUri::new_cow(uri.into())?,
+
)
+
}
+
}
+
+
/// Typed wrapper for GetRecord response with this collection's record type.
+
#[derive(
+
serde::Serialize,
+
serde::Deserialize,
+
Debug,
+
Clone,
+
PartialEq,
+
Eq,
+
jacquard_derive::IntoStatic
+
)]
+
#[serde(rename_all = "camelCase")]
+
pub struct FsGetRecordOutput<'a> {
+
#[serde(skip_serializing_if = "std::option::Option::is_none")]
+
#[serde(borrow)]
+
pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
+
#[serde(borrow)]
+
pub uri: jacquard_common::types::string::AtUri<'a>,
+
#[serde(borrow)]
+
pub value: Fs<'a>,
+
}
+
+
impl From<FsGetRecordOutput<'_>> for Fs<'_> {
+
fn from(output: FsGetRecordOutput<'_>) -> Self {
+
use jacquard_common::IntoStatic;
+
output.value.into_static()
+
}
+
}
+
+
impl jacquard_common::types::collection::Collection for Fs<'_> {
+
const NSID: &'static str = "place.wisp.fs";
+
type Record = FsRecord;
+
}
+
+
/// Marker type for deserializing records from this collection.
+
#[derive(Debug, serde::Serialize, serde::Deserialize)]
+
pub struct FsRecord;
+
impl jacquard_common::xrpc::XrpcResp for FsRecord {
+
const NSID: &'static str = "place.wisp.fs";
+
const ENCODING: &'static str = "application/json";
+
type Output<'de> = FsGetRecordOutput<'de>;
+
type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
+
}
+
+
impl jacquard_common::types::collection::Collection for FsRecord {
+
const NSID: &'static str = "place.wisp.fs";
+
type Record = FsRecord;
+
}
+
+
impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Fs<'a> {
+
fn nsid() -> &'static str {
+
"place.wisp.fs"
+
}
+
fn def_name() -> &'static str {
+
"main"
+
}
+
fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
+
lexicon_doc_place_wisp_fs()
+
}
+
fn validate(
+
&self,
+
) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
+
if let Some(ref value) = self.file_count {
+
if *value > 1000i64 {
+
return Err(::jacquard_lexicon::validation::ConstraintError::Maximum {
+
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
+
"file_count",
+
),
+
max: 1000i64,
+
actual: *value,
+
});
+
}
+
}
+
if let Some(ref value) = self.file_count {
+
if *value < 0i64 {
+
return Err(::jacquard_lexicon::validation::ConstraintError::Minimum {
+
path: ::jacquard_lexicon::validation::ValidationPath::from_field(
+
"file_count",
+
),
+
min: 0i64,
+
actual: *value,
+
});
+
}
+
}
+
Ok(())
+
}
+
}
+14
cli/test_headers.rs
···
+
use http::Request;
+
+
fn main() {
+
let builder = Request::builder()
+
.header(http::header::CONTENT_TYPE, "*/*")
+
.header(http::header::CONTENT_TYPE, "application/octet-stream");
+
+
let req = builder.body(()).unwrap();
+
+
println!("Content-Type headers:");
+
for value in req.headers().get_all(http::header::CONTENT_TYPE) {
+
println!(" {:?}", value);
+
}
+
}
create-admin.ts scripts/create-admin.ts
-44
src/lexicon/index.ts
···
-
/**
-
* GENERATED CODE - DO NOT MODIFY
-
*/
-
import {
-
type Auth,
-
type Options as XrpcOptions,
-
Server as XrpcServer,
-
type StreamConfigOrHandler,
-
type MethodConfigOrHandler,
-
createServer as createXrpcServer,
-
} from '@atproto/xrpc-server'
-
import { schemas } from './lexicons.js'
-
-
export function createServer(options?: XrpcOptions): Server {
-
return new Server(options)
-
}
-
-
export class Server {
-
xrpc: XrpcServer
-
place: PlaceNS
-
-
constructor(options?: XrpcOptions) {
-
this.xrpc = createXrpcServer(schemas, options)
-
this.place = new PlaceNS(this)
-
}
-
}
-
-
export class PlaceNS {
-
_server: Server
-
wisp: PlaceWispNS
-
-
constructor(server: Server) {
-
this._server = server
-
this.wisp = new PlaceWispNS(server)
-
}
-
}
-
-
export class PlaceWispNS {
-
_server: Server
-
-
constructor(server: Server) {
-
this._server = server
-
}
-
}
-141
src/lexicon/lexicons.ts
···
-
/**
-
* GENERATED CODE - DO NOT MODIFY
-
*/
-
import {
-
type LexiconDoc,
-
Lexicons,
-
ValidationError,
-
type ValidationResult,
-
} from '@atproto/lexicon'
-
import { type $Typed, is$typed, maybe$typed } from './util.js'
-
-
export const schemaDict = {
-
PlaceWispFs: {
-
lexicon: 1,
-
id: 'place.wisp.fs',
-
defs: {
-
main: {
-
type: 'record',
-
description: 'Virtual filesystem manifest for a Wisp site',
-
record: {
-
type: 'object',
-
required: ['site', 'root', 'createdAt'],
-
properties: {
-
site: {
-
type: 'string',
-
},
-
root: {
-
type: 'ref',
-
ref: 'lex:place.wisp.fs#directory',
-
},
-
fileCount: {
-
type: 'integer',
-
minimum: 0,
-
maximum: 1000,
-
},
-
createdAt: {
-
type: 'string',
-
format: 'datetime',
-
},
-
},
-
},
-
},
-
file: {
-
type: 'object',
-
required: ['type', 'blob'],
-
properties: {
-
type: {
-
type: 'string',
-
const: 'file',
-
},
-
blob: {
-
type: 'blob',
-
accept: ['*/*'],
-
maxSize: 1000000,
-
description: 'Content blob ref',
-
},
-
encoding: {
-
type: 'string',
-
enum: ['gzip'],
-
description: 'Content encoding (e.g., gzip for compressed files)',
-
},
-
mimeType: {
-
type: 'string',
-
description: 'Original MIME type before compression',
-
},
-
base64: {
-
type: 'boolean',
-
description:
-
'True if blob content is base64-encoded (used to bypass PDS content sniffing)',
-
},
-
},
-
},
-
directory: {
-
type: 'object',
-
required: ['type', 'entries'],
-
properties: {
-
type: {
-
type: 'string',
-
const: 'directory',
-
},
-
entries: {
-
type: 'array',
-
maxLength: 500,
-
items: {
-
type: 'ref',
-
ref: 'lex:place.wisp.fs#entry',
-
},
-
},
-
},
-
},
-
entry: {
-
type: 'object',
-
required: ['name', 'node'],
-
properties: {
-
name: {
-
type: 'string',
-
maxLength: 255,
-
},
-
node: {
-
type: 'union',
-
refs: ['lex:place.wisp.fs#file', 'lex:place.wisp.fs#directory'],
-
},
-
},
-
},
-
},
-
},
-
} as const satisfies Record<string, LexiconDoc>
-
export const schemas = Object.values(schemaDict) satisfies LexiconDoc[]
-
export const lexicons: Lexicons = new Lexicons(schemas)
-
-
export function validate<T extends { $type: string }>(
-
v: unknown,
-
id: string,
-
hash: string,
-
requiredType: true,
-
): ValidationResult<T>
-
export function validate<T extends { $type?: string }>(
-
v: unknown,
-
id: string,
-
hash: string,
-
requiredType?: false,
-
): ValidationResult<T>
-
export function validate(
-
v: unknown,
-
id: string,
-
hash: string,
-
requiredType?: boolean,
-
): ValidationResult {
-
return (requiredType ? is$typed : maybe$typed)(v, id, hash)
-
? lexicons.validate(`${id}#${hash}`, v)
-
: {
-
success: false,
-
error: new ValidationError(
-
`Must be an object with "${hash === 'main' ? id : `${id}#${hash}`}" $type property`,
-
),
-
}
-
}
-
-
export const ids = {
-
PlaceWispFs: 'place.wisp.fs',
-
} as const
-85
src/lexicon/types/place/wisp/fs.ts
···
-
/**
-
* GENERATED CODE - DO NOT MODIFY
-
*/
-
import { type ValidationResult, BlobRef } from '@atproto/lexicon'
-
import { CID } from 'multiformats/cid'
-
import { validate as _validate } from '../../../lexicons'
-
import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util'
-
-
const is$typed = _is$typed,
-
validate = _validate
-
const id = 'place.wisp.fs'
-
-
export interface Record {
-
$type: 'place.wisp.fs'
-
site: string
-
root: Directory
-
fileCount?: number
-
createdAt: string
-
[k: string]: unknown
-
}
-
-
const hashRecord = 'main'
-
-
export function isRecord<V>(v: V) {
-
return is$typed(v, id, hashRecord)
-
}
-
-
export function validateRecord<V>(v: V) {
-
return validate<Record & V>(v, id, hashRecord, true)
-
}
-
-
export interface File {
-
$type?: 'place.wisp.fs#file'
-
type: 'file'
-
/** Content blob ref */
-
blob: BlobRef
-
/** Content encoding (e.g., gzip for compressed files) */
-
encoding?: 'gzip'
-
/** Original MIME type before compression */
-
mimeType?: string
-
/** True if blob content is base64-encoded (used to bypass PDS content sniffing) */
-
base64?: boolean
-
}
-
-
const hashFile = 'file'
-
-
export function isFile<V>(v: V) {
-
return is$typed(v, id, hashFile)
-
}
-
-
export function validateFile<V>(v: V) {
-
return validate<File & V>(v, id, hashFile)
-
}
-
-
export interface Directory {
-
$type?: 'place.wisp.fs#directory'
-
type: 'directory'
-
entries: Entry[]
-
}
-
-
const hashDirectory = 'directory'
-
-
export function isDirectory<V>(v: V) {
-
return is$typed(v, id, hashDirectory)
-
}
-
-
export function validateDirectory<V>(v: V) {
-
return validate<Directory & V>(v, id, hashDirectory)
-
}
-
-
export interface Entry {
-
$type?: 'place.wisp.fs#entry'
-
name: string
-
node: $Typed<File> | $Typed<Directory> | { $type: string }
-
}
-
-
const hashEntry = 'entry'
-
-
export function isEntry<V>(v: V) {
-
return is$typed(v, id, hashEntry)
-
}
-
-
export function validateEntry<V>(v: V) {
-
return validate<Entry & V>(v, id, hashEntry)
-
}
-82
src/lexicon/util.ts
···
-
/**
-
* GENERATED CODE - DO NOT MODIFY
-
*/
-
-
import { type ValidationResult } from '@atproto/lexicon'
-
-
export type OmitKey<T, K extends keyof T> = {
-
[K2 in keyof T as K2 extends K ? never : K2]: T[K2]
-
}
-
-
export type $Typed<V, T extends string = string> = V & { $type: T }
-
export type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'>
-
-
export type $Type<Id extends string, Hash extends string> = Hash extends 'main'
-
? Id
-
: `${Id}#${Hash}`
-
-
function isObject<V>(v: V): v is V & object {
-
return v != null && typeof v === 'object'
-
}
-
-
function is$type<Id extends string, Hash extends string>(
-
$type: unknown,
-
id: Id,
-
hash: Hash,
-
): $type is $Type<Id, Hash> {
-
return hash === 'main'
-
? $type === id
-
: // $type === `${id}#${hash}`
-
typeof $type === 'string' &&
-
$type.length === id.length + 1 + hash.length &&
-
$type.charCodeAt(id.length) === 35 /* '#' */ &&
-
$type.startsWith(id) &&
-
$type.endsWith(hash)
-
}
-
-
export type $TypedObject<
-
V,
-
Id extends string,
-
Hash extends string,
-
> = V extends {
-
$type: $Type<Id, Hash>
-
}
-
? V
-
: V extends { $type?: string }
-
? V extends { $type?: infer T extends $Type<Id, Hash> }
-
? V & { $type: T }
-
: never
-
: V & { $type: $Type<Id, Hash> }
-
-
export function is$typed<V, Id extends string, Hash extends string>(
-
v: V,
-
id: Id,
-
hash: Hash,
-
): v is $TypedObject<V, Id, Hash> {
-
return isObject(v) && '$type' in v && is$type(v.$type, id, hash)
-
}
-
-
export function maybe$typed<V, Id extends string, Hash extends string>(
-
v: V,
-
id: Id,
-
hash: Hash,
-
): v is V & object & { $type?: $Type<Id, Hash> } {
-
return (
-
isObject(v) &&
-
('$type' in v ? v.$type === undefined || is$type(v.$type, id, hash) : true)
-
)
-
}
-
-
export type Validator<R = unknown> = (v: unknown) => ValidationResult<R>
-
export type ValidatorParam<V extends Validator> =
-
V extends Validator<infer R> ? R : never
-
-
/**
-
* Utility function that allows to convert a "validate*" utility function into a
-
* type predicate.
-
*/
-
export function asPredicate<V extends Validator>(validate: V) {
-
return function <T>(v: T): v is T & ValidatorParam<V> {
-
return validate(v).success
-
}
-
}
-2
src/lib/observability.ts
···
// DIY Observability - Logs, Metrics, and Error Tracking
-
import type { Context } from 'elysia'
-
// Types
export interface LogEntry {
id: string
-2
src/lib/types.ts
···
-
import type { BlobRef } from "@atproto/api";
-
/**
* Configuration for the Wisp client
* @typeParam Config
+2 -2
src/lib/wisp-utils.ts
···
import type { BlobRef } from "@atproto/api";
-
import type { Record, Directory, File, Entry } from "../lexicon/types/place/wisp/fs";
-
import { validateRecord } from "../lexicon/types/place/wisp/fs";
+
import type { Record, Directory, File, Entry } from "../lexicons/types/place/wisp/fs";
+
import { validateRecord } from "../lexicons/types/place/wisp/fs";
import { gzipSync } from 'zlib';
export interface UploadedFile {
+1 -1
src/routes/auth.ts
···
logger.error('[Auth] Status check error', err)
return { authenticated: false }
}
-
})
+
})
+1 -1
src/routes/wisp.ts
···
} from '../lib/wisp-utils'
import { upsertSite } from '../lib/db'
import { logger } from '../lib/observability'
-
import { validateRecord } from '../lexicon/types/place/wisp/fs'
+
import { validateRecord } from '../lexicons/types/place/wisp/fs'
import { MAX_SITE_SIZE, MAX_FILE_SIZE, MAX_FILE_COUNT } from '../lib/constants'
function isValidSiteName(siteName: string): boolean {