├── .github ├── dependabot.yml └── workflows │ └── rust.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── assets ├── favicon.png └── logo.webp └── src ├── cli.rs ├── cmds.rs ├── cmds └── add.rs ├── lib.rs ├── main.rs ├── utils.rs └── utils ├── fs.rs └── log.rs /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "cargo" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Submodule 20 | run: git submodule init && git submodule update 21 | - name: Build 22 | run: cargo build --verbose 23 | - name: Run tests 24 | run: cargo test --all-features 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | debug/ 4 | target/ 5 | 6 | # These are backup files generated by rustfmt 7 | **/*.rs.bk 8 | 9 | # MSVC Windows builds of rustc generate these, which store debugging information 10 | *.pdb 11 | 12 | # RustRover 13 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 14 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 15 | # and can be added to the global gitignore or merged into this file. For a more nuclear 16 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 17 | #.idea/ -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "anstream" 22 | version = "0.6.18" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 25 | dependencies = [ 26 | "anstyle", 27 | "anstyle-parse", 28 | "anstyle-query", 29 | "anstyle-wincon", 30 | "colorchoice", 31 | "is_terminal_polyfill", 32 | "utf8parse", 33 | ] 34 | 35 | [[package]] 36 | name = "anstyle" 37 | version = "1.0.10" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 40 | 41 | [[package]] 42 | name = "anstyle-parse" 43 | version = "0.2.6" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 46 | dependencies = [ 47 | "utf8parse", 48 | ] 49 | 50 | [[package]] 51 | name = "anstyle-query" 52 | version = "1.1.2" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 55 | dependencies = [ 56 | "windows-sys 0.59.0", 57 | ] 58 | 59 | [[package]] 60 | name = "anstyle-wincon" 61 | version = "3.0.7" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 64 | dependencies = [ 65 | "anstyle", 66 | "once_cell", 67 | "windows-sys 0.59.0", 68 | ] 69 | 70 | [[package]] 71 | name = "anyhow" 72 | version = "1.0.98" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" 75 | 76 | [[package]] 77 | name = "atomic-waker" 78 | version = "1.1.2" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 81 | 82 | [[package]] 83 | name = "autocfg" 84 | version = "1.4.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 87 | 88 | [[package]] 89 | name = "backtrace" 90 | version = "0.3.74" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 93 | dependencies = [ 94 | "addr2line", 95 | "cfg-if", 96 | "libc", 97 | "miniz_oxide", 98 | "object", 99 | "rustc-demangle", 100 | "windows-targets 0.52.6", 101 | ] 102 | 103 | [[package]] 104 | name = "base64" 105 | version = "0.22.1" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 108 | 109 | [[package]] 110 | name = "bitflags" 111 | version = "2.9.0" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 114 | 115 | [[package]] 116 | name = "bumpalo" 117 | version = "3.17.0" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 120 | 121 | [[package]] 122 | name = "bytes" 123 | version = "1.10.1" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 126 | 127 | [[package]] 128 | name = "cc" 129 | version = "1.2.19" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" 132 | dependencies = [ 133 | "shlex", 134 | ] 135 | 136 | [[package]] 137 | name = "cfg-if" 138 | version = "1.0.0" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 141 | 142 | [[package]] 143 | name = "cfg_aliases" 144 | version = "0.2.1" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 147 | 148 | [[package]] 149 | name = "chrono" 150 | version = "0.4.40" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" 153 | dependencies = [ 154 | "num-traits", 155 | "serde", 156 | ] 157 | 158 | [[package]] 159 | name = "clap" 160 | version = "4.5.39" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" 163 | dependencies = [ 164 | "clap_builder", 165 | "clap_derive", 166 | ] 167 | 168 | [[package]] 169 | name = "clap_builder" 170 | version = "4.5.39" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" 173 | dependencies = [ 174 | "anstream", 175 | "anstyle", 176 | "clap_lex", 177 | "strsim", 178 | ] 179 | 180 | [[package]] 181 | name = "clap_derive" 182 | version = "4.5.32" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" 185 | dependencies = [ 186 | "heck", 187 | "proc-macro2", 188 | "quote", 189 | "syn", 190 | ] 191 | 192 | [[package]] 193 | name = "clap_lex" 194 | version = "0.7.4" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 197 | 198 | [[package]] 199 | name = "colorchoice" 200 | version = "1.0.3" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 203 | 204 | [[package]] 205 | name = "console" 206 | version = "0.15.11" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" 209 | dependencies = [ 210 | "encode_unicode", 211 | "libc", 212 | "once_cell", 213 | "unicode-width", 214 | "windows-sys 0.59.0", 215 | ] 216 | 217 | [[package]] 218 | name = "core-foundation" 219 | version = "0.9.4" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 222 | dependencies = [ 223 | "core-foundation-sys", 224 | "libc", 225 | ] 226 | 227 | [[package]] 228 | name = "core-foundation-sys" 229 | version = "0.8.7" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 232 | 233 | [[package]] 234 | name = "crates_io_api" 235 | version = "0.11.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "200ad30d24892baf2168f2df366939264d02f2fa0be0914f8e2da4bd3407c58c" 238 | dependencies = [ 239 | "chrono", 240 | "futures", 241 | "reqwest", 242 | "serde", 243 | "serde_derive", 244 | "serde_json", 245 | "serde_path_to_error", 246 | "tokio", 247 | "url", 248 | ] 249 | 250 | [[package]] 251 | name = "crc32fast" 252 | version = "1.4.2" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 255 | dependencies = [ 256 | "cfg-if", 257 | ] 258 | 259 | [[package]] 260 | name = "displaydoc" 261 | version = "0.2.5" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 264 | dependencies = [ 265 | "proc-macro2", 266 | "quote", 267 | "syn", 268 | ] 269 | 270 | [[package]] 271 | name = "encode_unicode" 272 | version = "1.0.0" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" 275 | 276 | [[package]] 277 | name = "encoding_rs" 278 | version = "0.8.35" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 281 | dependencies = [ 282 | "cfg-if", 283 | ] 284 | 285 | [[package]] 286 | name = "equivalent" 287 | version = "1.0.2" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 290 | 291 | [[package]] 292 | name = "errno" 293 | version = "0.3.11" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" 296 | dependencies = [ 297 | "libc", 298 | "windows-sys 0.59.0", 299 | ] 300 | 301 | [[package]] 302 | name = "fastrand" 303 | version = "2.3.0" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 306 | 307 | [[package]] 308 | name = "filetime" 309 | version = "0.2.25" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" 312 | dependencies = [ 313 | "cfg-if", 314 | "libc", 315 | "libredox", 316 | "windows-sys 0.59.0", 317 | ] 318 | 319 | [[package]] 320 | name = "flate2" 321 | version = "1.1.1" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" 324 | dependencies = [ 325 | "crc32fast", 326 | "miniz_oxide", 327 | ] 328 | 329 | [[package]] 330 | name = "fnv" 331 | version = "1.0.7" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 334 | 335 | [[package]] 336 | name = "foreign-types" 337 | version = "0.3.2" 338 | source = "registry+https://github.com/rust-lang/crates.io-index" 339 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 340 | dependencies = [ 341 | "foreign-types-shared", 342 | ] 343 | 344 | [[package]] 345 | name = "foreign-types-shared" 346 | version = "0.1.1" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 349 | 350 | [[package]] 351 | name = "form_urlencoded" 352 | version = "1.2.1" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 355 | dependencies = [ 356 | "percent-encoding", 357 | ] 358 | 359 | [[package]] 360 | name = "futures" 361 | version = "0.3.31" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 364 | dependencies = [ 365 | "futures-channel", 366 | "futures-core", 367 | "futures-executor", 368 | "futures-io", 369 | "futures-sink", 370 | "futures-task", 371 | "futures-util", 372 | ] 373 | 374 | [[package]] 375 | name = "futures-channel" 376 | version = "0.3.31" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 379 | dependencies = [ 380 | "futures-core", 381 | "futures-sink", 382 | ] 383 | 384 | [[package]] 385 | name = "futures-core" 386 | version = "0.3.31" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 389 | 390 | [[package]] 391 | name = "futures-executor" 392 | version = "0.3.31" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 395 | dependencies = [ 396 | "futures-core", 397 | "futures-task", 398 | "futures-util", 399 | ] 400 | 401 | [[package]] 402 | name = "futures-io" 403 | version = "0.3.31" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 406 | 407 | [[package]] 408 | name = "futures-macro" 409 | version = "0.3.31" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 412 | dependencies = [ 413 | "proc-macro2", 414 | "quote", 415 | "syn", 416 | ] 417 | 418 | [[package]] 419 | name = "futures-sink" 420 | version = "0.3.31" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 423 | 424 | [[package]] 425 | name = "futures-task" 426 | version = "0.3.31" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 429 | 430 | [[package]] 431 | name = "futures-util" 432 | version = "0.3.31" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 435 | dependencies = [ 436 | "futures-channel", 437 | "futures-core", 438 | "futures-io", 439 | "futures-macro", 440 | "futures-sink", 441 | "futures-task", 442 | "memchr", 443 | "pin-project-lite", 444 | "pin-utils", 445 | "slab", 446 | ] 447 | 448 | [[package]] 449 | name = "getrandom" 450 | version = "0.2.15" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 453 | dependencies = [ 454 | "cfg-if", 455 | "js-sys", 456 | "libc", 457 | "wasi 0.11.0+wasi-snapshot-preview1", 458 | "wasm-bindgen", 459 | ] 460 | 461 | [[package]] 462 | name = "getrandom" 463 | version = "0.3.2" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" 466 | dependencies = [ 467 | "cfg-if", 468 | "js-sys", 469 | "libc", 470 | "r-efi", 471 | "wasi 0.14.2+wasi-0.2.4", 472 | "wasm-bindgen", 473 | ] 474 | 475 | [[package]] 476 | name = "gimli" 477 | version = "0.31.1" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 480 | 481 | [[package]] 482 | name = "h2" 483 | version = "0.4.9" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" 486 | dependencies = [ 487 | "atomic-waker", 488 | "bytes", 489 | "fnv", 490 | "futures-core", 491 | "futures-sink", 492 | "http", 493 | "indexmap", 494 | "slab", 495 | "tokio", 496 | "tokio-util", 497 | "tracing", 498 | ] 499 | 500 | [[package]] 501 | name = "hashbrown" 502 | version = "0.15.2" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 505 | 506 | [[package]] 507 | name = "heck" 508 | version = "0.5.0" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 511 | 512 | [[package]] 513 | name = "http" 514 | version = "1.3.1" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 517 | dependencies = [ 518 | "bytes", 519 | "fnv", 520 | "itoa", 521 | ] 522 | 523 | [[package]] 524 | name = "http-body" 525 | version = "1.0.1" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 528 | dependencies = [ 529 | "bytes", 530 | "http", 531 | ] 532 | 533 | [[package]] 534 | name = "http-body-util" 535 | version = "0.1.3" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 538 | dependencies = [ 539 | "bytes", 540 | "futures-core", 541 | "http", 542 | "http-body", 543 | "pin-project-lite", 544 | ] 545 | 546 | [[package]] 547 | name = "httparse" 548 | version = "1.10.1" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 551 | 552 | [[package]] 553 | name = "hyper" 554 | version = "1.6.0" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 557 | dependencies = [ 558 | "bytes", 559 | "futures-channel", 560 | "futures-util", 561 | "h2", 562 | "http", 563 | "http-body", 564 | "httparse", 565 | "itoa", 566 | "pin-project-lite", 567 | "smallvec", 568 | "tokio", 569 | "want", 570 | ] 571 | 572 | [[package]] 573 | name = "hyper-rustls" 574 | version = "0.27.5" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 577 | dependencies = [ 578 | "futures-util", 579 | "http", 580 | "hyper", 581 | "hyper-util", 582 | "rustls", 583 | "rustls-pki-types", 584 | "tokio", 585 | "tokio-rustls", 586 | "tower-service", 587 | "webpki-roots 0.26.8", 588 | ] 589 | 590 | [[package]] 591 | name = "hyper-tls" 592 | version = "0.6.0" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 595 | dependencies = [ 596 | "bytes", 597 | "http-body-util", 598 | "hyper", 599 | "hyper-util", 600 | "native-tls", 601 | "tokio", 602 | "tokio-native-tls", 603 | "tower-service", 604 | ] 605 | 606 | [[package]] 607 | name = "hyper-util" 608 | version = "0.1.13" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" 611 | dependencies = [ 612 | "base64", 613 | "bytes", 614 | "futures-channel", 615 | "futures-core", 616 | "futures-util", 617 | "http", 618 | "http-body", 619 | "hyper", 620 | "ipnet", 621 | "libc", 622 | "percent-encoding", 623 | "pin-project-lite", 624 | "socket2", 625 | "system-configuration", 626 | "tokio", 627 | "tower-service", 628 | "tracing", 629 | "windows-registry", 630 | ] 631 | 632 | [[package]] 633 | name = "icu_collections" 634 | version = "1.5.0" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 637 | dependencies = [ 638 | "displaydoc", 639 | "yoke", 640 | "zerofrom", 641 | "zerovec", 642 | ] 643 | 644 | [[package]] 645 | name = "icu_locid" 646 | version = "1.5.0" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 649 | dependencies = [ 650 | "displaydoc", 651 | "litemap", 652 | "tinystr", 653 | "writeable", 654 | "zerovec", 655 | ] 656 | 657 | [[package]] 658 | name = "icu_locid_transform" 659 | version = "1.5.0" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 662 | dependencies = [ 663 | "displaydoc", 664 | "icu_locid", 665 | "icu_locid_transform_data", 666 | "icu_provider", 667 | "tinystr", 668 | "zerovec", 669 | ] 670 | 671 | [[package]] 672 | name = "icu_locid_transform_data" 673 | version = "1.5.1" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" 676 | 677 | [[package]] 678 | name = "icu_normalizer" 679 | version = "1.5.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 682 | dependencies = [ 683 | "displaydoc", 684 | "icu_collections", 685 | "icu_normalizer_data", 686 | "icu_properties", 687 | "icu_provider", 688 | "smallvec", 689 | "utf16_iter", 690 | "utf8_iter", 691 | "write16", 692 | "zerovec", 693 | ] 694 | 695 | [[package]] 696 | name = "icu_normalizer_data" 697 | version = "1.5.1" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" 700 | 701 | [[package]] 702 | name = "icu_properties" 703 | version = "1.5.1" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 706 | dependencies = [ 707 | "displaydoc", 708 | "icu_collections", 709 | "icu_locid_transform", 710 | "icu_properties_data", 711 | "icu_provider", 712 | "tinystr", 713 | "zerovec", 714 | ] 715 | 716 | [[package]] 717 | name = "icu_properties_data" 718 | version = "1.5.1" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" 721 | 722 | [[package]] 723 | name = "icu_provider" 724 | version = "1.5.0" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 727 | dependencies = [ 728 | "displaydoc", 729 | "icu_locid", 730 | "icu_provider_macros", 731 | "stable_deref_trait", 732 | "tinystr", 733 | "writeable", 734 | "yoke", 735 | "zerofrom", 736 | "zerovec", 737 | ] 738 | 739 | [[package]] 740 | name = "icu_provider_macros" 741 | version = "1.5.0" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 744 | dependencies = [ 745 | "proc-macro2", 746 | "quote", 747 | "syn", 748 | ] 749 | 750 | [[package]] 751 | name = "idna" 752 | version = "1.0.3" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 755 | dependencies = [ 756 | "idna_adapter", 757 | "smallvec", 758 | "utf8_iter", 759 | ] 760 | 761 | [[package]] 762 | name = "idna_adapter" 763 | version = "1.2.0" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 766 | dependencies = [ 767 | "icu_normalizer", 768 | "icu_properties", 769 | ] 770 | 771 | [[package]] 772 | name = "indexmap" 773 | version = "2.9.0" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" 776 | dependencies = [ 777 | "equivalent", 778 | "hashbrown", 779 | ] 780 | 781 | [[package]] 782 | name = "indicatif" 783 | version = "0.17.11" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" 786 | dependencies = [ 787 | "console", 788 | "number_prefix", 789 | "portable-atomic", 790 | "unicode-width", 791 | "web-time", 792 | ] 793 | 794 | [[package]] 795 | name = "ipnet" 796 | version = "2.11.0" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 799 | 800 | [[package]] 801 | name = "iri-string" 802 | version = "0.7.8" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 805 | dependencies = [ 806 | "memchr", 807 | "serde", 808 | ] 809 | 810 | [[package]] 811 | name = "is_terminal_polyfill" 812 | version = "1.70.1" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 815 | 816 | [[package]] 817 | name = "itoa" 818 | version = "1.0.15" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 821 | 822 | [[package]] 823 | name = "js-sys" 824 | version = "0.3.77" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 827 | dependencies = [ 828 | "once_cell", 829 | "wasm-bindgen", 830 | ] 831 | 832 | [[package]] 833 | name = "lazy_static" 834 | version = "1.5.0" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 837 | 838 | [[package]] 839 | name = "libc" 840 | version = "0.2.172" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 843 | 844 | [[package]] 845 | name = "libredox" 846 | version = "0.1.3" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 849 | dependencies = [ 850 | "bitflags", 851 | "libc", 852 | "redox_syscall", 853 | ] 854 | 855 | [[package]] 856 | name = "linux-raw-sys" 857 | version = "0.9.4" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 860 | 861 | [[package]] 862 | name = "litemap" 863 | version = "0.7.5" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 866 | 867 | [[package]] 868 | name = "lock_api" 869 | version = "0.4.12" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 872 | dependencies = [ 873 | "autocfg", 874 | "scopeguard", 875 | ] 876 | 877 | [[package]] 878 | name = "log" 879 | version = "0.4.27" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 882 | 883 | [[package]] 884 | name = "memchr" 885 | version = "2.7.4" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 888 | 889 | [[package]] 890 | name = "mime" 891 | version = "0.3.17" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 894 | 895 | [[package]] 896 | name = "miniz_oxide" 897 | version = "0.8.8" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" 900 | dependencies = [ 901 | "adler2", 902 | ] 903 | 904 | [[package]] 905 | name = "mio" 906 | version = "1.0.3" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 909 | dependencies = [ 910 | "libc", 911 | "wasi 0.11.0+wasi-snapshot-preview1", 912 | "windows-sys 0.52.0", 913 | ] 914 | 915 | [[package]] 916 | name = "native-tls" 917 | version = "0.2.14" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 920 | dependencies = [ 921 | "libc", 922 | "log", 923 | "openssl", 924 | "openssl-probe", 925 | "openssl-sys", 926 | "schannel", 927 | "security-framework", 928 | "security-framework-sys", 929 | "tempfile", 930 | ] 931 | 932 | [[package]] 933 | name = "nu-ansi-term" 934 | version = "0.46.0" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 937 | dependencies = [ 938 | "overload", 939 | "winapi", 940 | ] 941 | 942 | [[package]] 943 | name = "num-traits" 944 | version = "0.2.19" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 947 | dependencies = [ 948 | "autocfg", 949 | ] 950 | 951 | [[package]] 952 | name = "number_prefix" 953 | version = "0.4.0" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 956 | 957 | [[package]] 958 | name = "object" 959 | version = "0.36.7" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 962 | dependencies = [ 963 | "memchr", 964 | ] 965 | 966 | [[package]] 967 | name = "once_cell" 968 | version = "1.21.3" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 971 | 972 | [[package]] 973 | name = "opensass" 974 | version = "0.0.6" 975 | dependencies = [ 976 | "anyhow", 977 | "clap", 978 | "crates_io_api", 979 | "flate2", 980 | "indicatif", 981 | "reqwest", 982 | "tar", 983 | "tempfile", 984 | "tokio", 985 | "toml_edit", 986 | "tracing", 987 | "tracing-subscriber", 988 | "walkdir", 989 | ] 990 | 991 | [[package]] 992 | name = "openssl" 993 | version = "0.10.72" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" 996 | dependencies = [ 997 | "bitflags", 998 | "cfg-if", 999 | "foreign-types", 1000 | "libc", 1001 | "once_cell", 1002 | "openssl-macros", 1003 | "openssl-sys", 1004 | ] 1005 | 1006 | [[package]] 1007 | name = "openssl-macros" 1008 | version = "0.1.1" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1011 | dependencies = [ 1012 | "proc-macro2", 1013 | "quote", 1014 | "syn", 1015 | ] 1016 | 1017 | [[package]] 1018 | name = "openssl-probe" 1019 | version = "0.1.6" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1022 | 1023 | [[package]] 1024 | name = "openssl-sys" 1025 | version = "0.9.107" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" 1028 | dependencies = [ 1029 | "cc", 1030 | "libc", 1031 | "pkg-config", 1032 | "vcpkg", 1033 | ] 1034 | 1035 | [[package]] 1036 | name = "overload" 1037 | version = "0.1.1" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 1040 | 1041 | [[package]] 1042 | name = "parking_lot" 1043 | version = "0.12.3" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1046 | dependencies = [ 1047 | "lock_api", 1048 | "parking_lot_core", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "parking_lot_core" 1053 | version = "0.9.10" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1056 | dependencies = [ 1057 | "cfg-if", 1058 | "libc", 1059 | "redox_syscall", 1060 | "smallvec", 1061 | "windows-targets 0.52.6", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "percent-encoding" 1066 | version = "2.3.1" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1069 | 1070 | [[package]] 1071 | name = "pin-project-lite" 1072 | version = "0.2.16" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1075 | 1076 | [[package]] 1077 | name = "pin-utils" 1078 | version = "0.1.0" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1081 | 1082 | [[package]] 1083 | name = "pkg-config" 1084 | version = "0.3.32" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1087 | 1088 | [[package]] 1089 | name = "portable-atomic" 1090 | version = "1.11.0" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 1093 | 1094 | [[package]] 1095 | name = "ppv-lite86" 1096 | version = "0.2.21" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 1099 | dependencies = [ 1100 | "zerocopy", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "proc-macro2" 1105 | version = "1.0.95" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 1108 | dependencies = [ 1109 | "unicode-ident", 1110 | ] 1111 | 1112 | [[package]] 1113 | name = "quinn" 1114 | version = "0.11.7" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" 1117 | dependencies = [ 1118 | "bytes", 1119 | "cfg_aliases", 1120 | "pin-project-lite", 1121 | "quinn-proto", 1122 | "quinn-udp", 1123 | "rustc-hash", 1124 | "rustls", 1125 | "socket2", 1126 | "thiserror", 1127 | "tokio", 1128 | "tracing", 1129 | "web-time", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "quinn-proto" 1134 | version = "0.11.10" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" 1137 | dependencies = [ 1138 | "bytes", 1139 | "getrandom 0.3.2", 1140 | "rand", 1141 | "ring", 1142 | "rustc-hash", 1143 | "rustls", 1144 | "rustls-pki-types", 1145 | "slab", 1146 | "thiserror", 1147 | "tinyvec", 1148 | "tracing", 1149 | "web-time", 1150 | ] 1151 | 1152 | [[package]] 1153 | name = "quinn-udp" 1154 | version = "0.5.11" 1155 | source = "registry+https://github.com/rust-lang/crates.io-index" 1156 | checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" 1157 | dependencies = [ 1158 | "cfg_aliases", 1159 | "libc", 1160 | "once_cell", 1161 | "socket2", 1162 | "tracing", 1163 | "windows-sys 0.59.0", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "quote" 1168 | version = "1.0.40" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1171 | dependencies = [ 1172 | "proc-macro2", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "r-efi" 1177 | version = "5.2.0" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 1180 | 1181 | [[package]] 1182 | name = "rand" 1183 | version = "0.9.1" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" 1186 | dependencies = [ 1187 | "rand_chacha", 1188 | "rand_core", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "rand_chacha" 1193 | version = "0.9.0" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 1196 | dependencies = [ 1197 | "ppv-lite86", 1198 | "rand_core", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "rand_core" 1203 | version = "0.9.3" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 1206 | dependencies = [ 1207 | "getrandom 0.3.2", 1208 | ] 1209 | 1210 | [[package]] 1211 | name = "redox_syscall" 1212 | version = "0.5.11" 1213 | source = "registry+https://github.com/rust-lang/crates.io-index" 1214 | checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" 1215 | dependencies = [ 1216 | "bitflags", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "reqwest" 1221 | version = "0.12.19" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "a2f8e5513d63f2e5b386eb5106dc67eaf3f84e95258e210489136b8b92ad6119" 1224 | dependencies = [ 1225 | "base64", 1226 | "bytes", 1227 | "encoding_rs", 1228 | "futures-channel", 1229 | "futures-core", 1230 | "futures-util", 1231 | "h2", 1232 | "http", 1233 | "http-body", 1234 | "http-body-util", 1235 | "hyper", 1236 | "hyper-rustls", 1237 | "hyper-tls", 1238 | "hyper-util", 1239 | "ipnet", 1240 | "js-sys", 1241 | "log", 1242 | "mime", 1243 | "native-tls", 1244 | "once_cell", 1245 | "percent-encoding", 1246 | "pin-project-lite", 1247 | "quinn", 1248 | "rustls", 1249 | "rustls-pki-types", 1250 | "serde", 1251 | "serde_json", 1252 | "serde_urlencoded", 1253 | "sync_wrapper", 1254 | "tokio", 1255 | "tokio-native-tls", 1256 | "tokio-rustls", 1257 | "tower", 1258 | "tower-http", 1259 | "tower-service", 1260 | "url", 1261 | "wasm-bindgen", 1262 | "wasm-bindgen-futures", 1263 | "web-sys", 1264 | "webpki-roots 1.0.0", 1265 | ] 1266 | 1267 | [[package]] 1268 | name = "ring" 1269 | version = "0.17.14" 1270 | source = "registry+https://github.com/rust-lang/crates.io-index" 1271 | checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 1272 | dependencies = [ 1273 | "cc", 1274 | "cfg-if", 1275 | "getrandom 0.2.15", 1276 | "libc", 1277 | "untrusted", 1278 | "windows-sys 0.52.0", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "rustc-demangle" 1283 | version = "0.1.24" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1286 | 1287 | [[package]] 1288 | name = "rustc-hash" 1289 | version = "2.1.1" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 1292 | 1293 | [[package]] 1294 | name = "rustix" 1295 | version = "1.0.5" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" 1298 | dependencies = [ 1299 | "bitflags", 1300 | "errno", 1301 | "libc", 1302 | "linux-raw-sys", 1303 | "windows-sys 0.59.0", 1304 | ] 1305 | 1306 | [[package]] 1307 | name = "rustls" 1308 | version = "0.23.26" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" 1311 | dependencies = [ 1312 | "once_cell", 1313 | "ring", 1314 | "rustls-pki-types", 1315 | "rustls-webpki", 1316 | "subtle", 1317 | "zeroize", 1318 | ] 1319 | 1320 | [[package]] 1321 | name = "rustls-pki-types" 1322 | version = "1.11.0" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 1325 | dependencies = [ 1326 | "web-time", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "rustls-webpki" 1331 | version = "0.103.1" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" 1334 | dependencies = [ 1335 | "ring", 1336 | "rustls-pki-types", 1337 | "untrusted", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "rustversion" 1342 | version = "1.0.20" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 1345 | 1346 | [[package]] 1347 | name = "ryu" 1348 | version = "1.0.20" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1351 | 1352 | [[package]] 1353 | name = "same-file" 1354 | version = "1.0.6" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1357 | dependencies = [ 1358 | "winapi-util", 1359 | ] 1360 | 1361 | [[package]] 1362 | name = "schannel" 1363 | version = "0.1.27" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 1366 | dependencies = [ 1367 | "windows-sys 0.59.0", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "scopeguard" 1372 | version = "1.2.0" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1375 | 1376 | [[package]] 1377 | name = "security-framework" 1378 | version = "2.11.1" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1381 | dependencies = [ 1382 | "bitflags", 1383 | "core-foundation", 1384 | "core-foundation-sys", 1385 | "libc", 1386 | "security-framework-sys", 1387 | ] 1388 | 1389 | [[package]] 1390 | name = "security-framework-sys" 1391 | version = "2.14.0" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 1394 | dependencies = [ 1395 | "core-foundation-sys", 1396 | "libc", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "serde" 1401 | version = "1.0.219" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1404 | dependencies = [ 1405 | "serde_derive", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "serde_derive" 1410 | version = "1.0.219" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1413 | dependencies = [ 1414 | "proc-macro2", 1415 | "quote", 1416 | "syn", 1417 | ] 1418 | 1419 | [[package]] 1420 | name = "serde_json" 1421 | version = "1.0.140" 1422 | source = "registry+https://github.com/rust-lang/crates.io-index" 1423 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1424 | dependencies = [ 1425 | "itoa", 1426 | "memchr", 1427 | "ryu", 1428 | "serde", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "serde_path_to_error" 1433 | version = "0.1.17" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" 1436 | dependencies = [ 1437 | "itoa", 1438 | "serde", 1439 | ] 1440 | 1441 | [[package]] 1442 | name = "serde_urlencoded" 1443 | version = "0.7.1" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1446 | dependencies = [ 1447 | "form_urlencoded", 1448 | "itoa", 1449 | "ryu", 1450 | "serde", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "sharded-slab" 1455 | version = "0.1.7" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 1458 | dependencies = [ 1459 | "lazy_static", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "shlex" 1464 | version = "1.3.0" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1467 | 1468 | [[package]] 1469 | name = "signal-hook-registry" 1470 | version = "1.4.2" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1473 | dependencies = [ 1474 | "libc", 1475 | ] 1476 | 1477 | [[package]] 1478 | name = "slab" 1479 | version = "0.4.9" 1480 | source = "registry+https://github.com/rust-lang/crates.io-index" 1481 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1482 | dependencies = [ 1483 | "autocfg", 1484 | ] 1485 | 1486 | [[package]] 1487 | name = "smallvec" 1488 | version = "1.15.0" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 1491 | 1492 | [[package]] 1493 | name = "socket2" 1494 | version = "0.5.9" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" 1497 | dependencies = [ 1498 | "libc", 1499 | "windows-sys 0.52.0", 1500 | ] 1501 | 1502 | [[package]] 1503 | name = "stable_deref_trait" 1504 | version = "1.2.0" 1505 | source = "registry+https://github.com/rust-lang/crates.io-index" 1506 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1507 | 1508 | [[package]] 1509 | name = "strsim" 1510 | version = "0.11.1" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1513 | 1514 | [[package]] 1515 | name = "subtle" 1516 | version = "2.6.1" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1519 | 1520 | [[package]] 1521 | name = "syn" 1522 | version = "2.0.100" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" 1525 | dependencies = [ 1526 | "proc-macro2", 1527 | "quote", 1528 | "unicode-ident", 1529 | ] 1530 | 1531 | [[package]] 1532 | name = "sync_wrapper" 1533 | version = "1.0.2" 1534 | source = "registry+https://github.com/rust-lang/crates.io-index" 1535 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1536 | dependencies = [ 1537 | "futures-core", 1538 | ] 1539 | 1540 | [[package]] 1541 | name = "synstructure" 1542 | version = "0.13.1" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 1545 | dependencies = [ 1546 | "proc-macro2", 1547 | "quote", 1548 | "syn", 1549 | ] 1550 | 1551 | [[package]] 1552 | name = "system-configuration" 1553 | version = "0.6.1" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 1556 | dependencies = [ 1557 | "bitflags", 1558 | "core-foundation", 1559 | "system-configuration-sys", 1560 | ] 1561 | 1562 | [[package]] 1563 | name = "system-configuration-sys" 1564 | version = "0.6.0" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 1567 | dependencies = [ 1568 | "core-foundation-sys", 1569 | "libc", 1570 | ] 1571 | 1572 | [[package]] 1573 | name = "tar" 1574 | version = "0.4.44" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" 1577 | dependencies = [ 1578 | "filetime", 1579 | "libc", 1580 | "xattr", 1581 | ] 1582 | 1583 | [[package]] 1584 | name = "tempfile" 1585 | version = "3.20.0" 1586 | source = "registry+https://github.com/rust-lang/crates.io-index" 1587 | checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" 1588 | dependencies = [ 1589 | "fastrand", 1590 | "getrandom 0.3.2", 1591 | "once_cell", 1592 | "rustix", 1593 | "windows-sys 0.59.0", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "thiserror" 1598 | version = "2.0.12" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 1601 | dependencies = [ 1602 | "thiserror-impl", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "thiserror-impl" 1607 | version = "2.0.12" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 1610 | dependencies = [ 1611 | "proc-macro2", 1612 | "quote", 1613 | "syn", 1614 | ] 1615 | 1616 | [[package]] 1617 | name = "thread_local" 1618 | version = "1.1.8" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 1621 | dependencies = [ 1622 | "cfg-if", 1623 | "once_cell", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "tinystr" 1628 | version = "0.7.6" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1631 | dependencies = [ 1632 | "displaydoc", 1633 | "zerovec", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "tinyvec" 1638 | version = "1.9.0" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 1641 | dependencies = [ 1642 | "tinyvec_macros", 1643 | ] 1644 | 1645 | [[package]] 1646 | name = "tinyvec_macros" 1647 | version = "0.1.1" 1648 | source = "registry+https://github.com/rust-lang/crates.io-index" 1649 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1650 | 1651 | [[package]] 1652 | name = "tokio" 1653 | version = "1.45.1" 1654 | source = "registry+https://github.com/rust-lang/crates.io-index" 1655 | checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" 1656 | dependencies = [ 1657 | "backtrace", 1658 | "bytes", 1659 | "libc", 1660 | "mio", 1661 | "parking_lot", 1662 | "pin-project-lite", 1663 | "signal-hook-registry", 1664 | "socket2", 1665 | "tokio-macros", 1666 | "windows-sys 0.52.0", 1667 | ] 1668 | 1669 | [[package]] 1670 | name = "tokio-macros" 1671 | version = "2.5.0" 1672 | source = "registry+https://github.com/rust-lang/crates.io-index" 1673 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1674 | dependencies = [ 1675 | "proc-macro2", 1676 | "quote", 1677 | "syn", 1678 | ] 1679 | 1680 | [[package]] 1681 | name = "tokio-native-tls" 1682 | version = "0.3.1" 1683 | source = "registry+https://github.com/rust-lang/crates.io-index" 1684 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1685 | dependencies = [ 1686 | "native-tls", 1687 | "tokio", 1688 | ] 1689 | 1690 | [[package]] 1691 | name = "tokio-rustls" 1692 | version = "0.26.2" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 1695 | dependencies = [ 1696 | "rustls", 1697 | "tokio", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "tokio-util" 1702 | version = "0.7.14" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" 1705 | dependencies = [ 1706 | "bytes", 1707 | "futures-core", 1708 | "futures-sink", 1709 | "pin-project-lite", 1710 | "tokio", 1711 | ] 1712 | 1713 | [[package]] 1714 | name = "toml_datetime" 1715 | version = "0.6.9" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" 1718 | 1719 | [[package]] 1720 | name = "toml_edit" 1721 | version = "0.22.26" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" 1724 | dependencies = [ 1725 | "indexmap", 1726 | "toml_datetime", 1727 | "toml_write", 1728 | "winnow", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "toml_write" 1733 | version = "0.1.1" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" 1736 | 1737 | [[package]] 1738 | name = "tower" 1739 | version = "0.5.2" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 1742 | dependencies = [ 1743 | "futures-core", 1744 | "futures-util", 1745 | "pin-project-lite", 1746 | "sync_wrapper", 1747 | "tokio", 1748 | "tower-layer", 1749 | "tower-service", 1750 | ] 1751 | 1752 | [[package]] 1753 | name = "tower-http" 1754 | version = "0.6.6" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 1757 | dependencies = [ 1758 | "bitflags", 1759 | "bytes", 1760 | "futures-util", 1761 | "http", 1762 | "http-body", 1763 | "iri-string", 1764 | "pin-project-lite", 1765 | "tower", 1766 | "tower-layer", 1767 | "tower-service", 1768 | ] 1769 | 1770 | [[package]] 1771 | name = "tower-layer" 1772 | version = "0.3.3" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 1775 | 1776 | [[package]] 1777 | name = "tower-service" 1778 | version = "0.3.3" 1779 | source = "registry+https://github.com/rust-lang/crates.io-index" 1780 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1781 | 1782 | [[package]] 1783 | name = "tracing" 1784 | version = "0.1.41" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 1787 | dependencies = [ 1788 | "pin-project-lite", 1789 | "tracing-attributes", 1790 | "tracing-core", 1791 | ] 1792 | 1793 | [[package]] 1794 | name = "tracing-attributes" 1795 | version = "0.1.28" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 1798 | dependencies = [ 1799 | "proc-macro2", 1800 | "quote", 1801 | "syn", 1802 | ] 1803 | 1804 | [[package]] 1805 | name = "tracing-core" 1806 | version = "0.1.33" 1807 | source = "registry+https://github.com/rust-lang/crates.io-index" 1808 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 1809 | dependencies = [ 1810 | "once_cell", 1811 | "valuable", 1812 | ] 1813 | 1814 | [[package]] 1815 | name = "tracing-log" 1816 | version = "0.2.0" 1817 | source = "registry+https://github.com/rust-lang/crates.io-index" 1818 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 1819 | dependencies = [ 1820 | "log", 1821 | "once_cell", 1822 | "tracing-core", 1823 | ] 1824 | 1825 | [[package]] 1826 | name = "tracing-subscriber" 1827 | version = "0.3.19" 1828 | source = "registry+https://github.com/rust-lang/crates.io-index" 1829 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 1830 | dependencies = [ 1831 | "nu-ansi-term", 1832 | "sharded-slab", 1833 | "smallvec", 1834 | "thread_local", 1835 | "tracing-core", 1836 | "tracing-log", 1837 | ] 1838 | 1839 | [[package]] 1840 | name = "try-lock" 1841 | version = "0.2.5" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1844 | 1845 | [[package]] 1846 | name = "unicode-ident" 1847 | version = "1.0.18" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 1850 | 1851 | [[package]] 1852 | name = "unicode-width" 1853 | version = "0.2.0" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 1856 | 1857 | [[package]] 1858 | name = "untrusted" 1859 | version = "0.9.0" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1862 | 1863 | [[package]] 1864 | name = "url" 1865 | version = "2.5.4" 1866 | source = "registry+https://github.com/rust-lang/crates.io-index" 1867 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 1868 | dependencies = [ 1869 | "form_urlencoded", 1870 | "idna", 1871 | "percent-encoding", 1872 | ] 1873 | 1874 | [[package]] 1875 | name = "utf16_iter" 1876 | version = "1.0.5" 1877 | source = "registry+https://github.com/rust-lang/crates.io-index" 1878 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 1879 | 1880 | [[package]] 1881 | name = "utf8_iter" 1882 | version = "1.0.4" 1883 | source = "registry+https://github.com/rust-lang/crates.io-index" 1884 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1885 | 1886 | [[package]] 1887 | name = "utf8parse" 1888 | version = "0.2.2" 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" 1890 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1891 | 1892 | [[package]] 1893 | name = "valuable" 1894 | version = "0.1.1" 1895 | source = "registry+https://github.com/rust-lang/crates.io-index" 1896 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 1897 | 1898 | [[package]] 1899 | name = "vcpkg" 1900 | version = "0.2.15" 1901 | source = "registry+https://github.com/rust-lang/crates.io-index" 1902 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1903 | 1904 | [[package]] 1905 | name = "walkdir" 1906 | version = "2.5.0" 1907 | source = "registry+https://github.com/rust-lang/crates.io-index" 1908 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1909 | dependencies = [ 1910 | "same-file", 1911 | "winapi-util", 1912 | ] 1913 | 1914 | [[package]] 1915 | name = "want" 1916 | version = "0.3.1" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1919 | dependencies = [ 1920 | "try-lock", 1921 | ] 1922 | 1923 | [[package]] 1924 | name = "wasi" 1925 | version = "0.11.0+wasi-snapshot-preview1" 1926 | source = "registry+https://github.com/rust-lang/crates.io-index" 1927 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1928 | 1929 | [[package]] 1930 | name = "wasi" 1931 | version = "0.14.2+wasi-0.2.4" 1932 | source = "registry+https://github.com/rust-lang/crates.io-index" 1933 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 1934 | dependencies = [ 1935 | "wit-bindgen-rt", 1936 | ] 1937 | 1938 | [[package]] 1939 | name = "wasm-bindgen" 1940 | version = "0.2.100" 1941 | source = "registry+https://github.com/rust-lang/crates.io-index" 1942 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 1943 | dependencies = [ 1944 | "cfg-if", 1945 | "once_cell", 1946 | "rustversion", 1947 | "wasm-bindgen-macro", 1948 | ] 1949 | 1950 | [[package]] 1951 | name = "wasm-bindgen-backend" 1952 | version = "0.2.100" 1953 | source = "registry+https://github.com/rust-lang/crates.io-index" 1954 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 1955 | dependencies = [ 1956 | "bumpalo", 1957 | "log", 1958 | "proc-macro2", 1959 | "quote", 1960 | "syn", 1961 | "wasm-bindgen-shared", 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "wasm-bindgen-futures" 1966 | version = "0.4.50" 1967 | source = "registry+https://github.com/rust-lang/crates.io-index" 1968 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 1969 | dependencies = [ 1970 | "cfg-if", 1971 | "js-sys", 1972 | "once_cell", 1973 | "wasm-bindgen", 1974 | "web-sys", 1975 | ] 1976 | 1977 | [[package]] 1978 | name = "wasm-bindgen-macro" 1979 | version = "0.2.100" 1980 | source = "registry+https://github.com/rust-lang/crates.io-index" 1981 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 1982 | dependencies = [ 1983 | "quote", 1984 | "wasm-bindgen-macro-support", 1985 | ] 1986 | 1987 | [[package]] 1988 | name = "wasm-bindgen-macro-support" 1989 | version = "0.2.100" 1990 | source = "registry+https://github.com/rust-lang/crates.io-index" 1991 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 1992 | dependencies = [ 1993 | "proc-macro2", 1994 | "quote", 1995 | "syn", 1996 | "wasm-bindgen-backend", 1997 | "wasm-bindgen-shared", 1998 | ] 1999 | 2000 | [[package]] 2001 | name = "wasm-bindgen-shared" 2002 | version = "0.2.100" 2003 | source = "registry+https://github.com/rust-lang/crates.io-index" 2004 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2005 | dependencies = [ 2006 | "unicode-ident", 2007 | ] 2008 | 2009 | [[package]] 2010 | name = "web-sys" 2011 | version = "0.3.77" 2012 | source = "registry+https://github.com/rust-lang/crates.io-index" 2013 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 2014 | dependencies = [ 2015 | "js-sys", 2016 | "wasm-bindgen", 2017 | ] 2018 | 2019 | [[package]] 2020 | name = "web-time" 2021 | version = "1.1.0" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 2024 | dependencies = [ 2025 | "js-sys", 2026 | "wasm-bindgen", 2027 | ] 2028 | 2029 | [[package]] 2030 | name = "webpki-roots" 2031 | version = "0.26.8" 2032 | source = "registry+https://github.com/rust-lang/crates.io-index" 2033 | checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" 2034 | dependencies = [ 2035 | "rustls-pki-types", 2036 | ] 2037 | 2038 | [[package]] 2039 | name = "webpki-roots" 2040 | version = "1.0.0" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" 2043 | dependencies = [ 2044 | "rustls-pki-types", 2045 | ] 2046 | 2047 | [[package]] 2048 | name = "winapi" 2049 | version = "0.3.9" 2050 | source = "registry+https://github.com/rust-lang/crates.io-index" 2051 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2052 | dependencies = [ 2053 | "winapi-i686-pc-windows-gnu", 2054 | "winapi-x86_64-pc-windows-gnu", 2055 | ] 2056 | 2057 | [[package]] 2058 | name = "winapi-i686-pc-windows-gnu" 2059 | version = "0.4.0" 2060 | source = "registry+https://github.com/rust-lang/crates.io-index" 2061 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2062 | 2063 | [[package]] 2064 | name = "winapi-util" 2065 | version = "0.1.9" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 2068 | dependencies = [ 2069 | "windows-sys 0.59.0", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "winapi-x86_64-pc-windows-gnu" 2074 | version = "0.4.0" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2077 | 2078 | [[package]] 2079 | name = "windows-link" 2080 | version = "0.1.1" 2081 | source = "registry+https://github.com/rust-lang/crates.io-index" 2082 | checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" 2083 | 2084 | [[package]] 2085 | name = "windows-registry" 2086 | version = "0.4.0" 2087 | source = "registry+https://github.com/rust-lang/crates.io-index" 2088 | checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" 2089 | dependencies = [ 2090 | "windows-result", 2091 | "windows-strings", 2092 | "windows-targets 0.53.0", 2093 | ] 2094 | 2095 | [[package]] 2096 | name = "windows-result" 2097 | version = "0.3.2" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" 2100 | dependencies = [ 2101 | "windows-link", 2102 | ] 2103 | 2104 | [[package]] 2105 | name = "windows-strings" 2106 | version = "0.3.1" 2107 | source = "registry+https://github.com/rust-lang/crates.io-index" 2108 | checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" 2109 | dependencies = [ 2110 | "windows-link", 2111 | ] 2112 | 2113 | [[package]] 2114 | name = "windows-sys" 2115 | version = "0.52.0" 2116 | source = "registry+https://github.com/rust-lang/crates.io-index" 2117 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2118 | dependencies = [ 2119 | "windows-targets 0.52.6", 2120 | ] 2121 | 2122 | [[package]] 2123 | name = "windows-sys" 2124 | version = "0.59.0" 2125 | source = "registry+https://github.com/rust-lang/crates.io-index" 2126 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2127 | dependencies = [ 2128 | "windows-targets 0.52.6", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "windows-targets" 2133 | version = "0.52.6" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2136 | dependencies = [ 2137 | "windows_aarch64_gnullvm 0.52.6", 2138 | "windows_aarch64_msvc 0.52.6", 2139 | "windows_i686_gnu 0.52.6", 2140 | "windows_i686_gnullvm 0.52.6", 2141 | "windows_i686_msvc 0.52.6", 2142 | "windows_x86_64_gnu 0.52.6", 2143 | "windows_x86_64_gnullvm 0.52.6", 2144 | "windows_x86_64_msvc 0.52.6", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "windows-targets" 2149 | version = "0.53.0" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" 2152 | dependencies = [ 2153 | "windows_aarch64_gnullvm 0.53.0", 2154 | "windows_aarch64_msvc 0.53.0", 2155 | "windows_i686_gnu 0.53.0", 2156 | "windows_i686_gnullvm 0.53.0", 2157 | "windows_i686_msvc 0.53.0", 2158 | "windows_x86_64_gnu 0.53.0", 2159 | "windows_x86_64_gnullvm 0.53.0", 2160 | "windows_x86_64_msvc 0.53.0", 2161 | ] 2162 | 2163 | [[package]] 2164 | name = "windows_aarch64_gnullvm" 2165 | version = "0.52.6" 2166 | source = "registry+https://github.com/rust-lang/crates.io-index" 2167 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2168 | 2169 | [[package]] 2170 | name = "windows_aarch64_gnullvm" 2171 | version = "0.53.0" 2172 | source = "registry+https://github.com/rust-lang/crates.io-index" 2173 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 2174 | 2175 | [[package]] 2176 | name = "windows_aarch64_msvc" 2177 | version = "0.52.6" 2178 | source = "registry+https://github.com/rust-lang/crates.io-index" 2179 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2180 | 2181 | [[package]] 2182 | name = "windows_aarch64_msvc" 2183 | version = "0.53.0" 2184 | source = "registry+https://github.com/rust-lang/crates.io-index" 2185 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 2186 | 2187 | [[package]] 2188 | name = "windows_i686_gnu" 2189 | version = "0.52.6" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2192 | 2193 | [[package]] 2194 | name = "windows_i686_gnu" 2195 | version = "0.53.0" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 2198 | 2199 | [[package]] 2200 | name = "windows_i686_gnullvm" 2201 | version = "0.52.6" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2204 | 2205 | [[package]] 2206 | name = "windows_i686_gnullvm" 2207 | version = "0.53.0" 2208 | source = "registry+https://github.com/rust-lang/crates.io-index" 2209 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 2210 | 2211 | [[package]] 2212 | name = "windows_i686_msvc" 2213 | version = "0.52.6" 2214 | source = "registry+https://github.com/rust-lang/crates.io-index" 2215 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2216 | 2217 | [[package]] 2218 | name = "windows_i686_msvc" 2219 | version = "0.53.0" 2220 | source = "registry+https://github.com/rust-lang/crates.io-index" 2221 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 2222 | 2223 | [[package]] 2224 | name = "windows_x86_64_gnu" 2225 | version = "0.52.6" 2226 | source = "registry+https://github.com/rust-lang/crates.io-index" 2227 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2228 | 2229 | [[package]] 2230 | name = "windows_x86_64_gnu" 2231 | version = "0.53.0" 2232 | source = "registry+https://github.com/rust-lang/crates.io-index" 2233 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 2234 | 2235 | [[package]] 2236 | name = "windows_x86_64_gnullvm" 2237 | version = "0.52.6" 2238 | source = "registry+https://github.com/rust-lang/crates.io-index" 2239 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2240 | 2241 | [[package]] 2242 | name = "windows_x86_64_gnullvm" 2243 | version = "0.53.0" 2244 | source = "registry+https://github.com/rust-lang/crates.io-index" 2245 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 2246 | 2247 | [[package]] 2248 | name = "windows_x86_64_msvc" 2249 | version = "0.52.6" 2250 | source = "registry+https://github.com/rust-lang/crates.io-index" 2251 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2252 | 2253 | [[package]] 2254 | name = "windows_x86_64_msvc" 2255 | version = "0.53.0" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 2258 | 2259 | [[package]] 2260 | name = "winnow" 2261 | version = "0.7.6" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" 2264 | dependencies = [ 2265 | "memchr", 2266 | ] 2267 | 2268 | [[package]] 2269 | name = "wit-bindgen-rt" 2270 | version = "0.39.0" 2271 | source = "registry+https://github.com/rust-lang/crates.io-index" 2272 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 2273 | dependencies = [ 2274 | "bitflags", 2275 | ] 2276 | 2277 | [[package]] 2278 | name = "write16" 2279 | version = "1.0.0" 2280 | source = "registry+https://github.com/rust-lang/crates.io-index" 2281 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2282 | 2283 | [[package]] 2284 | name = "writeable" 2285 | version = "0.5.5" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2288 | 2289 | [[package]] 2290 | name = "xattr" 2291 | version = "1.5.0" 2292 | source = "registry+https://github.com/rust-lang/crates.io-index" 2293 | checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" 2294 | dependencies = [ 2295 | "libc", 2296 | "rustix", 2297 | ] 2298 | 2299 | [[package]] 2300 | name = "yoke" 2301 | version = "0.7.5" 2302 | source = "registry+https://github.com/rust-lang/crates.io-index" 2303 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2304 | dependencies = [ 2305 | "serde", 2306 | "stable_deref_trait", 2307 | "yoke-derive", 2308 | "zerofrom", 2309 | ] 2310 | 2311 | [[package]] 2312 | name = "yoke-derive" 2313 | version = "0.7.5" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2316 | dependencies = [ 2317 | "proc-macro2", 2318 | "quote", 2319 | "syn", 2320 | "synstructure", 2321 | ] 2322 | 2323 | [[package]] 2324 | name = "zerocopy" 2325 | version = "0.8.24" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" 2328 | dependencies = [ 2329 | "zerocopy-derive", 2330 | ] 2331 | 2332 | [[package]] 2333 | name = "zerocopy-derive" 2334 | version = "0.8.24" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" 2337 | dependencies = [ 2338 | "proc-macro2", 2339 | "quote", 2340 | "syn", 2341 | ] 2342 | 2343 | [[package]] 2344 | name = "zerofrom" 2345 | version = "0.1.6" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 2348 | dependencies = [ 2349 | "zerofrom-derive", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "zerofrom-derive" 2354 | version = "0.1.6" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 2357 | dependencies = [ 2358 | "proc-macro2", 2359 | "quote", 2360 | "syn", 2361 | "synstructure", 2362 | ] 2363 | 2364 | [[package]] 2365 | name = "zeroize" 2366 | version = "1.8.1" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2369 | 2370 | [[package]] 2371 | name = "zerovec" 2372 | version = "0.10.4" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2375 | dependencies = [ 2376 | "yoke", 2377 | "zerofrom", 2378 | "zerovec-derive", 2379 | ] 2380 | 2381 | [[package]] 2382 | name = "zerovec-derive" 2383 | version = "0.10.3" 2384 | source = "registry+https://github.com/rust-lang/crates.io-index" 2385 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2386 | dependencies = [ 2387 | "proc-macro2", 2388 | "quote", 2389 | "syn", 2390 | ] 2391 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "opensass" 3 | version = "0.0.6" 4 | edition = "2024" 5 | description = """ 6 | 🧩 A CLI to interact with the OpenSASS ecosystem. 7 | """ 8 | authors = ["Mahmoud Harmouch "] 9 | license = "MIT" 10 | documentation = "https://docs.rs/opensass" 11 | repository = "https://github.com/opensass/cli" 12 | readme = "README.md" 13 | categories = ["wasm", "command-line-utilities", "development-tools::build-utils"] 14 | keywords = ["wasm", "rust", "cli", "components", "frontend"] 15 | exclude = ["/assets"] 16 | 17 | [[bin]] 18 | name = "os" 19 | path = "src/main.rs" 20 | 21 | [dependencies] 22 | anyhow = "1.0.98" 23 | clap = { version = "4.5.39", features = ["derive"] } 24 | crates_io_api = "0.11.0" 25 | flate2 = "1.1.1" 26 | indicatif = "0.17.11" 27 | reqwest = { version = "0.12.19", features = ["blocking", "rustls-tls"] } 28 | tar = "0.4.44" 29 | tempfile = "3.20.0" 30 | tokio = { version = "1.45.1", features = ["full"] } 31 | toml_edit = "0.22.26" 32 | tracing = "0.1.41" 33 | tracing-subscriber = "0.3.19" 34 | walkdir = "2.5.0" 35 | 36 | [features] 37 | default = [] 38 | 39 | [profile.release] 40 | opt-level = "z" 41 | debug = false 42 | lto = "thin" 43 | codegen-units = 1 44 | panic = "abort" 45 | strip = "symbols" 46 | incremental = false 47 | 48 | [badges] 49 | maintenance = { status = "actively-developed" } 50 | 51 | [package.metadata.docs.rs] 52 | all-features = true 53 | rustdoc-args = ["--cfg", "docsrs"] 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Open SASS Core Maintainers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | # 🧩 OpenSASS 4 | 5 | [![Crates.io](https://img.shields.io/crates/v/opensass)](https://crates.io/crates/opensass) 6 | [![Crates.io Downloads](https://img.shields.io/crates/d/opensass)](https://crates.io/crates/opensass) 7 | ![Crates.io License](https://img.shields.io/crates/l/opensass) 8 | [![made-with-rust](https://img.shields.io/badge/Made%20with-Rust-1f425f.svg?logo=rust&logoColor=white)](https://www.rust-lang.org/) 9 | [![Rust](https://img.shields.io/badge/Rust-1.85%2B-blue.svg)](https://www.rust-lang.org) 10 | [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/wiseaidev) 11 | 12 | [![Join our Discord](https://dcbadge.limes.pink/api/server/b5JbvHW5nv)](https://discord.gg/b5JbvHW5nv) 13 | 14 | 15 | ![logo](https://raw.githubusercontent.com/opensass/cli/refs/heads/main/assets/logo.webp) 16 | 17 | | 🐧 Linux `(Recommended)` | 🪟 Windows | 18 | | :----------------------: | :----------------------: | 19 | | `cargo install opensass` | `cargo install opensass` | 20 | | [Download Executable File](https://github.com/opensass/cli/releases/download/v0.0.5/os) | [Download `.exe` File](https://github.com/opensass/cli/releases/download/v0.0.5/os.exe) | 21 | | `os -h` | `os -h` | 22 | 23 |
24 | 25 | > 🧩 **OpenSASS**: A CLI tool for downloading reusable OpenSASS components from crates.io and integrating them into your WASM frontend projects. 26 | 27 | ## 📖 Table of Contents 28 | 29 | - [Installation](#-installation) 30 | - [Features](#-features) 31 | - [Usage](#-usage) 32 | - [Components](#-components) 33 | - [Benchmark](#-benchmark) 34 | - [Contributing](#-contributing) 35 | - [License](#-license) 36 | 37 | ## 🚀 Installation 38 | 39 | To install the CLI: 40 | 41 | ```sh 42 | cargo install opensass 43 | ``` 44 | 45 | Or build from source: 46 | 47 | ```sh 48 | git clone https://github.com/opensass/cli.git 49 | cd cli 50 | cargo build --release 51 | ``` 52 | 53 | ## ✨ Features 54 | 55 | - 🧩 Add OpenSASS component-based crates with a single command. 56 | - ⚙ Automatically updates `Cargo.toml` with proper features. 57 | - 🔁 Copies only the `src/` files related to the specified feature. 58 | 59 | ## 💡 Usage 60 | 61 | 62 | 63 | ### Yew Usage 64 | 65 | ```sh 66 | os add i18nrs yew 67 | ``` 68 | 69 | This will: 70 | 71 | - Download the `i18nrs` crate. 72 | - Extract files only related to the `yew` feature. 73 | - Copy `src/` files into your project under a new directory `crate_name`, in this case `i18nrs`. 74 | - Update your `Cargo.toml` dependencies and `lib.rs` file. 75 | 76 | ### Dioxus Usage 77 | 78 | ```sh 79 | os add i18nrs dio 80 | ``` 81 | 82 | ### Leptos Usage 83 | 84 | ```sh 85 | os add i18nrs lep 86 | ``` 87 | 88 | ## 🧃 Components 89 | 90 | Open SASS offers the following components: 91 | 92 | | 🧩 Component | 📦 Repository | 📝 Description | 93 | |------------------|--------------------------|---------------------| 94 | | `accordion-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/accordion-rs)](https://github.com/opensass/accordion-rs) | ↕️ A highly customizable accordion component for WASM frameworks. | 95 | | `alert-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/alert-rs)](https://github.com/opensass/alert-rs) | ⚠️ A highly customizable alert component for WASM frameworks. | 96 | | `eld` | [![GitHub](https://img.shields.io/github/stars/opensass/eld)](https://github.com/opensass/eld) | 🚛 ELD Toolkit for WASM frameworks. | 97 | | `i18nrs` | [![GitHub](https://img.shields.io/github/stars/opensass/i18n-rs)](https://github.com/opensass/i18n-rs) | 🌐 Internationalization (i18n) component for WASM frameworks. | 98 | | `image-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/image-rs)](https://github.com/opensass/image-rs) | 🖼️ Image Component for WASM frameworks. | 99 | | `input-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/input-rs)](https://github.com/opensass/input-rs) | 🔤 A highly customizable input component for WASM frameworks. | 100 | | `navbar` | [![GitHub](https://img.shields.io/github/stars/opensass/navbar)](https://github.com/opensass/navbar) | 🍔 A highly customizable navbar component for WASM frameworks. | 101 | | `radiors` | [![GitHub](https://img.shields.io/github/stars/opensass/radio-rs)](https://github.com/opensass/radio-rs) | 🎛️ A highly customizable radio buttons component for WASM frameworks. | 102 | | `scroll-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/scroll-rs)](https://github.com/opensass/scroll-rs) | 🖱️ A highly customizable scroll-to-anywhere component for WASM frameworks. | 103 | | `select-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/select-rs)](https://github.com/opensass/select-rs) | 🔽 A highly customizable select group component for WASM frameworks. | 104 | | `sidebar` | [![GitHub](https://img.shields.io/github/stars/opensass/sidebar)](https://github.com/opensass/sidebar) | 🗃️ A sidebar component for WASM frameworks. | 105 | | `skeleton-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/skeleton-rs)](https://github.com/opensass/skeleton-rs) | 🦴 A skeleton component for WASM frameworks. | 106 | | `slider-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/slider-rs)](https://github.com/opensass/slider-rs) | 🎚️ A slider component for WASM frameworks. | 107 | | `table-rs` | [![GitHub](https://img.shields.io/github/stars/opensass/table-rs)](https://github.com/opensass/table-rs) | 📋 Table component for WASM frameworks. | 108 | | `theme` | [![GitHub](https://img.shields.io/github/stars/opensass/theme)](https://github.com/opensass/theme) | 🎨 A highly customizable theming system for WASM frameworks. | 109 | 110 | And much more coming over time... 111 | 112 | ## ⚡ Benchmark 113 | 114 | ```sh 115 | ❯ time yes | npx shadcn@latest add accordion 116 | npx shadcn@latest add accordion 8.98s user 4.85s system 90% cpu 15.279 total 117 | ``` 118 | 119 | ```sh 120 | ❯ time os add accordion-rs yew 121 | os add accordion-rs yew 0.16s user 0.02s system 5% cpu 0.2 total 122 | ``` 123 | 124 | Open SASS CLI is **~56× faster** in user time and uses **~18× less CPU** than `shadcn`. More optimizations on the way 🚀. 125 | 126 | ## 🤝 Contributions 127 | 128 | Contributions are welcome! Whether it's bug fixes, feature requests, or examples, we would love your help to make Open SASS better. 129 | 130 | 1. Fork the repository. 131 | 1. Create a new branch for your feature/bugfix. 132 | 1. Submit a pull request for review. 133 | 134 | ## 📜 License 135 | 136 | Open SASS is licensed under the [MIT License](LICENSE). You are free to use, modify, and distribute this library in your projects. 137 | -------------------------------------------------------------------------------- /assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opensass/cli/54ec891fa4a6c7df866dd95c2971d39efe25e2b2/assets/favicon.png -------------------------------------------------------------------------------- /assets/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/opensass/cli/54ec891fa4a6c7df866dd95c2971d39efe25e2b2/assets/logo.webp -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | //! This module contains the CLI functionalities for interacting with the OpenSASS ecosystem. 2 | //! 3 | //! The CLI allows you to add OpenSASS components to your WASM projects by downloading them 4 | //! from crates.io, importing their dependencies, features, and related files. 5 | 6 | use clap::builder::styling::{AnsiColor, Effects, Styles}; 7 | use clap::{Args, Parser, Subcommand}; 8 | 9 | fn styles() -> Styles { 10 | Styles::styled() 11 | .header(AnsiColor::Cyan.on_default() | Effects::BOLD) 12 | .usage(AnsiColor::Cyan.on_default() | Effects::BOLD) 13 | .literal(AnsiColor::Blue.on_default() | Effects::BOLD) 14 | .error(AnsiColor::Red.on_default() | Effects::BOLD) 15 | .placeholder(AnsiColor::Green.on_default()) 16 | } 17 | 18 | #[derive(Parser, Debug, Clone)] 19 | #[command( 20 | author = "Mahmoud Harmouch", 21 | version, 22 | name = "os", 23 | propagate_version = true, 24 | styles = styles(), 25 | help_template = r#"{before-help}{name} {version} 26 | {about} 27 | {usage-heading} {usage} 28 | 29 | {all-args}{after-help} 30 | 31 | AUTHORS: 32 | {author} 33 | "#, 34 | about = r#" 35 | ██████ ██████ ███████ ███ ██ ███████ █████ ███████ ███████ 36 | ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ 37 | ██ ██ ██████ █████ ██ ██ ██ ███████ ███████ ███████ ███████ 38 | ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ 39 | ██████ ██ ███████ ██ ████ ███████ ██ ██ ███████ ███████ 40 | 41 | `os` is a command-line interface for downloading and importing OpenSASS 42 | components into your WASM projects. 43 | 44 | FUNCTIONALITIES: 45 | - Download OpenSASS components from crates.io. 46 | - Automatically detect and import required dependencies and feature flags. 47 | - Copy relevant source files into your local project for easy integration. 48 | 49 | EXAMPLES: 50 | Add the `i18nrs` component with `yew` feature: 51 | os add i18nrs yew 52 | 53 | Add the `i18nrs` component with `yew` feature while stripping all docs: 54 | os add -n i18nrs yew 55 | 56 | For more information, visit: https://github.com/opensass/cli 57 | "# 58 | )] 59 | pub struct Cli { 60 | #[command(subcommand)] 61 | pub cmd: Option, 62 | } 63 | 64 | #[derive(Subcommand, Debug, Clone)] 65 | pub enum Command { 66 | /// Add an OpenSASS component to your project 67 | Add(AddArgs), 68 | } 69 | 70 | #[derive(Args, Debug, Clone)] 71 | pub struct AddArgs { 72 | /// The name of the OpenSASS component to add 73 | pub name: String, 74 | 75 | /// List of features to include 76 | pub features: String, 77 | 78 | /// Strip all comments (e.g., ///, //, //!...) when copying source files 79 | #[arg(short = 'n', long = "no-cum")] 80 | pub no_cum: bool, 81 | } 82 | -------------------------------------------------------------------------------- /src/cmds.rs: -------------------------------------------------------------------------------- 1 | pub mod add; 2 | -------------------------------------------------------------------------------- /src/cmds/add.rs: -------------------------------------------------------------------------------- 1 | use crate::utils::fs::{copy_relevant_files, update_cargo_toml, update_pub_file}; 2 | use crates_io_api::SyncClient; 3 | use flate2::read::GzDecoder; 4 | use indicatif::{ProgressBar, ProgressStyle}; 5 | use reqwest::blocking::get; 6 | use std::{fs, io::Cursor, path::Path}; 7 | use tar::Archive; 8 | use tempfile::tempdir; 9 | use tracing::info; 10 | 11 | pub fn run_add(crate_name: &str, feature: &str, no_cum: bool) -> anyhow::Result<()> { 12 | let client = SyncClient::new( 13 | "opensass (via crates_io_api)", 14 | std::time::Duration::from_millis(1000), 15 | )?; 16 | 17 | let spinner = ProgressBar::new_spinner(); 18 | spinner.set_style( 19 | ProgressStyle::default_spinner() 20 | .tick_chars("⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ ") 21 | .template("{spinner:.cyan} {msg}") 22 | .expect("valid spinner"), 23 | ); 24 | 25 | spinner.set_message(format!("🔍 Fetching crate: {crate_name}")); 26 | let crate_info = client.get_crate(crate_name)?; 27 | let latest_version = &crate_info.versions[0].num; 28 | spinner.set_message(format!("📦 Found latest version: {latest_version}")); 29 | 30 | let dir = tempdir()?; 31 | let url = format!( 32 | "https://crates.io/api/v1/crates/{}/{}/download", 33 | crate_name, latest_version 34 | ); 35 | 36 | spinner.set_message("⬇️ Downloading crate..."); 37 | let response = get(&url)?; 38 | let bytes = response.bytes()?; 39 | 40 | spinner.set_message("📦 Unpacking crate..."); 41 | let tar = GzDecoder::new(Cursor::new(bytes)); 42 | let mut archive = Archive::new(tar); 43 | archive.unpack(&dir)?; 44 | 45 | let extracted_path = fs::read_dir(&dir)? 46 | .filter_map(Result::ok) 47 | .find(|entry| entry.path().is_dir()) 48 | .map(|entry| entry.path()) 49 | .ok_or_else(|| anyhow::anyhow!("Failed to locate unpacked crate folder"))?; 50 | 51 | let source_path = extracted_path.join("src"); 52 | let current_project_src = Path::new("src"); 53 | 54 | let new_crate_name = crate_name.replace('-', "_"); 55 | 56 | spinner.set_message("📁 Copying relevant source files..."); 57 | let _ = copy_relevant_files( 58 | &source_path, 59 | current_project_src, 60 | &new_crate_name, 61 | feature, 62 | no_cum, 63 | )?; 64 | 65 | spinner.set_message("🧩 Updating lib.rs..."); 66 | update_pub_file( 67 | current_project_src.join("lib.rs"), 68 | &[new_crate_name.to_string()], 69 | )?; 70 | 71 | spinner.set_message("🛠️ Updating Cargo.toml..."); 72 | update_cargo_toml( 73 | extracted_path.join("Cargo.toml"), 74 | Path::new("Cargo.toml"), 75 | feature, 76 | )?; 77 | 78 | spinner.finish_with_message("✅ Component added successfully!"); 79 | 80 | info!( 81 | "Component `{}` with feature `{}` added to project", 82 | crate_name, feature 83 | ); 84 | Ok(()) 85 | } 86 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #![doc( 2 | html_logo_url = "https://raw.githubusercontent.com/opensass/cli/refs/heads/main/assets/logo.webp", 3 | html_favicon_url = "https://github.com/opensass/cli/blob/main/assets/favicon.png" 4 | )] 5 | #![cfg_attr(docsrs, feature(doc_auto_cfg))] 6 | #![doc = include_str!("../README.md")] 7 | 8 | pub mod cli; 9 | pub mod cmds; 10 | pub mod utils; 11 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | use clap::Parser; 3 | use opensass::cli::{Cli, Command}; 4 | use opensass::cmds::add::run_add; 5 | use opensass::utils::log::setup_logging; 6 | use tokio::task; 7 | 8 | /// The main entry point of `opensass`. 9 | #[tokio::main] 10 | async fn main() -> Result<()> { 11 | let args: Cli = Cli::parse(); 12 | 13 | setup_logging()?; 14 | match args.cmd { 15 | Some(Command::Add(cmd)) => { 16 | task::spawn_blocking(move || run_add(&cmd.name, &cmd.features, cmd.no_cum)).await??; 17 | } 18 | None => {} 19 | } 20 | Ok(()) 21 | } 22 | -------------------------------------------------------------------------------- /src/utils.rs: -------------------------------------------------------------------------------- 1 | pub mod fs; 2 | pub mod log; 3 | -------------------------------------------------------------------------------- /src/utils/fs.rs: -------------------------------------------------------------------------------- 1 | use anyhow::{Context, Result}; 2 | use std::{ 3 | fs, 4 | fs::File, 5 | io::{BufRead, BufReader, Write}, 6 | path::{Path, PathBuf}, 7 | }; 8 | use toml_edit::DocumentMut; 9 | use walkdir::WalkDir; 10 | 11 | pub fn copy_relevant_files( 12 | src_dir: &Path, 13 | dest_dir: &Path, 14 | crate_name: &str, 15 | feature: &str, 16 | no_cum: bool, 17 | ) -> Result> { 18 | let mut copied = Vec::new(); 19 | 20 | let feature_file = match feature { 21 | "dio" => "dioxus", 22 | "lep" => "leptos", 23 | _ => feature, 24 | }; 25 | 26 | let crate_dir = dest_dir.join(crate_name); 27 | fs::create_dir_all(&crate_dir) 28 | .with_context(|| format!("Failed to create crate directory at {:?}", crate_dir))?; 29 | 30 | for entry in WalkDir::new(src_dir).into_iter().flatten() { 31 | let path = entry.path(); 32 | 33 | if path.is_file() { 34 | let relative_path = path.strip_prefix(src_dir)?; 35 | let components: Vec<_> = relative_path.components().collect(); 36 | 37 | let is_in_feature_dir = components 38 | .first() 39 | .map(|c| c.as_os_str() == feature_file) 40 | .unwrap_or(false); 41 | 42 | let file_name = path.file_name().unwrap().to_string_lossy(); 43 | 44 | let should_copy = [ 45 | "common.rs", 46 | "config.rs", 47 | "countries.rs", 48 | "chart.rs", 49 | &format!("{feature_file}.rs"), 50 | ] 51 | .contains(&file_name.as_ref()); 52 | 53 | if should_copy && components.len() == 1 { 54 | let dest_file_name = file_name.to_string(); 55 | let dest_path = crate_dir.join(&dest_file_name); 56 | copy_file_cum(path, &dest_path, no_cum, crate_name, feature_file)?; 57 | copied.push(dest_file_name.trim_end_matches(".rs").to_string()); 58 | } else if is_in_feature_dir && components.len() == 2 { 59 | copied.retain(|m| m != feature_file); 60 | let feature_rs_path = crate_dir.join(format!("{feature_file}.rs")); 61 | if feature_rs_path.exists() { 62 | fs::remove_file(&feature_rs_path) 63 | .with_context(|| format!("Failed to delete {:?}", feature_rs_path))?; 64 | } 65 | let inner_file_name = file_name.to_string(); 66 | let dest_path = crate_dir.join(&inner_file_name); 67 | copy_file_cum(path, &dest_path, no_cum, crate_name, feature_file)?; 68 | copied.push(inner_file_name.trim_end_matches(".rs").to_string()); 69 | } 70 | } 71 | } 72 | 73 | let crate_file = dest_dir.join(format!("{crate_name}.rs")); 74 | update_pub_file(crate_file, &copied)?; 75 | 76 | Ok(copied) 77 | } 78 | 79 | fn copy_file_cum( 80 | src: &Path, 81 | dest: &Path, 82 | no_cum: bool, 83 | crate_name: &str, 84 | feature_name: &str, 85 | ) -> Result<()> { 86 | if no_cum { 87 | let file = File::open(src)?; 88 | let reader = BufReader::new(file); 89 | let mut dest_file = File::create(dest)?; 90 | 91 | for line in reader.lines() { 92 | let mut line = line?; 93 | let trimmed = line.trim_start(); 94 | 95 | if trimmed.starts_with("//") 96 | || trimmed.starts_with("///") 97 | || trimmed.starts_with("//!") 98 | || trimmed.starts_with("/*!") 99 | || trimmed.starts_with("/**") 100 | { 101 | continue; 102 | } 103 | 104 | if trimmed.starts_with("use crate::") { 105 | if let Some(stripped) = line.strip_prefix("use crate::") { 106 | if stripped.starts_with(feature_name) { 107 | line = format!( 108 | "use crate::{}::{}", 109 | crate_name, 110 | &stripped[feature_name.len() + 2..] 111 | ); 112 | } else { 113 | line = format!("use crate::{}::{}", crate_name, stripped); 114 | } 115 | } 116 | } 117 | 118 | writeln!(dest_file, "{}", line)?; 119 | } 120 | } else { 121 | fs::copy(src, dest).with_context(|| format!("Failed to copy {:?} to {:?}", src, dest))?; 122 | } 123 | 124 | Ok(()) 125 | } 126 | 127 | pub fn update_pub_file(lib_path: PathBuf, modules: &[String]) -> Result<()> { 128 | let mut content = if lib_path.exists() { 129 | fs::read_to_string(&lib_path)? 130 | } else { 131 | String::new() 132 | }; 133 | 134 | for module in modules { 135 | let mod_line = format!("pub mod {};", module); 136 | if !content.contains(&mod_line) { 137 | content.push_str(&format!("\n{mod_line}")); 138 | } 139 | } 140 | 141 | fs::write(lib_path, content)?; 142 | Ok(()) 143 | } 144 | 145 | pub fn update_cargo_toml(from: PathBuf, to: &Path, _feature: &str) -> Result<()> { 146 | let source_content = fs::read_to_string(&from)?; 147 | let from_doc: DocumentMut = source_content.parse()?; 148 | 149 | let mut dest_doc = if to.exists() { 150 | fs::read_to_string(to)?.parse()? 151 | } else { 152 | DocumentMut::new() 153 | }; 154 | 155 | let mut gated_deps = std::collections::HashSet::new(); 156 | if let Some(features) = from_doc.get("features") { 157 | if let Some(features_table) = features.as_table() { 158 | for (_feature_name, deps_array) in features_table.iter() { 159 | if let Some(array) = deps_array.as_array() { 160 | for item in array.iter().filter_map(|v| v.as_str()) { 161 | if let Some(dep_name) = item.strip_prefix("dep:") { 162 | gated_deps.insert(dep_name.to_string()); 163 | } else { 164 | gated_deps.insert(item.to_string()); 165 | } 166 | } 167 | } 168 | } 169 | } 170 | } 171 | 172 | if let Some(deps) = from_doc.get("dependencies") { 173 | let deps_table = deps.as_table().unwrap(); 174 | 175 | for (name, val) in deps_table { 176 | let is_optional = val 177 | .get("optional") 178 | .and_then(|o| o.as_bool()) 179 | .unwrap_or(false); 180 | 181 | if is_optional && gated_deps.contains(name) { 182 | continue; 183 | } 184 | 185 | dest_doc["dependencies"][name] = val.clone(); 186 | } 187 | } 188 | 189 | fs::write(to, dest_doc.to_string())?; 190 | Ok(()) 191 | } 192 | -------------------------------------------------------------------------------- /src/utils/log.rs: -------------------------------------------------------------------------------- 1 | use tracing_subscriber::Layer; 2 | use tracing_subscriber::Registry; 3 | use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt; 4 | use tracing_subscriber::{filter, fmt}; 5 | 6 | pub fn setup_logging() -> anyhow::Result<()> { 7 | let console_layer = fmt::Layer::new() 8 | .compact() 9 | .without_time() 10 | .with_file(false) 11 | .with_line_number(false) 12 | .with_thread_ids(false) 13 | .with_target(false) 14 | .with_writer(std::io::stdout) 15 | .with_filter(filter::LevelFilter::INFO); 16 | 17 | let subscriber = Registry::default().with(console_layer); 18 | 19 | tracing::subscriber::set_global_default(subscriber)?; 20 | 21 | Ok(()) 22 | } 23 | --------------------------------------------------------------------------------