├── .github └── workflows │ ├── docs.yml │ ├── flatpak.yml │ └── rust.yml ├── .gitignore ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── data ├── flatpak-ext-banner.png ├── flatpak-ext.desktop └── flatpak-ext.metainfo.xml ├── docs ├── .gitignore ├── book.toml └── src │ ├── SUMMARY.md │ ├── flatpak-ext-run.md │ └── index.md ├── flatpak-ext.svg ├── flatpak ├── generated-sources.json └── io.github.ryanabx.flatpak-ext.yml ├── justfile ├── src ├── main.rs ├── run_temp.rs ├── run_temp_tools.rs ├── types.rs └── utils.rs └── tools └── generate-sources.py /.github/workflows/docs.yml: -------------------------------------------------------------------------------- 1 | name: github pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | 9 | jobs: 10 | deploy: 11 | runs-on: ubuntu-20.04 12 | concurrency: 13 | group: ${{ github.workflow }}-${{ github.ref }} 14 | steps: 15 | - uses: actions/checkout@v2 16 | 17 | - name: Setup mdBook 18 | uses: peaceiris/actions-mdbook@v2 19 | with: 20 | mdbook-version: 'latest' 21 | 22 | - run: mdbook build docs 23 | 24 | - name: Deploy 25 | uses: peaceiris/actions-gh-pages@v3 26 | if: ${{ github.ref == 'refs/heads/master' }} 27 | with: 28 | github_token: ${{ secrets.GITHUB_TOKEN }} 29 | publish_dir: ./docs/book -------------------------------------------------------------------------------- /.github/workflows/flatpak.yml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_dispatch: 3 | name: Build Flatpak Bundle 4 | jobs: 5 | flatpak: 6 | name: "Flatpak Bundle" 7 | runs-on: ubuntu-latest 8 | container: 9 | image: bilelmoussaoui/flatpak-github-actions:gnome-44 10 | options: --privileged 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 14 | with: 15 | bundle: io.github.ryanabx.flatrun.flatpak 16 | manifest-path: flatpak/io.github.ryanabx.flatrun.yml 17 | cache-key: flatpak-builder-${{ github.sha }} -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 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@v4 19 | - name: Install libflatpak 20 | run: sudo apt-get install -y libflatpak-dev 21 | - name: Build 22 | run: cargo build --verbose 23 | - name: Run tests 24 | run: cargo test --verbose 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .flatpak-builder 3 | .build -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Build Dependencies 4 | 5 | * libflatpak-devel 6 | * rust 7 | * cargo 8 | 9 | ## Dependencies 10 | 11 | * libflatpak 12 | 13 | ## Building flatpak-ext 14 | 15 | ```shell 16 | git clone https://github.com/ryanabx/flatpak-ext 17 | cargo build 18 | ``` 19 | 20 | ## Flatpak-ext structure 21 | 22 | Flatpak-ext is structured as both a lib and a bin, with the bin basically just calling the functions from the lib from a nice command-line interface. 23 | 24 | The library is a collection of tools separated by modules, with a common error type and a few other common abstractions in the `types` module. 25 | 26 | ## License 27 | 28 | Flatpak-ext is licensed under the MIT license, and no CLA is required to contribute. -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "anstream" 22 | version = "0.6.14" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" 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.7" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" 40 | 41 | [[package]] 42 | name = "anstyle-parse" 43 | version = "0.2.4" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" 46 | dependencies = [ 47 | "utf8parse", 48 | ] 49 | 50 | [[package]] 51 | name = "anstyle-query" 52 | version = "1.1.0" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" 55 | dependencies = [ 56 | "windows-sys 0.52.0", 57 | ] 58 | 59 | [[package]] 60 | name = "anstyle-wincon" 61 | version = "3.0.3" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" 64 | dependencies = [ 65 | "anstyle", 66 | "windows-sys 0.52.0", 67 | ] 68 | 69 | [[package]] 70 | name = "atomic-waker" 71 | version = "1.1.2" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 74 | 75 | [[package]] 76 | name = "autocfg" 77 | version = "1.3.0" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 80 | 81 | [[package]] 82 | name = "backtrace" 83 | version = "0.3.72" 84 | source = "registry+https://github.com/rust-lang/crates.io-index" 85 | checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" 86 | dependencies = [ 87 | "addr2line", 88 | "cc", 89 | "cfg-if", 90 | "libc", 91 | "miniz_oxide", 92 | "object", 93 | "rustc-demangle", 94 | ] 95 | 96 | [[package]] 97 | name = "base64" 98 | version = "0.22.1" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 101 | 102 | [[package]] 103 | name = "bitflags" 104 | version = "1.3.2" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 107 | 108 | [[package]] 109 | name = "bitflags" 110 | version = "2.5.0" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 113 | 114 | [[package]] 115 | name = "bumpalo" 116 | version = "3.16.0" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 119 | 120 | [[package]] 121 | name = "bytes" 122 | version = "1.6.0" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 125 | 126 | [[package]] 127 | name = "cc" 128 | version = "1.0.99" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" 131 | 132 | [[package]] 133 | name = "cfg-expr" 134 | version = "0.15.8" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" 137 | dependencies = [ 138 | "smallvec", 139 | "target-lexicon", 140 | ] 141 | 142 | [[package]] 143 | name = "cfg-if" 144 | version = "1.0.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 147 | 148 | [[package]] 149 | name = "clap" 150 | version = "4.5.6" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "a9689a29b593160de5bc4aacab7b5d54fb52231de70122626c178e6a368994c7" 153 | dependencies = [ 154 | "clap_builder", 155 | "clap_derive", 156 | ] 157 | 158 | [[package]] 159 | name = "clap_builder" 160 | version = "4.5.6" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "2e5387378c84f6faa26890ebf9f0a92989f8873d4d380467bcd0d8d8620424df" 163 | dependencies = [ 164 | "anstream", 165 | "anstyle", 166 | "clap_lex", 167 | "strsim", 168 | ] 169 | 170 | [[package]] 171 | name = "clap_derive" 172 | version = "4.5.5" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" 175 | dependencies = [ 176 | "heck", 177 | "proc-macro2", 178 | "quote", 179 | "syn", 180 | ] 181 | 182 | [[package]] 183 | name = "clap_lex" 184 | version = "0.7.1" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" 187 | 188 | [[package]] 189 | name = "colorchoice" 190 | version = "1.0.1" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" 193 | 194 | [[package]] 195 | name = "colored" 196 | version = "2.1.0" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" 199 | dependencies = [ 200 | "lazy_static", 201 | "windows-sys 0.48.0", 202 | ] 203 | 204 | [[package]] 205 | name = "core-foundation" 206 | version = "0.9.4" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 209 | dependencies = [ 210 | "core-foundation-sys", 211 | "libc", 212 | ] 213 | 214 | [[package]] 215 | name = "core-foundation-sys" 216 | version = "0.8.6" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 219 | 220 | [[package]] 221 | name = "deranged" 222 | version = "0.3.11" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 225 | dependencies = [ 226 | "powerfmt", 227 | ] 228 | 229 | [[package]] 230 | name = "encoding_rs" 231 | version = "0.8.34" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 234 | dependencies = [ 235 | "cfg-if", 236 | ] 237 | 238 | [[package]] 239 | name = "equivalent" 240 | version = "1.0.1" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 243 | 244 | [[package]] 245 | name = "errno" 246 | version = "0.3.9" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 249 | dependencies = [ 250 | "libc", 251 | "windows-sys 0.52.0", 252 | ] 253 | 254 | [[package]] 255 | name = "fastrand" 256 | version = "2.1.0" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" 259 | 260 | [[package]] 261 | name = "flatpak-ext" 262 | version = "0.2.0" 263 | dependencies = [ 264 | "clap", 265 | "libflatpak", 266 | "log", 267 | "rand", 268 | "reqwest", 269 | "rustix", 270 | "signal-hook", 271 | "simple_logger", 272 | ] 273 | 274 | [[package]] 275 | name = "fnv" 276 | version = "1.0.7" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 279 | 280 | [[package]] 281 | name = "foreign-types" 282 | version = "0.3.2" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 285 | dependencies = [ 286 | "foreign-types-shared", 287 | ] 288 | 289 | [[package]] 290 | name = "foreign-types-shared" 291 | version = "0.1.1" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 294 | 295 | [[package]] 296 | name = "form_urlencoded" 297 | version = "1.2.1" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 300 | dependencies = [ 301 | "percent-encoding", 302 | ] 303 | 304 | [[package]] 305 | name = "futures-channel" 306 | version = "0.3.30" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 309 | dependencies = [ 310 | "futures-core", 311 | "futures-sink", 312 | ] 313 | 314 | [[package]] 315 | name = "futures-core" 316 | version = "0.3.30" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 319 | 320 | [[package]] 321 | name = "futures-executor" 322 | version = "0.3.30" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 325 | dependencies = [ 326 | "futures-core", 327 | "futures-task", 328 | "futures-util", 329 | ] 330 | 331 | [[package]] 332 | name = "futures-io" 333 | version = "0.3.30" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 336 | 337 | [[package]] 338 | name = "futures-macro" 339 | version = "0.3.30" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 342 | dependencies = [ 343 | "proc-macro2", 344 | "quote", 345 | "syn", 346 | ] 347 | 348 | [[package]] 349 | name = "futures-sink" 350 | version = "0.3.30" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 353 | 354 | [[package]] 355 | name = "futures-task" 356 | version = "0.3.30" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 359 | 360 | [[package]] 361 | name = "futures-util" 362 | version = "0.3.30" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 365 | dependencies = [ 366 | "futures-core", 367 | "futures-io", 368 | "futures-macro", 369 | "futures-sink", 370 | "futures-task", 371 | "memchr", 372 | "pin-project-lite", 373 | "pin-utils", 374 | "slab", 375 | ] 376 | 377 | [[package]] 378 | name = "getrandom" 379 | version = "0.2.15" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 382 | dependencies = [ 383 | "cfg-if", 384 | "libc", 385 | "wasi", 386 | ] 387 | 388 | [[package]] 389 | name = "gimli" 390 | version = "0.29.0" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 393 | 394 | [[package]] 395 | name = "gio" 396 | version = "0.19.5" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "be548be810e45dd31d3bbb89c6210980bb7af9bca3ea1292b5f16b75f8e394a7" 399 | dependencies = [ 400 | "futures-channel", 401 | "futures-core", 402 | "futures-io", 403 | "futures-util", 404 | "gio-sys", 405 | "glib", 406 | "libc", 407 | "pin-project-lite", 408 | "smallvec", 409 | "thiserror", 410 | ] 411 | 412 | [[package]] 413 | name = "gio-sys" 414 | version = "0.19.5" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "d4bdbef451b0f0361e7f762987cc6bebd5facab1d535e85a3cf1115dfb08db40" 417 | dependencies = [ 418 | "glib-sys", 419 | "gobject-sys", 420 | "libc", 421 | "system-deps", 422 | "windows-sys 0.52.0", 423 | ] 424 | 425 | [[package]] 426 | name = "glib" 427 | version = "0.19.7" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "e52355166df21c7ed16b6a01f615669c7911ed74e27ef60eba339c0d2da12490" 430 | dependencies = [ 431 | "bitflags 2.5.0", 432 | "futures-channel", 433 | "futures-core", 434 | "futures-executor", 435 | "futures-task", 436 | "futures-util", 437 | "gio-sys", 438 | "glib-macros", 439 | "glib-sys", 440 | "gobject-sys", 441 | "libc", 442 | "memchr", 443 | "smallvec", 444 | "thiserror", 445 | ] 446 | 447 | [[package]] 448 | name = "glib-macros" 449 | version = "0.19.7" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "70025dbfa1275cf7d0531c3317ba6270dae15d87e63342229d638246ff45202e" 452 | dependencies = [ 453 | "heck", 454 | "proc-macro-crate", 455 | "proc-macro2", 456 | "quote", 457 | "syn", 458 | ] 459 | 460 | [[package]] 461 | name = "glib-sys" 462 | version = "0.19.5" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "767d23ead9bbdfcbb1c2242c155c8128a7d13dde7bf69c176f809546135e2282" 465 | dependencies = [ 466 | "libc", 467 | "system-deps", 468 | ] 469 | 470 | [[package]] 471 | name = "gobject-sys" 472 | version = "0.19.5" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "c3787b0bfacca12bb25f8f822b0dbee9f7e4a86e6469a29976d332d2c14c945b" 475 | dependencies = [ 476 | "glib-sys", 477 | "libc", 478 | "system-deps", 479 | ] 480 | 481 | [[package]] 482 | name = "h2" 483 | version = "0.4.5" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" 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.14.5" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 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 = "hermit-abi" 514 | version = "0.3.9" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 517 | 518 | [[package]] 519 | name = "http" 520 | version = "1.1.0" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 523 | dependencies = [ 524 | "bytes", 525 | "fnv", 526 | "itoa", 527 | ] 528 | 529 | [[package]] 530 | name = "http-body" 531 | version = "1.0.0" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" 534 | dependencies = [ 535 | "bytes", 536 | "http", 537 | ] 538 | 539 | [[package]] 540 | name = "http-body-util" 541 | version = "0.1.1" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" 544 | dependencies = [ 545 | "bytes", 546 | "futures-core", 547 | "http", 548 | "http-body", 549 | "pin-project-lite", 550 | ] 551 | 552 | [[package]] 553 | name = "httparse" 554 | version = "1.8.0" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 557 | 558 | [[package]] 559 | name = "hyper" 560 | version = "1.3.1" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" 563 | dependencies = [ 564 | "bytes", 565 | "futures-channel", 566 | "futures-util", 567 | "h2", 568 | "http", 569 | "http-body", 570 | "httparse", 571 | "itoa", 572 | "pin-project-lite", 573 | "smallvec", 574 | "tokio", 575 | "want", 576 | ] 577 | 578 | [[package]] 579 | name = "hyper-tls" 580 | version = "0.6.0" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 583 | dependencies = [ 584 | "bytes", 585 | "http-body-util", 586 | "hyper", 587 | "hyper-util", 588 | "native-tls", 589 | "tokio", 590 | "tokio-native-tls", 591 | "tower-service", 592 | ] 593 | 594 | [[package]] 595 | name = "hyper-util" 596 | version = "0.1.5" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" 599 | dependencies = [ 600 | "bytes", 601 | "futures-channel", 602 | "futures-util", 603 | "http", 604 | "http-body", 605 | "hyper", 606 | "pin-project-lite", 607 | "socket2", 608 | "tokio", 609 | "tower", 610 | "tower-service", 611 | "tracing", 612 | ] 613 | 614 | [[package]] 615 | name = "idna" 616 | version = "0.5.0" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 619 | dependencies = [ 620 | "unicode-bidi", 621 | "unicode-normalization", 622 | ] 623 | 624 | [[package]] 625 | name = "indexmap" 626 | version = "2.2.6" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 629 | dependencies = [ 630 | "equivalent", 631 | "hashbrown", 632 | ] 633 | 634 | [[package]] 635 | name = "ipnet" 636 | version = "2.9.0" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 639 | 640 | [[package]] 641 | name = "is_terminal_polyfill" 642 | version = "1.70.0" 643 | source = "registry+https://github.com/rust-lang/crates.io-index" 644 | checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" 645 | 646 | [[package]] 647 | name = "itoa" 648 | version = "1.0.11" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 651 | 652 | [[package]] 653 | name = "js-sys" 654 | version = "0.3.69" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 657 | dependencies = [ 658 | "wasm-bindgen", 659 | ] 660 | 661 | [[package]] 662 | name = "lazy_static" 663 | version = "1.4.0" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 666 | 667 | [[package]] 668 | name = "libc" 669 | version = "0.2.155" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 672 | 673 | [[package]] 674 | name = "libflatpak" 675 | version = "0.5.0" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "2a0466e5bc49c8a9d03c1daf924833474640bf3b334b01efde4234e77efe9780" 678 | dependencies = [ 679 | "gio", 680 | "glib", 681 | "libc", 682 | "libflatpak-sys", 683 | ] 684 | 685 | [[package]] 686 | name = "libflatpak-sys" 687 | version = "0.5.0" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "0022c1b20fa3959a52299cd531c6afc9433182f612b1210f18776a7857a58f2b" 690 | dependencies = [ 691 | "gio-sys", 692 | "glib-sys", 693 | "gobject-sys", 694 | "libc", 695 | "pkg-config", 696 | "system-deps", 697 | ] 698 | 699 | [[package]] 700 | name = "linux-raw-sys" 701 | version = "0.4.14" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 704 | 705 | [[package]] 706 | name = "log" 707 | version = "0.4.21" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 710 | 711 | [[package]] 712 | name = "memchr" 713 | version = "2.7.2" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 716 | 717 | [[package]] 718 | name = "mime" 719 | version = "0.3.17" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 722 | 723 | [[package]] 724 | name = "miniz_oxide" 725 | version = "0.7.3" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" 728 | dependencies = [ 729 | "adler", 730 | ] 731 | 732 | [[package]] 733 | name = "mio" 734 | version = "0.8.11" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 737 | dependencies = [ 738 | "libc", 739 | "wasi", 740 | "windows-sys 0.48.0", 741 | ] 742 | 743 | [[package]] 744 | name = "native-tls" 745 | version = "0.2.12" 746 | source = "registry+https://github.com/rust-lang/crates.io-index" 747 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 748 | dependencies = [ 749 | "libc", 750 | "log", 751 | "openssl", 752 | "openssl-probe", 753 | "openssl-sys", 754 | "schannel", 755 | "security-framework", 756 | "security-framework-sys", 757 | "tempfile", 758 | ] 759 | 760 | [[package]] 761 | name = "num-conv" 762 | version = "0.1.0" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 765 | 766 | [[package]] 767 | name = "num_cpus" 768 | version = "1.16.0" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 771 | dependencies = [ 772 | "hermit-abi", 773 | "libc", 774 | ] 775 | 776 | [[package]] 777 | name = "num_threads" 778 | version = "0.1.7" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 781 | dependencies = [ 782 | "libc", 783 | ] 784 | 785 | [[package]] 786 | name = "object" 787 | version = "0.35.0" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" 790 | dependencies = [ 791 | "memchr", 792 | ] 793 | 794 | [[package]] 795 | name = "once_cell" 796 | version = "1.19.0" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 799 | 800 | [[package]] 801 | name = "openssl" 802 | version = "0.10.64" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 805 | dependencies = [ 806 | "bitflags 2.5.0", 807 | "cfg-if", 808 | "foreign-types", 809 | "libc", 810 | "once_cell", 811 | "openssl-macros", 812 | "openssl-sys", 813 | ] 814 | 815 | [[package]] 816 | name = "openssl-macros" 817 | version = "0.1.1" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 820 | dependencies = [ 821 | "proc-macro2", 822 | "quote", 823 | "syn", 824 | ] 825 | 826 | [[package]] 827 | name = "openssl-probe" 828 | version = "0.1.5" 829 | source = "registry+https://github.com/rust-lang/crates.io-index" 830 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 831 | 832 | [[package]] 833 | name = "openssl-sys" 834 | version = "0.9.102" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" 837 | dependencies = [ 838 | "cc", 839 | "libc", 840 | "pkg-config", 841 | "vcpkg", 842 | ] 843 | 844 | [[package]] 845 | name = "percent-encoding" 846 | version = "2.3.1" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 849 | 850 | [[package]] 851 | name = "pin-project" 852 | version = "1.1.5" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 855 | dependencies = [ 856 | "pin-project-internal", 857 | ] 858 | 859 | [[package]] 860 | name = "pin-project-internal" 861 | version = "1.1.5" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 864 | dependencies = [ 865 | "proc-macro2", 866 | "quote", 867 | "syn", 868 | ] 869 | 870 | [[package]] 871 | name = "pin-project-lite" 872 | version = "0.2.14" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 875 | 876 | [[package]] 877 | name = "pin-utils" 878 | version = "0.1.0" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 881 | 882 | [[package]] 883 | name = "pkg-config" 884 | version = "0.3.30" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 887 | 888 | [[package]] 889 | name = "powerfmt" 890 | version = "0.2.0" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 893 | 894 | [[package]] 895 | name = "ppv-lite86" 896 | version = "0.2.17" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 899 | 900 | [[package]] 901 | name = "proc-macro-crate" 902 | version = "3.1.0" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" 905 | dependencies = [ 906 | "toml_edit 0.21.1", 907 | ] 908 | 909 | [[package]] 910 | name = "proc-macro2" 911 | version = "1.0.85" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" 914 | dependencies = [ 915 | "unicode-ident", 916 | ] 917 | 918 | [[package]] 919 | name = "quote" 920 | version = "1.0.36" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 923 | dependencies = [ 924 | "proc-macro2", 925 | ] 926 | 927 | [[package]] 928 | name = "rand" 929 | version = "0.8.5" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 932 | dependencies = [ 933 | "libc", 934 | "rand_chacha", 935 | "rand_core", 936 | ] 937 | 938 | [[package]] 939 | name = "rand_chacha" 940 | version = "0.3.1" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 943 | dependencies = [ 944 | "ppv-lite86", 945 | "rand_core", 946 | ] 947 | 948 | [[package]] 949 | name = "rand_core" 950 | version = "0.6.4" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 953 | dependencies = [ 954 | "getrandom", 955 | ] 956 | 957 | [[package]] 958 | name = "reqwest" 959 | version = "0.12.4" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" 962 | dependencies = [ 963 | "base64", 964 | "bytes", 965 | "encoding_rs", 966 | "futures-channel", 967 | "futures-core", 968 | "futures-util", 969 | "h2", 970 | "http", 971 | "http-body", 972 | "http-body-util", 973 | "hyper", 974 | "hyper-tls", 975 | "hyper-util", 976 | "ipnet", 977 | "js-sys", 978 | "log", 979 | "mime", 980 | "native-tls", 981 | "once_cell", 982 | "percent-encoding", 983 | "pin-project-lite", 984 | "rustls-pemfile", 985 | "serde", 986 | "serde_json", 987 | "serde_urlencoded", 988 | "sync_wrapper", 989 | "system-configuration", 990 | "tokio", 991 | "tokio-native-tls", 992 | "tower-service", 993 | "url", 994 | "wasm-bindgen", 995 | "wasm-bindgen-futures", 996 | "web-sys", 997 | "winreg", 998 | ] 999 | 1000 | [[package]] 1001 | name = "rustc-demangle" 1002 | version = "0.1.24" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1005 | 1006 | [[package]] 1007 | name = "rustix" 1008 | version = "0.38.34" 1009 | source = "registry+https://github.com/rust-lang/crates.io-index" 1010 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" 1011 | dependencies = [ 1012 | "bitflags 2.5.0", 1013 | "errno", 1014 | "libc", 1015 | "linux-raw-sys", 1016 | "windows-sys 0.52.0", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "rustls-pemfile" 1021 | version = "2.1.2" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" 1024 | dependencies = [ 1025 | "base64", 1026 | "rustls-pki-types", 1027 | ] 1028 | 1029 | [[package]] 1030 | name = "rustls-pki-types" 1031 | version = "1.7.0" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" 1034 | 1035 | [[package]] 1036 | name = "ryu" 1037 | version = "1.0.18" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1040 | 1041 | [[package]] 1042 | name = "schannel" 1043 | version = "0.1.23" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 1046 | dependencies = [ 1047 | "windows-sys 0.52.0", 1048 | ] 1049 | 1050 | [[package]] 1051 | name = "security-framework" 1052 | version = "2.11.0" 1053 | source = "registry+https://github.com/rust-lang/crates.io-index" 1054 | checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" 1055 | dependencies = [ 1056 | "bitflags 2.5.0", 1057 | "core-foundation", 1058 | "core-foundation-sys", 1059 | "libc", 1060 | "security-framework-sys", 1061 | ] 1062 | 1063 | [[package]] 1064 | name = "security-framework-sys" 1065 | version = "2.11.0" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" 1068 | dependencies = [ 1069 | "core-foundation-sys", 1070 | "libc", 1071 | ] 1072 | 1073 | [[package]] 1074 | name = "serde" 1075 | version = "1.0.203" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" 1078 | dependencies = [ 1079 | "serde_derive", 1080 | ] 1081 | 1082 | [[package]] 1083 | name = "serde_derive" 1084 | version = "1.0.203" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" 1087 | dependencies = [ 1088 | "proc-macro2", 1089 | "quote", 1090 | "syn", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "serde_json" 1095 | version = "1.0.117" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 1098 | dependencies = [ 1099 | "itoa", 1100 | "ryu", 1101 | "serde", 1102 | ] 1103 | 1104 | [[package]] 1105 | name = "serde_spanned" 1106 | version = "0.6.6" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" 1109 | dependencies = [ 1110 | "serde", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "serde_urlencoded" 1115 | version = "0.7.1" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1118 | dependencies = [ 1119 | "form_urlencoded", 1120 | "itoa", 1121 | "ryu", 1122 | "serde", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "signal-hook" 1127 | version = "0.3.17" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 1130 | dependencies = [ 1131 | "libc", 1132 | "signal-hook-registry", 1133 | ] 1134 | 1135 | [[package]] 1136 | name = "signal-hook-registry" 1137 | version = "1.4.2" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1140 | dependencies = [ 1141 | "libc", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "simple_logger" 1146 | version = "5.0.0" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "e8c5dfa5e08767553704aa0ffd9d9794d527103c736aba9854773851fd7497eb" 1149 | dependencies = [ 1150 | "colored", 1151 | "log", 1152 | "time", 1153 | "windows-sys 0.48.0", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "slab" 1158 | version = "0.4.9" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1161 | dependencies = [ 1162 | "autocfg", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "smallvec" 1167 | version = "1.13.2" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1170 | 1171 | [[package]] 1172 | name = "socket2" 1173 | version = "0.5.7" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1176 | dependencies = [ 1177 | "libc", 1178 | "windows-sys 0.52.0", 1179 | ] 1180 | 1181 | [[package]] 1182 | name = "strsim" 1183 | version = "0.11.1" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1186 | 1187 | [[package]] 1188 | name = "syn" 1189 | version = "2.0.66" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 1192 | dependencies = [ 1193 | "proc-macro2", 1194 | "quote", 1195 | "unicode-ident", 1196 | ] 1197 | 1198 | [[package]] 1199 | name = "sync_wrapper" 1200 | version = "0.1.2" 1201 | source = "registry+https://github.com/rust-lang/crates.io-index" 1202 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 1203 | 1204 | [[package]] 1205 | name = "system-configuration" 1206 | version = "0.5.1" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 1209 | dependencies = [ 1210 | "bitflags 1.3.2", 1211 | "core-foundation", 1212 | "system-configuration-sys", 1213 | ] 1214 | 1215 | [[package]] 1216 | name = "system-configuration-sys" 1217 | version = "0.5.0" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 1220 | dependencies = [ 1221 | "core-foundation-sys", 1222 | "libc", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "system-deps" 1227 | version = "6.2.2" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" 1230 | dependencies = [ 1231 | "cfg-expr", 1232 | "heck", 1233 | "pkg-config", 1234 | "toml", 1235 | "version-compare", 1236 | ] 1237 | 1238 | [[package]] 1239 | name = "target-lexicon" 1240 | version = "0.12.14" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" 1243 | 1244 | [[package]] 1245 | name = "tempfile" 1246 | version = "3.10.1" 1247 | source = "registry+https://github.com/rust-lang/crates.io-index" 1248 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 1249 | dependencies = [ 1250 | "cfg-if", 1251 | "fastrand", 1252 | "rustix", 1253 | "windows-sys 0.52.0", 1254 | ] 1255 | 1256 | [[package]] 1257 | name = "thiserror" 1258 | version = "1.0.61" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 1261 | dependencies = [ 1262 | "thiserror-impl", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "thiserror-impl" 1267 | version = "1.0.61" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 1270 | dependencies = [ 1271 | "proc-macro2", 1272 | "quote", 1273 | "syn", 1274 | ] 1275 | 1276 | [[package]] 1277 | name = "time" 1278 | version = "0.3.36" 1279 | source = "registry+https://github.com/rust-lang/crates.io-index" 1280 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 1281 | dependencies = [ 1282 | "deranged", 1283 | "itoa", 1284 | "libc", 1285 | "num-conv", 1286 | "num_threads", 1287 | "powerfmt", 1288 | "serde", 1289 | "time-core", 1290 | "time-macros", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "time-core" 1295 | version = "0.1.2" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1298 | 1299 | [[package]] 1300 | name = "time-macros" 1301 | version = "0.2.18" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" 1304 | dependencies = [ 1305 | "num-conv", 1306 | "time-core", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "tinyvec" 1311 | version = "1.6.0" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1314 | dependencies = [ 1315 | "tinyvec_macros", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "tinyvec_macros" 1320 | version = "0.1.1" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1323 | 1324 | [[package]] 1325 | name = "tokio" 1326 | version = "1.38.0" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" 1329 | dependencies = [ 1330 | "backtrace", 1331 | "bytes", 1332 | "libc", 1333 | "mio", 1334 | "num_cpus", 1335 | "pin-project-lite", 1336 | "socket2", 1337 | "windows-sys 0.48.0", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "tokio-native-tls" 1342 | version = "0.3.1" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1345 | dependencies = [ 1346 | "native-tls", 1347 | "tokio", 1348 | ] 1349 | 1350 | [[package]] 1351 | name = "tokio-util" 1352 | version = "0.7.11" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" 1355 | dependencies = [ 1356 | "bytes", 1357 | "futures-core", 1358 | "futures-sink", 1359 | "pin-project-lite", 1360 | "tokio", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "toml" 1365 | version = "0.8.14" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" 1368 | dependencies = [ 1369 | "serde", 1370 | "serde_spanned", 1371 | "toml_datetime", 1372 | "toml_edit 0.22.14", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "toml_datetime" 1377 | version = "0.6.6" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" 1380 | dependencies = [ 1381 | "serde", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "toml_edit" 1386 | version = "0.21.1" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" 1389 | dependencies = [ 1390 | "indexmap", 1391 | "toml_datetime", 1392 | "winnow 0.5.40", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "toml_edit" 1397 | version = "0.22.14" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" 1400 | dependencies = [ 1401 | "indexmap", 1402 | "serde", 1403 | "serde_spanned", 1404 | "toml_datetime", 1405 | "winnow 0.6.13", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "tower" 1410 | version = "0.4.13" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 1413 | dependencies = [ 1414 | "futures-core", 1415 | "futures-util", 1416 | "pin-project", 1417 | "pin-project-lite", 1418 | "tokio", 1419 | "tower-layer", 1420 | "tower-service", 1421 | ] 1422 | 1423 | [[package]] 1424 | name = "tower-layer" 1425 | version = "0.3.2" 1426 | source = "registry+https://github.com/rust-lang/crates.io-index" 1427 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 1428 | 1429 | [[package]] 1430 | name = "tower-service" 1431 | version = "0.3.2" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1434 | 1435 | [[package]] 1436 | name = "tracing" 1437 | version = "0.1.40" 1438 | source = "registry+https://github.com/rust-lang/crates.io-index" 1439 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1440 | dependencies = [ 1441 | "pin-project-lite", 1442 | "tracing-core", 1443 | ] 1444 | 1445 | [[package]] 1446 | name = "tracing-core" 1447 | version = "0.1.32" 1448 | source = "registry+https://github.com/rust-lang/crates.io-index" 1449 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1450 | dependencies = [ 1451 | "once_cell", 1452 | ] 1453 | 1454 | [[package]] 1455 | name = "try-lock" 1456 | version = "0.2.5" 1457 | source = "registry+https://github.com/rust-lang/crates.io-index" 1458 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1459 | 1460 | [[package]] 1461 | name = "unicode-bidi" 1462 | version = "0.3.15" 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" 1464 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1465 | 1466 | [[package]] 1467 | name = "unicode-ident" 1468 | version = "1.0.12" 1469 | source = "registry+https://github.com/rust-lang/crates.io-index" 1470 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1471 | 1472 | [[package]] 1473 | name = "unicode-normalization" 1474 | version = "0.1.23" 1475 | source = "registry+https://github.com/rust-lang/crates.io-index" 1476 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 1477 | dependencies = [ 1478 | "tinyvec", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "url" 1483 | version = "2.5.0" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 1486 | dependencies = [ 1487 | "form_urlencoded", 1488 | "idna", 1489 | "percent-encoding", 1490 | ] 1491 | 1492 | [[package]] 1493 | name = "utf8parse" 1494 | version = "0.2.2" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1497 | 1498 | [[package]] 1499 | name = "vcpkg" 1500 | version = "0.2.15" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1503 | 1504 | [[package]] 1505 | name = "version-compare" 1506 | version = "0.2.0" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 1509 | 1510 | [[package]] 1511 | name = "want" 1512 | version = "0.3.1" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1515 | dependencies = [ 1516 | "try-lock", 1517 | ] 1518 | 1519 | [[package]] 1520 | name = "wasi" 1521 | version = "0.11.0+wasi-snapshot-preview1" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1524 | 1525 | [[package]] 1526 | name = "wasm-bindgen" 1527 | version = "0.2.92" 1528 | source = "registry+https://github.com/rust-lang/crates.io-index" 1529 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 1530 | dependencies = [ 1531 | "cfg-if", 1532 | "wasm-bindgen-macro", 1533 | ] 1534 | 1535 | [[package]] 1536 | name = "wasm-bindgen-backend" 1537 | version = "0.2.92" 1538 | source = "registry+https://github.com/rust-lang/crates.io-index" 1539 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 1540 | dependencies = [ 1541 | "bumpalo", 1542 | "log", 1543 | "once_cell", 1544 | "proc-macro2", 1545 | "quote", 1546 | "syn", 1547 | "wasm-bindgen-shared", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "wasm-bindgen-futures" 1552 | version = "0.4.42" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 1555 | dependencies = [ 1556 | "cfg-if", 1557 | "js-sys", 1558 | "wasm-bindgen", 1559 | "web-sys", 1560 | ] 1561 | 1562 | [[package]] 1563 | name = "wasm-bindgen-macro" 1564 | version = "0.2.92" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 1567 | dependencies = [ 1568 | "quote", 1569 | "wasm-bindgen-macro-support", 1570 | ] 1571 | 1572 | [[package]] 1573 | name = "wasm-bindgen-macro-support" 1574 | version = "0.2.92" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 1577 | dependencies = [ 1578 | "proc-macro2", 1579 | "quote", 1580 | "syn", 1581 | "wasm-bindgen-backend", 1582 | "wasm-bindgen-shared", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "wasm-bindgen-shared" 1587 | version = "0.2.92" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 1590 | 1591 | [[package]] 1592 | name = "web-sys" 1593 | version = "0.3.69" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 1596 | dependencies = [ 1597 | "js-sys", 1598 | "wasm-bindgen", 1599 | ] 1600 | 1601 | [[package]] 1602 | name = "windows-sys" 1603 | version = "0.48.0" 1604 | source = "registry+https://github.com/rust-lang/crates.io-index" 1605 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1606 | dependencies = [ 1607 | "windows-targets 0.48.5", 1608 | ] 1609 | 1610 | [[package]] 1611 | name = "windows-sys" 1612 | version = "0.52.0" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1615 | dependencies = [ 1616 | "windows-targets 0.52.5", 1617 | ] 1618 | 1619 | [[package]] 1620 | name = "windows-targets" 1621 | version = "0.48.5" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1624 | dependencies = [ 1625 | "windows_aarch64_gnullvm 0.48.5", 1626 | "windows_aarch64_msvc 0.48.5", 1627 | "windows_i686_gnu 0.48.5", 1628 | "windows_i686_msvc 0.48.5", 1629 | "windows_x86_64_gnu 0.48.5", 1630 | "windows_x86_64_gnullvm 0.48.5", 1631 | "windows_x86_64_msvc 0.48.5", 1632 | ] 1633 | 1634 | [[package]] 1635 | name = "windows-targets" 1636 | version = "0.52.5" 1637 | source = "registry+https://github.com/rust-lang/crates.io-index" 1638 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 1639 | dependencies = [ 1640 | "windows_aarch64_gnullvm 0.52.5", 1641 | "windows_aarch64_msvc 0.52.5", 1642 | "windows_i686_gnu 0.52.5", 1643 | "windows_i686_gnullvm", 1644 | "windows_i686_msvc 0.52.5", 1645 | "windows_x86_64_gnu 0.52.5", 1646 | "windows_x86_64_gnullvm 0.52.5", 1647 | "windows_x86_64_msvc 0.52.5", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "windows_aarch64_gnullvm" 1652 | version = "0.48.5" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1655 | 1656 | [[package]] 1657 | name = "windows_aarch64_gnullvm" 1658 | version = "0.52.5" 1659 | source = "registry+https://github.com/rust-lang/crates.io-index" 1660 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 1661 | 1662 | [[package]] 1663 | name = "windows_aarch64_msvc" 1664 | version = "0.48.5" 1665 | source = "registry+https://github.com/rust-lang/crates.io-index" 1666 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1667 | 1668 | [[package]] 1669 | name = "windows_aarch64_msvc" 1670 | version = "0.52.5" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 1673 | 1674 | [[package]] 1675 | name = "windows_i686_gnu" 1676 | version = "0.48.5" 1677 | source = "registry+https://github.com/rust-lang/crates.io-index" 1678 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1679 | 1680 | [[package]] 1681 | name = "windows_i686_gnu" 1682 | version = "0.52.5" 1683 | source = "registry+https://github.com/rust-lang/crates.io-index" 1684 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 1685 | 1686 | [[package]] 1687 | name = "windows_i686_gnullvm" 1688 | version = "0.52.5" 1689 | source = "registry+https://github.com/rust-lang/crates.io-index" 1690 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 1691 | 1692 | [[package]] 1693 | name = "windows_i686_msvc" 1694 | version = "0.48.5" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1697 | 1698 | [[package]] 1699 | name = "windows_i686_msvc" 1700 | version = "0.52.5" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 1703 | 1704 | [[package]] 1705 | name = "windows_x86_64_gnu" 1706 | version = "0.48.5" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1709 | 1710 | [[package]] 1711 | name = "windows_x86_64_gnu" 1712 | version = "0.52.5" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 1715 | 1716 | [[package]] 1717 | name = "windows_x86_64_gnullvm" 1718 | version = "0.48.5" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1721 | 1722 | [[package]] 1723 | name = "windows_x86_64_gnullvm" 1724 | version = "0.52.5" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 1727 | 1728 | [[package]] 1729 | name = "windows_x86_64_msvc" 1730 | version = "0.48.5" 1731 | source = "registry+https://github.com/rust-lang/crates.io-index" 1732 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1733 | 1734 | [[package]] 1735 | name = "windows_x86_64_msvc" 1736 | version = "0.52.5" 1737 | source = "registry+https://github.com/rust-lang/crates.io-index" 1738 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 1739 | 1740 | [[package]] 1741 | name = "winnow" 1742 | version = "0.5.40" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" 1745 | dependencies = [ 1746 | "memchr", 1747 | ] 1748 | 1749 | [[package]] 1750 | name = "winnow" 1751 | version = "0.6.13" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" 1754 | dependencies = [ 1755 | "memchr", 1756 | ] 1757 | 1758 | [[package]] 1759 | name = "winreg" 1760 | version = "0.52.0" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" 1763 | dependencies = [ 1764 | "cfg-if", 1765 | "windows-sys 0.48.0", 1766 | ] 1767 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "flatpak-ext" 3 | version = "0.2.0" 4 | edition = "2021" 5 | authors = ["Ryan Brue "] 6 | readme = "README.md" 7 | homepage = "https://linux-packaging-rs.github.io/flatpak-ext" 8 | repository = "https://github.com/linux-packaging-rs/flatpak-ext" 9 | license = "MIT" 10 | 11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 12 | 13 | [dependencies] 14 | rustix = { version = "0.38.34", features = ["process"] } 15 | libflatpak = "0.5.0" 16 | rand = "0.8.5" 17 | signal-hook = "0.3.17" 18 | log = "0.4.21" 19 | clap = { version = "4.5.4", features = ["derive"] } 20 | reqwest = { version = "0.12.4", features = ["blocking"] } 21 | simple_logger = "5.0.0" 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Ryan Brue 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Flatpak-ext is a binary that allows you to do extra things with flatpak, including: 2 | 3 | > **NOTE (2024/09/16):** This project is currently being revived, which will take some time! I've learned a lot about rust since starting this project and I hope to clean it up a lot and add more features and better documentation. 4 | 5 | * Running flatpaks without installing them **[Implemented]** 6 | * More functionality coming soon! 7 | 8 | ## Examples 9 | 10 | Run Inkscape from flathub without installing it: 11 | 12 | ```sh 13 | flatpak-ext run-temp -a org.inkscape.Inkscape 14 | ``` 15 | 16 | ## Contributing 17 | 18 | There are many ways we can extend and automate flatpak to make it work in new exciting ways. Contributions are absolutely welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for more information! -------------------------------------------------------------------------------- /data/flatpak-ext-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linux-packaging-rs/flatpak-ext/187467da9049b7ad29b0e7b4d70c9d08d8d89fbe/data/flatpak-ext-banner.png -------------------------------------------------------------------------------- /data/flatpak-ext.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Flatpak Ext Run Temp 3 | Exec=flatrun-host run-temp -f %U 4 | Type=Application 5 | Icon=io.github.ryanabx.flatpak-ext 6 | Categories=Utility; 7 | NoDisplay=true 8 | GenericName=Application Launcher 9 | 10 | MimeType=application/vnd.flatpak; -------------------------------------------------------------------------------- /data/flatpak-ext.metainfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | io.github.ryanabx.flatpak-ext 4 | Flatrun 5 | 6 | Ryan Brue 7 | 8 | MIT 9 | MIT 10 | Run flatpaks without installing! 11 | 12 |

Flatpak-ext: Tools to extend flatpak

13 |

Flatpak-ext is a binary that allows you to do extra things with flatpak, including:

14 |
    15 |
  • Running flatpaks without installing them [Implemented]
  • 16 |
  • More functionality coming soon!
  • 17 |
18 |

Examples

19 |

Run Inkscape from flathub without installing it:

20 |
flatpak-ext run-temp -a org.inkscape.Inkscape
21 | 
22 |

Contributing

23 |

There are many ways we can extend and automate flatpak to make it work in new exciting 24 | ways. Contributions are absolutely welcome! See 25 | CONTRIBUTING.md for more information!

26 |
27 | Ryan Brue 28 | ryanbrue@gmail.com 29 | https://ryanabx.github.io/flatpak-ext 30 | io.github.ryanabx.flatrun.desktop 31 | 32 | 33 | 34 | 35 |

Rewrote most of the code as a lib.

36 |

Rewrote the bin to be just a command line tool again.

37 |
38 |
39 | 40 | 41 |

Remove outdated code that added Flathub as a remote to the temporary repo

42 |
43 |
44 | 45 | 46 |

Add required properties to metadata

47 |
48 |
49 | 50 | 51 |

Added screenshots, fixes to metadata

52 |
53 |
54 | 55 | 56 |

First stable release

57 |
58 |
59 |
60 |
-------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | book 2 | -------------------------------------------------------------------------------- /docs/book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | authors = ["Ryan Brue"] 3 | language = "en" 4 | multilingual = false 5 | src = "src" 6 | title = "flatpak-ext: Extended tools for Flatpak!" 7 | -------------------------------------------------------------------------------- /docs/src/SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | - [Introduction](./index.md) 4 | 5 | # Commands 6 | 7 | - [flatpak-ext run](./flatpak-ext-run.md) 8 | -------------------------------------------------------------------------------- /docs/src/flatpak-ext-run.md: -------------------------------------------------------------------------------- 1 | # Flatrun: Run flatpaks without installing them! 2 | 3 | Flatrun is a command-line tool that lets you run a flatpak once, without it being installed to your system or user installation. 4 | 5 | ## Examples: 6 | 7 | Run inkscape from flathub: 8 | 9 | ```shell 10 | flatpak run io.github.ryanabx.flatrun -a org.inkscape.Inkscape 11 | ``` 12 | 13 | Run a locally downloaded flatpak bundle: 14 | 15 | ```shell 16 | flatpak run io.github.ryanabx.flatrun -f ~/Documents/waycheck.flatpak 17 | ``` 18 | 19 | Get help for more commands: 20 | 21 | ```shell 22 | flatpak run io.github.ryanabx.flatrun -h 23 | ``` -------------------------------------------------------------------------------- /docs/src/index.md: -------------------------------------------------------------------------------- 1 | # flatpak-ext 2 | 3 | https://github.com/linux-packaging-rs/flatpak-ext 4 | 5 | > **NOTE (2024/09/16):** This project is currently being revived, which will take some time! I've learned a lot about rust since starting this project and I hope to clean it up a lot and add more features and better documentation. -------------------------------------------------------------------------------- /flatpak-ext.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 155 | -------------------------------------------------------------------------------- /flatpak/generated-sources.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "type": "archive", 4 | "archive-type": "tar-gzip", 5 | "url": "https://static.crates.io/crates/addr2line/addr2line-0.22.0.crate", 6 | "sha256": "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678", 7 | "dest": "cargo/vendor/addr2line-0.22.0" 8 | }, 9 | { 10 | "type": "inline", 11 | "contents": "{\"package\": \"6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678\", \"files\": {}}", 12 | "dest": "cargo/vendor/addr2line-0.22.0", 13 | "dest-filename": ".cargo-checksum.json" 14 | }, 15 | { 16 | "type": "archive", 17 | "archive-type": "tar-gzip", 18 | "url": "https://static.crates.io/crates/adler/adler-1.0.2.crate", 19 | "sha256": "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe", 20 | "dest": "cargo/vendor/adler-1.0.2" 21 | }, 22 | { 23 | "type": "inline", 24 | "contents": "{\"package\": \"f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe\", \"files\": {}}", 25 | "dest": "cargo/vendor/adler-1.0.2", 26 | "dest-filename": ".cargo-checksum.json" 27 | }, 28 | { 29 | "type": "archive", 30 | "archive-type": "tar-gzip", 31 | "url": "https://static.crates.io/crates/anstream/anstream-0.6.14.crate", 32 | "sha256": "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b", 33 | "dest": "cargo/vendor/anstream-0.6.14" 34 | }, 35 | { 36 | "type": "inline", 37 | "contents": "{\"package\": \"418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b\", \"files\": {}}", 38 | "dest": "cargo/vendor/anstream-0.6.14", 39 | "dest-filename": ".cargo-checksum.json" 40 | }, 41 | { 42 | "type": "archive", 43 | "archive-type": "tar-gzip", 44 | "url": "https://static.crates.io/crates/anstyle/anstyle-1.0.7.crate", 45 | "sha256": "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b", 46 | "dest": "cargo/vendor/anstyle-1.0.7" 47 | }, 48 | { 49 | "type": "inline", 50 | "contents": "{\"package\": \"038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b\", \"files\": {}}", 51 | "dest": "cargo/vendor/anstyle-1.0.7", 52 | "dest-filename": ".cargo-checksum.json" 53 | }, 54 | { 55 | "type": "archive", 56 | "archive-type": "tar-gzip", 57 | "url": "https://static.crates.io/crates/anstyle-parse/anstyle-parse-0.2.4.crate", 58 | "sha256": "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4", 59 | "dest": "cargo/vendor/anstyle-parse-0.2.4" 60 | }, 61 | { 62 | "type": "inline", 63 | "contents": "{\"package\": \"c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4\", \"files\": {}}", 64 | "dest": "cargo/vendor/anstyle-parse-0.2.4", 65 | "dest-filename": ".cargo-checksum.json" 66 | }, 67 | { 68 | "type": "archive", 69 | "archive-type": "tar-gzip", 70 | "url": "https://static.crates.io/crates/anstyle-query/anstyle-query-1.1.0.crate", 71 | "sha256": "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391", 72 | "dest": "cargo/vendor/anstyle-query-1.1.0" 73 | }, 74 | { 75 | "type": "inline", 76 | "contents": "{\"package\": \"ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391\", \"files\": {}}", 77 | "dest": "cargo/vendor/anstyle-query-1.1.0", 78 | "dest-filename": ".cargo-checksum.json" 79 | }, 80 | { 81 | "type": "archive", 82 | "archive-type": "tar-gzip", 83 | "url": "https://static.crates.io/crates/anstyle-wincon/anstyle-wincon-3.0.3.crate", 84 | "sha256": "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19", 85 | "dest": "cargo/vendor/anstyle-wincon-3.0.3" 86 | }, 87 | { 88 | "type": "inline", 89 | "contents": "{\"package\": \"61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19\", \"files\": {}}", 90 | "dest": "cargo/vendor/anstyle-wincon-3.0.3", 91 | "dest-filename": ".cargo-checksum.json" 92 | }, 93 | { 94 | "type": "archive", 95 | "archive-type": "tar-gzip", 96 | "url": "https://static.crates.io/crates/atomic-waker/atomic-waker-1.1.2.crate", 97 | "sha256": "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0", 98 | "dest": "cargo/vendor/atomic-waker-1.1.2" 99 | }, 100 | { 101 | "type": "inline", 102 | "contents": "{\"package\": \"1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0\", \"files\": {}}", 103 | "dest": "cargo/vendor/atomic-waker-1.1.2", 104 | "dest-filename": ".cargo-checksum.json" 105 | }, 106 | { 107 | "type": "archive", 108 | "archive-type": "tar-gzip", 109 | "url": "https://static.crates.io/crates/autocfg/autocfg-1.3.0.crate", 110 | "sha256": "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0", 111 | "dest": "cargo/vendor/autocfg-1.3.0" 112 | }, 113 | { 114 | "type": "inline", 115 | "contents": "{\"package\": \"0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0\", \"files\": {}}", 116 | "dest": "cargo/vendor/autocfg-1.3.0", 117 | "dest-filename": ".cargo-checksum.json" 118 | }, 119 | { 120 | "type": "archive", 121 | "archive-type": "tar-gzip", 122 | "url": "https://static.crates.io/crates/backtrace/backtrace-0.3.72.crate", 123 | "sha256": "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11", 124 | "dest": "cargo/vendor/backtrace-0.3.72" 125 | }, 126 | { 127 | "type": "inline", 128 | "contents": "{\"package\": \"17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11\", \"files\": {}}", 129 | "dest": "cargo/vendor/backtrace-0.3.72", 130 | "dest-filename": ".cargo-checksum.json" 131 | }, 132 | { 133 | "type": "archive", 134 | "archive-type": "tar-gzip", 135 | "url": "https://static.crates.io/crates/base64/base64-0.22.1.crate", 136 | "sha256": "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6", 137 | "dest": "cargo/vendor/base64-0.22.1" 138 | }, 139 | { 140 | "type": "inline", 141 | "contents": "{\"package\": \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\", \"files\": {}}", 142 | "dest": "cargo/vendor/base64-0.22.1", 143 | "dest-filename": ".cargo-checksum.json" 144 | }, 145 | { 146 | "type": "archive", 147 | "archive-type": "tar-gzip", 148 | "url": "https://static.crates.io/crates/bitflags/bitflags-1.3.2.crate", 149 | "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a", 150 | "dest": "cargo/vendor/bitflags-1.3.2" 151 | }, 152 | { 153 | "type": "inline", 154 | "contents": "{\"package\": \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\", \"files\": {}}", 155 | "dest": "cargo/vendor/bitflags-1.3.2", 156 | "dest-filename": ".cargo-checksum.json" 157 | }, 158 | { 159 | "type": "archive", 160 | "archive-type": "tar-gzip", 161 | "url": "https://static.crates.io/crates/bitflags/bitflags-2.5.0.crate", 162 | "sha256": "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1", 163 | "dest": "cargo/vendor/bitflags-2.5.0" 164 | }, 165 | { 166 | "type": "inline", 167 | "contents": "{\"package\": \"cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1\", \"files\": {}}", 168 | "dest": "cargo/vendor/bitflags-2.5.0", 169 | "dest-filename": ".cargo-checksum.json" 170 | }, 171 | { 172 | "type": "archive", 173 | "archive-type": "tar-gzip", 174 | "url": "https://static.crates.io/crates/bumpalo/bumpalo-3.16.0.crate", 175 | "sha256": "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c", 176 | "dest": "cargo/vendor/bumpalo-3.16.0" 177 | }, 178 | { 179 | "type": "inline", 180 | "contents": "{\"package\": \"79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c\", \"files\": {}}", 181 | "dest": "cargo/vendor/bumpalo-3.16.0", 182 | "dest-filename": ".cargo-checksum.json" 183 | }, 184 | { 185 | "type": "archive", 186 | "archive-type": "tar-gzip", 187 | "url": "https://static.crates.io/crates/bytes/bytes-1.6.0.crate", 188 | "sha256": "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9", 189 | "dest": "cargo/vendor/bytes-1.6.0" 190 | }, 191 | { 192 | "type": "inline", 193 | "contents": "{\"package\": \"514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9\", \"files\": {}}", 194 | "dest": "cargo/vendor/bytes-1.6.0", 195 | "dest-filename": ".cargo-checksum.json" 196 | }, 197 | { 198 | "type": "archive", 199 | "archive-type": "tar-gzip", 200 | "url": "https://static.crates.io/crates/cc/cc-1.0.99.crate", 201 | "sha256": "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695", 202 | "dest": "cargo/vendor/cc-1.0.99" 203 | }, 204 | { 205 | "type": "inline", 206 | "contents": "{\"package\": \"96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695\", \"files\": {}}", 207 | "dest": "cargo/vendor/cc-1.0.99", 208 | "dest-filename": ".cargo-checksum.json" 209 | }, 210 | { 211 | "type": "archive", 212 | "archive-type": "tar-gzip", 213 | "url": "https://static.crates.io/crates/cfg-expr/cfg-expr-0.15.8.crate", 214 | "sha256": "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02", 215 | "dest": "cargo/vendor/cfg-expr-0.15.8" 216 | }, 217 | { 218 | "type": "inline", 219 | "contents": "{\"package\": \"d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02\", \"files\": {}}", 220 | "dest": "cargo/vendor/cfg-expr-0.15.8", 221 | "dest-filename": ".cargo-checksum.json" 222 | }, 223 | { 224 | "type": "archive", 225 | "archive-type": "tar-gzip", 226 | "url": "https://static.crates.io/crates/cfg-if/cfg-if-1.0.0.crate", 227 | "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd", 228 | "dest": "cargo/vendor/cfg-if-1.0.0" 229 | }, 230 | { 231 | "type": "inline", 232 | "contents": "{\"package\": \"baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd\", \"files\": {}}", 233 | "dest": "cargo/vendor/cfg-if-1.0.0", 234 | "dest-filename": ".cargo-checksum.json" 235 | }, 236 | { 237 | "type": "archive", 238 | "archive-type": "tar-gzip", 239 | "url": "https://static.crates.io/crates/clap/clap-4.5.6.crate", 240 | "sha256": "a9689a29b593160de5bc4aacab7b5d54fb52231de70122626c178e6a368994c7", 241 | "dest": "cargo/vendor/clap-4.5.6" 242 | }, 243 | { 244 | "type": "inline", 245 | "contents": "{\"package\": \"a9689a29b593160de5bc4aacab7b5d54fb52231de70122626c178e6a368994c7\", \"files\": {}}", 246 | "dest": "cargo/vendor/clap-4.5.6", 247 | "dest-filename": ".cargo-checksum.json" 248 | }, 249 | { 250 | "type": "archive", 251 | "archive-type": "tar-gzip", 252 | "url": "https://static.crates.io/crates/clap_builder/clap_builder-4.5.6.crate", 253 | "sha256": "2e5387378c84f6faa26890ebf9f0a92989f8873d4d380467bcd0d8d8620424df", 254 | "dest": "cargo/vendor/clap_builder-4.5.6" 255 | }, 256 | { 257 | "type": "inline", 258 | "contents": "{\"package\": \"2e5387378c84f6faa26890ebf9f0a92989f8873d4d380467bcd0d8d8620424df\", \"files\": {}}", 259 | "dest": "cargo/vendor/clap_builder-4.5.6", 260 | "dest-filename": ".cargo-checksum.json" 261 | }, 262 | { 263 | "type": "archive", 264 | "archive-type": "tar-gzip", 265 | "url": "https://static.crates.io/crates/clap_derive/clap_derive-4.5.5.crate", 266 | "sha256": "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6", 267 | "dest": "cargo/vendor/clap_derive-4.5.5" 268 | }, 269 | { 270 | "type": "inline", 271 | "contents": "{\"package\": \"c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6\", \"files\": {}}", 272 | "dest": "cargo/vendor/clap_derive-4.5.5", 273 | "dest-filename": ".cargo-checksum.json" 274 | }, 275 | { 276 | "type": "archive", 277 | "archive-type": "tar-gzip", 278 | "url": "https://static.crates.io/crates/clap_lex/clap_lex-0.7.1.crate", 279 | "sha256": "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70", 280 | "dest": "cargo/vendor/clap_lex-0.7.1" 281 | }, 282 | { 283 | "type": "inline", 284 | "contents": "{\"package\": \"4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70\", \"files\": {}}", 285 | "dest": "cargo/vendor/clap_lex-0.7.1", 286 | "dest-filename": ".cargo-checksum.json" 287 | }, 288 | { 289 | "type": "archive", 290 | "archive-type": "tar-gzip", 291 | "url": "https://static.crates.io/crates/colorchoice/colorchoice-1.0.1.crate", 292 | "sha256": "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422", 293 | "dest": "cargo/vendor/colorchoice-1.0.1" 294 | }, 295 | { 296 | "type": "inline", 297 | "contents": "{\"package\": \"0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422\", \"files\": {}}", 298 | "dest": "cargo/vendor/colorchoice-1.0.1", 299 | "dest-filename": ".cargo-checksum.json" 300 | }, 301 | { 302 | "type": "archive", 303 | "archive-type": "tar-gzip", 304 | "url": "https://static.crates.io/crates/colored/colored-2.1.0.crate", 305 | "sha256": "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8", 306 | "dest": "cargo/vendor/colored-2.1.0" 307 | }, 308 | { 309 | "type": "inline", 310 | "contents": "{\"package\": \"cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8\", \"files\": {}}", 311 | "dest": "cargo/vendor/colored-2.1.0", 312 | "dest-filename": ".cargo-checksum.json" 313 | }, 314 | { 315 | "type": "archive", 316 | "archive-type": "tar-gzip", 317 | "url": "https://static.crates.io/crates/core-foundation/core-foundation-0.9.4.crate", 318 | "sha256": "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f", 319 | "dest": "cargo/vendor/core-foundation-0.9.4" 320 | }, 321 | { 322 | "type": "inline", 323 | "contents": "{\"package\": \"91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f\", \"files\": {}}", 324 | "dest": "cargo/vendor/core-foundation-0.9.4", 325 | "dest-filename": ".cargo-checksum.json" 326 | }, 327 | { 328 | "type": "archive", 329 | "archive-type": "tar-gzip", 330 | "url": "https://static.crates.io/crates/core-foundation-sys/core-foundation-sys-0.8.6.crate", 331 | "sha256": "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f", 332 | "dest": "cargo/vendor/core-foundation-sys-0.8.6" 333 | }, 334 | { 335 | "type": "inline", 336 | "contents": "{\"package\": \"06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f\", \"files\": {}}", 337 | "dest": "cargo/vendor/core-foundation-sys-0.8.6", 338 | "dest-filename": ".cargo-checksum.json" 339 | }, 340 | { 341 | "type": "archive", 342 | "archive-type": "tar-gzip", 343 | "url": "https://static.crates.io/crates/deranged/deranged-0.3.11.crate", 344 | "sha256": "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4", 345 | "dest": "cargo/vendor/deranged-0.3.11" 346 | }, 347 | { 348 | "type": "inline", 349 | "contents": "{\"package\": \"b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4\", \"files\": {}}", 350 | "dest": "cargo/vendor/deranged-0.3.11", 351 | "dest-filename": ".cargo-checksum.json" 352 | }, 353 | { 354 | "type": "archive", 355 | "archive-type": "tar-gzip", 356 | "url": "https://static.crates.io/crates/encoding_rs/encoding_rs-0.8.34.crate", 357 | "sha256": "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59", 358 | "dest": "cargo/vendor/encoding_rs-0.8.34" 359 | }, 360 | { 361 | "type": "inline", 362 | "contents": "{\"package\": \"b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59\", \"files\": {}}", 363 | "dest": "cargo/vendor/encoding_rs-0.8.34", 364 | "dest-filename": ".cargo-checksum.json" 365 | }, 366 | { 367 | "type": "archive", 368 | "archive-type": "tar-gzip", 369 | "url": "https://static.crates.io/crates/equivalent/equivalent-1.0.1.crate", 370 | "sha256": "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5", 371 | "dest": "cargo/vendor/equivalent-1.0.1" 372 | }, 373 | { 374 | "type": "inline", 375 | "contents": "{\"package\": \"5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5\", \"files\": {}}", 376 | "dest": "cargo/vendor/equivalent-1.0.1", 377 | "dest-filename": ".cargo-checksum.json" 378 | }, 379 | { 380 | "type": "archive", 381 | "archive-type": "tar-gzip", 382 | "url": "https://static.crates.io/crates/errno/errno-0.3.9.crate", 383 | "sha256": "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba", 384 | "dest": "cargo/vendor/errno-0.3.9" 385 | }, 386 | { 387 | "type": "inline", 388 | "contents": "{\"package\": \"534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba\", \"files\": {}}", 389 | "dest": "cargo/vendor/errno-0.3.9", 390 | "dest-filename": ".cargo-checksum.json" 391 | }, 392 | { 393 | "type": "archive", 394 | "archive-type": "tar-gzip", 395 | "url": "https://static.crates.io/crates/fastrand/fastrand-2.1.0.crate", 396 | "sha256": "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a", 397 | "dest": "cargo/vendor/fastrand-2.1.0" 398 | }, 399 | { 400 | "type": "inline", 401 | "contents": "{\"package\": \"9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a\", \"files\": {}}", 402 | "dest": "cargo/vendor/fastrand-2.1.0", 403 | "dest-filename": ".cargo-checksum.json" 404 | }, 405 | { 406 | "type": "archive", 407 | "archive-type": "tar-gzip", 408 | "url": "https://static.crates.io/crates/fnv/fnv-1.0.7.crate", 409 | "sha256": "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1", 410 | "dest": "cargo/vendor/fnv-1.0.7" 411 | }, 412 | { 413 | "type": "inline", 414 | "contents": "{\"package\": \"3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1\", \"files\": {}}", 415 | "dest": "cargo/vendor/fnv-1.0.7", 416 | "dest-filename": ".cargo-checksum.json" 417 | }, 418 | { 419 | "type": "archive", 420 | "archive-type": "tar-gzip", 421 | "url": "https://static.crates.io/crates/foreign-types/foreign-types-0.3.2.crate", 422 | "sha256": "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1", 423 | "dest": "cargo/vendor/foreign-types-0.3.2" 424 | }, 425 | { 426 | "type": "inline", 427 | "contents": "{\"package\": \"f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1\", \"files\": {}}", 428 | "dest": "cargo/vendor/foreign-types-0.3.2", 429 | "dest-filename": ".cargo-checksum.json" 430 | }, 431 | { 432 | "type": "archive", 433 | "archive-type": "tar-gzip", 434 | "url": "https://static.crates.io/crates/foreign-types-shared/foreign-types-shared-0.1.1.crate", 435 | "sha256": "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b", 436 | "dest": "cargo/vendor/foreign-types-shared-0.1.1" 437 | }, 438 | { 439 | "type": "inline", 440 | "contents": "{\"package\": \"00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b\", \"files\": {}}", 441 | "dest": "cargo/vendor/foreign-types-shared-0.1.1", 442 | "dest-filename": ".cargo-checksum.json" 443 | }, 444 | { 445 | "type": "archive", 446 | "archive-type": "tar-gzip", 447 | "url": "https://static.crates.io/crates/form_urlencoded/form_urlencoded-1.2.1.crate", 448 | "sha256": "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456", 449 | "dest": "cargo/vendor/form_urlencoded-1.2.1" 450 | }, 451 | { 452 | "type": "inline", 453 | "contents": "{\"package\": \"e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456\", \"files\": {}}", 454 | "dest": "cargo/vendor/form_urlencoded-1.2.1", 455 | "dest-filename": ".cargo-checksum.json" 456 | }, 457 | { 458 | "type": "archive", 459 | "archive-type": "tar-gzip", 460 | "url": "https://static.crates.io/crates/futures-channel/futures-channel-0.3.30.crate", 461 | "sha256": "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78", 462 | "dest": "cargo/vendor/futures-channel-0.3.30" 463 | }, 464 | { 465 | "type": "inline", 466 | "contents": "{\"package\": \"eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78\", \"files\": {}}", 467 | "dest": "cargo/vendor/futures-channel-0.3.30", 468 | "dest-filename": ".cargo-checksum.json" 469 | }, 470 | { 471 | "type": "archive", 472 | "archive-type": "tar-gzip", 473 | "url": "https://static.crates.io/crates/futures-core/futures-core-0.3.30.crate", 474 | "sha256": "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d", 475 | "dest": "cargo/vendor/futures-core-0.3.30" 476 | }, 477 | { 478 | "type": "inline", 479 | "contents": "{\"package\": \"dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d\", \"files\": {}}", 480 | "dest": "cargo/vendor/futures-core-0.3.30", 481 | "dest-filename": ".cargo-checksum.json" 482 | }, 483 | { 484 | "type": "archive", 485 | "archive-type": "tar-gzip", 486 | "url": "https://static.crates.io/crates/futures-executor/futures-executor-0.3.30.crate", 487 | "sha256": "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d", 488 | "dest": "cargo/vendor/futures-executor-0.3.30" 489 | }, 490 | { 491 | "type": "inline", 492 | "contents": "{\"package\": \"a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d\", \"files\": {}}", 493 | "dest": "cargo/vendor/futures-executor-0.3.30", 494 | "dest-filename": ".cargo-checksum.json" 495 | }, 496 | { 497 | "type": "archive", 498 | "archive-type": "tar-gzip", 499 | "url": "https://static.crates.io/crates/futures-io/futures-io-0.3.30.crate", 500 | "sha256": "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1", 501 | "dest": "cargo/vendor/futures-io-0.3.30" 502 | }, 503 | { 504 | "type": "inline", 505 | "contents": "{\"package\": \"a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1\", \"files\": {}}", 506 | "dest": "cargo/vendor/futures-io-0.3.30", 507 | "dest-filename": ".cargo-checksum.json" 508 | }, 509 | { 510 | "type": "archive", 511 | "archive-type": "tar-gzip", 512 | "url": "https://static.crates.io/crates/futures-macro/futures-macro-0.3.30.crate", 513 | "sha256": "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac", 514 | "dest": "cargo/vendor/futures-macro-0.3.30" 515 | }, 516 | { 517 | "type": "inline", 518 | "contents": "{\"package\": \"87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac\", \"files\": {}}", 519 | "dest": "cargo/vendor/futures-macro-0.3.30", 520 | "dest-filename": ".cargo-checksum.json" 521 | }, 522 | { 523 | "type": "archive", 524 | "archive-type": "tar-gzip", 525 | "url": "https://static.crates.io/crates/futures-sink/futures-sink-0.3.30.crate", 526 | "sha256": "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5", 527 | "dest": "cargo/vendor/futures-sink-0.3.30" 528 | }, 529 | { 530 | "type": "inline", 531 | "contents": "{\"package\": \"9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5\", \"files\": {}}", 532 | "dest": "cargo/vendor/futures-sink-0.3.30", 533 | "dest-filename": ".cargo-checksum.json" 534 | }, 535 | { 536 | "type": "archive", 537 | "archive-type": "tar-gzip", 538 | "url": "https://static.crates.io/crates/futures-task/futures-task-0.3.30.crate", 539 | "sha256": "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004", 540 | "dest": "cargo/vendor/futures-task-0.3.30" 541 | }, 542 | { 543 | "type": "inline", 544 | "contents": "{\"package\": \"38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004\", \"files\": {}}", 545 | "dest": "cargo/vendor/futures-task-0.3.30", 546 | "dest-filename": ".cargo-checksum.json" 547 | }, 548 | { 549 | "type": "archive", 550 | "archive-type": "tar-gzip", 551 | "url": "https://static.crates.io/crates/futures-util/futures-util-0.3.30.crate", 552 | "sha256": "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48", 553 | "dest": "cargo/vendor/futures-util-0.3.30" 554 | }, 555 | { 556 | "type": "inline", 557 | "contents": "{\"package\": \"3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48\", \"files\": {}}", 558 | "dest": "cargo/vendor/futures-util-0.3.30", 559 | "dest-filename": ".cargo-checksum.json" 560 | }, 561 | { 562 | "type": "archive", 563 | "archive-type": "tar-gzip", 564 | "url": "https://static.crates.io/crates/getrandom/getrandom-0.2.15.crate", 565 | "sha256": "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7", 566 | "dest": "cargo/vendor/getrandom-0.2.15" 567 | }, 568 | { 569 | "type": "inline", 570 | "contents": "{\"package\": \"c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7\", \"files\": {}}", 571 | "dest": "cargo/vendor/getrandom-0.2.15", 572 | "dest-filename": ".cargo-checksum.json" 573 | }, 574 | { 575 | "type": "archive", 576 | "archive-type": "tar-gzip", 577 | "url": "https://static.crates.io/crates/gimli/gimli-0.29.0.crate", 578 | "sha256": "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd", 579 | "dest": "cargo/vendor/gimli-0.29.0" 580 | }, 581 | { 582 | "type": "inline", 583 | "contents": "{\"package\": \"40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd\", \"files\": {}}", 584 | "dest": "cargo/vendor/gimli-0.29.0", 585 | "dest-filename": ".cargo-checksum.json" 586 | }, 587 | { 588 | "type": "archive", 589 | "archive-type": "tar-gzip", 590 | "url": "https://static.crates.io/crates/gio/gio-0.19.5.crate", 591 | "sha256": "be548be810e45dd31d3bbb89c6210980bb7af9bca3ea1292b5f16b75f8e394a7", 592 | "dest": "cargo/vendor/gio-0.19.5" 593 | }, 594 | { 595 | "type": "inline", 596 | "contents": "{\"package\": \"be548be810e45dd31d3bbb89c6210980bb7af9bca3ea1292b5f16b75f8e394a7\", \"files\": {}}", 597 | "dest": "cargo/vendor/gio-0.19.5", 598 | "dest-filename": ".cargo-checksum.json" 599 | }, 600 | { 601 | "type": "archive", 602 | "archive-type": "tar-gzip", 603 | "url": "https://static.crates.io/crates/gio-sys/gio-sys-0.19.5.crate", 604 | "sha256": "d4bdbef451b0f0361e7f762987cc6bebd5facab1d535e85a3cf1115dfb08db40", 605 | "dest": "cargo/vendor/gio-sys-0.19.5" 606 | }, 607 | { 608 | "type": "inline", 609 | "contents": "{\"package\": \"d4bdbef451b0f0361e7f762987cc6bebd5facab1d535e85a3cf1115dfb08db40\", \"files\": {}}", 610 | "dest": "cargo/vendor/gio-sys-0.19.5", 611 | "dest-filename": ".cargo-checksum.json" 612 | }, 613 | { 614 | "type": "archive", 615 | "archive-type": "tar-gzip", 616 | "url": "https://static.crates.io/crates/glib/glib-0.19.7.crate", 617 | "sha256": "e52355166df21c7ed16b6a01f615669c7911ed74e27ef60eba339c0d2da12490", 618 | "dest": "cargo/vendor/glib-0.19.7" 619 | }, 620 | { 621 | "type": "inline", 622 | "contents": "{\"package\": \"e52355166df21c7ed16b6a01f615669c7911ed74e27ef60eba339c0d2da12490\", \"files\": {}}", 623 | "dest": "cargo/vendor/glib-0.19.7", 624 | "dest-filename": ".cargo-checksum.json" 625 | }, 626 | { 627 | "type": "archive", 628 | "archive-type": "tar-gzip", 629 | "url": "https://static.crates.io/crates/glib-macros/glib-macros-0.19.7.crate", 630 | "sha256": "70025dbfa1275cf7d0531c3317ba6270dae15d87e63342229d638246ff45202e", 631 | "dest": "cargo/vendor/glib-macros-0.19.7" 632 | }, 633 | { 634 | "type": "inline", 635 | "contents": "{\"package\": \"70025dbfa1275cf7d0531c3317ba6270dae15d87e63342229d638246ff45202e\", \"files\": {}}", 636 | "dest": "cargo/vendor/glib-macros-0.19.7", 637 | "dest-filename": ".cargo-checksum.json" 638 | }, 639 | { 640 | "type": "archive", 641 | "archive-type": "tar-gzip", 642 | "url": "https://static.crates.io/crates/glib-sys/glib-sys-0.19.5.crate", 643 | "sha256": "767d23ead9bbdfcbb1c2242c155c8128a7d13dde7bf69c176f809546135e2282", 644 | "dest": "cargo/vendor/glib-sys-0.19.5" 645 | }, 646 | { 647 | "type": "inline", 648 | "contents": "{\"package\": \"767d23ead9bbdfcbb1c2242c155c8128a7d13dde7bf69c176f809546135e2282\", \"files\": {}}", 649 | "dest": "cargo/vendor/glib-sys-0.19.5", 650 | "dest-filename": ".cargo-checksum.json" 651 | }, 652 | { 653 | "type": "archive", 654 | "archive-type": "tar-gzip", 655 | "url": "https://static.crates.io/crates/gobject-sys/gobject-sys-0.19.5.crate", 656 | "sha256": "c3787b0bfacca12bb25f8f822b0dbee9f7e4a86e6469a29976d332d2c14c945b", 657 | "dest": "cargo/vendor/gobject-sys-0.19.5" 658 | }, 659 | { 660 | "type": "inline", 661 | "contents": "{\"package\": \"c3787b0bfacca12bb25f8f822b0dbee9f7e4a86e6469a29976d332d2c14c945b\", \"files\": {}}", 662 | "dest": "cargo/vendor/gobject-sys-0.19.5", 663 | "dest-filename": ".cargo-checksum.json" 664 | }, 665 | { 666 | "type": "archive", 667 | "archive-type": "tar-gzip", 668 | "url": "https://static.crates.io/crates/h2/h2-0.4.5.crate", 669 | "sha256": "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab", 670 | "dest": "cargo/vendor/h2-0.4.5" 671 | }, 672 | { 673 | "type": "inline", 674 | "contents": "{\"package\": \"fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab\", \"files\": {}}", 675 | "dest": "cargo/vendor/h2-0.4.5", 676 | "dest-filename": ".cargo-checksum.json" 677 | }, 678 | { 679 | "type": "archive", 680 | "archive-type": "tar-gzip", 681 | "url": "https://static.crates.io/crates/hashbrown/hashbrown-0.14.5.crate", 682 | "sha256": "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1", 683 | "dest": "cargo/vendor/hashbrown-0.14.5" 684 | }, 685 | { 686 | "type": "inline", 687 | "contents": "{\"package\": \"e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1\", \"files\": {}}", 688 | "dest": "cargo/vendor/hashbrown-0.14.5", 689 | "dest-filename": ".cargo-checksum.json" 690 | }, 691 | { 692 | "type": "archive", 693 | "archive-type": "tar-gzip", 694 | "url": "https://static.crates.io/crates/heck/heck-0.5.0.crate", 695 | "sha256": "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea", 696 | "dest": "cargo/vendor/heck-0.5.0" 697 | }, 698 | { 699 | "type": "inline", 700 | "contents": "{\"package\": \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\", \"files\": {}}", 701 | "dest": "cargo/vendor/heck-0.5.0", 702 | "dest-filename": ".cargo-checksum.json" 703 | }, 704 | { 705 | "type": "archive", 706 | "archive-type": "tar-gzip", 707 | "url": "https://static.crates.io/crates/hermit-abi/hermit-abi-0.3.9.crate", 708 | "sha256": "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024", 709 | "dest": "cargo/vendor/hermit-abi-0.3.9" 710 | }, 711 | { 712 | "type": "inline", 713 | "contents": "{\"package\": \"d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024\", \"files\": {}}", 714 | "dest": "cargo/vendor/hermit-abi-0.3.9", 715 | "dest-filename": ".cargo-checksum.json" 716 | }, 717 | { 718 | "type": "archive", 719 | "archive-type": "tar-gzip", 720 | "url": "https://static.crates.io/crates/http/http-1.1.0.crate", 721 | "sha256": "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258", 722 | "dest": "cargo/vendor/http-1.1.0" 723 | }, 724 | { 725 | "type": "inline", 726 | "contents": "{\"package\": \"21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258\", \"files\": {}}", 727 | "dest": "cargo/vendor/http-1.1.0", 728 | "dest-filename": ".cargo-checksum.json" 729 | }, 730 | { 731 | "type": "archive", 732 | "archive-type": "tar-gzip", 733 | "url": "https://static.crates.io/crates/http-body/http-body-1.0.0.crate", 734 | "sha256": "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643", 735 | "dest": "cargo/vendor/http-body-1.0.0" 736 | }, 737 | { 738 | "type": "inline", 739 | "contents": "{\"package\": \"1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643\", \"files\": {}}", 740 | "dest": "cargo/vendor/http-body-1.0.0", 741 | "dest-filename": ".cargo-checksum.json" 742 | }, 743 | { 744 | "type": "archive", 745 | "archive-type": "tar-gzip", 746 | "url": "https://static.crates.io/crates/http-body-util/http-body-util-0.1.1.crate", 747 | "sha256": "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d", 748 | "dest": "cargo/vendor/http-body-util-0.1.1" 749 | }, 750 | { 751 | "type": "inline", 752 | "contents": "{\"package\": \"0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d\", \"files\": {}}", 753 | "dest": "cargo/vendor/http-body-util-0.1.1", 754 | "dest-filename": ".cargo-checksum.json" 755 | }, 756 | { 757 | "type": "archive", 758 | "archive-type": "tar-gzip", 759 | "url": "https://static.crates.io/crates/httparse/httparse-1.8.0.crate", 760 | "sha256": "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904", 761 | "dest": "cargo/vendor/httparse-1.8.0" 762 | }, 763 | { 764 | "type": "inline", 765 | "contents": "{\"package\": \"d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904\", \"files\": {}}", 766 | "dest": "cargo/vendor/httparse-1.8.0", 767 | "dest-filename": ".cargo-checksum.json" 768 | }, 769 | { 770 | "type": "archive", 771 | "archive-type": "tar-gzip", 772 | "url": "https://static.crates.io/crates/hyper/hyper-1.3.1.crate", 773 | "sha256": "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d", 774 | "dest": "cargo/vendor/hyper-1.3.1" 775 | }, 776 | { 777 | "type": "inline", 778 | "contents": "{\"package\": \"fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d\", \"files\": {}}", 779 | "dest": "cargo/vendor/hyper-1.3.1", 780 | "dest-filename": ".cargo-checksum.json" 781 | }, 782 | { 783 | "type": "archive", 784 | "archive-type": "tar-gzip", 785 | "url": "https://static.crates.io/crates/hyper-tls/hyper-tls-0.6.0.crate", 786 | "sha256": "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0", 787 | "dest": "cargo/vendor/hyper-tls-0.6.0" 788 | }, 789 | { 790 | "type": "inline", 791 | "contents": "{\"package\": \"70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0\", \"files\": {}}", 792 | "dest": "cargo/vendor/hyper-tls-0.6.0", 793 | "dest-filename": ".cargo-checksum.json" 794 | }, 795 | { 796 | "type": "archive", 797 | "archive-type": "tar-gzip", 798 | "url": "https://static.crates.io/crates/hyper-util/hyper-util-0.1.5.crate", 799 | "sha256": "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56", 800 | "dest": "cargo/vendor/hyper-util-0.1.5" 801 | }, 802 | { 803 | "type": "inline", 804 | "contents": "{\"package\": \"7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56\", \"files\": {}}", 805 | "dest": "cargo/vendor/hyper-util-0.1.5", 806 | "dest-filename": ".cargo-checksum.json" 807 | }, 808 | { 809 | "type": "archive", 810 | "archive-type": "tar-gzip", 811 | "url": "https://static.crates.io/crates/idna/idna-0.5.0.crate", 812 | "sha256": "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6", 813 | "dest": "cargo/vendor/idna-0.5.0" 814 | }, 815 | { 816 | "type": "inline", 817 | "contents": "{\"package\": \"634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6\", \"files\": {}}", 818 | "dest": "cargo/vendor/idna-0.5.0", 819 | "dest-filename": ".cargo-checksum.json" 820 | }, 821 | { 822 | "type": "archive", 823 | "archive-type": "tar-gzip", 824 | "url": "https://static.crates.io/crates/indexmap/indexmap-2.2.6.crate", 825 | "sha256": "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26", 826 | "dest": "cargo/vendor/indexmap-2.2.6" 827 | }, 828 | { 829 | "type": "inline", 830 | "contents": "{\"package\": \"168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26\", \"files\": {}}", 831 | "dest": "cargo/vendor/indexmap-2.2.6", 832 | "dest-filename": ".cargo-checksum.json" 833 | }, 834 | { 835 | "type": "archive", 836 | "archive-type": "tar-gzip", 837 | "url": "https://static.crates.io/crates/ipnet/ipnet-2.9.0.crate", 838 | "sha256": "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3", 839 | "dest": "cargo/vendor/ipnet-2.9.0" 840 | }, 841 | { 842 | "type": "inline", 843 | "contents": "{\"package\": \"8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3\", \"files\": {}}", 844 | "dest": "cargo/vendor/ipnet-2.9.0", 845 | "dest-filename": ".cargo-checksum.json" 846 | }, 847 | { 848 | "type": "archive", 849 | "archive-type": "tar-gzip", 850 | "url": "https://static.crates.io/crates/is_terminal_polyfill/is_terminal_polyfill-1.70.0.crate", 851 | "sha256": "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800", 852 | "dest": "cargo/vendor/is_terminal_polyfill-1.70.0" 853 | }, 854 | { 855 | "type": "inline", 856 | "contents": "{\"package\": \"f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800\", \"files\": {}}", 857 | "dest": "cargo/vendor/is_terminal_polyfill-1.70.0", 858 | "dest-filename": ".cargo-checksum.json" 859 | }, 860 | { 861 | "type": "archive", 862 | "archive-type": "tar-gzip", 863 | "url": "https://static.crates.io/crates/itoa/itoa-1.0.11.crate", 864 | "sha256": "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b", 865 | "dest": "cargo/vendor/itoa-1.0.11" 866 | }, 867 | { 868 | "type": "inline", 869 | "contents": "{\"package\": \"49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b\", \"files\": {}}", 870 | "dest": "cargo/vendor/itoa-1.0.11", 871 | "dest-filename": ".cargo-checksum.json" 872 | }, 873 | { 874 | "type": "archive", 875 | "archive-type": "tar-gzip", 876 | "url": "https://static.crates.io/crates/js-sys/js-sys-0.3.69.crate", 877 | "sha256": "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d", 878 | "dest": "cargo/vendor/js-sys-0.3.69" 879 | }, 880 | { 881 | "type": "inline", 882 | "contents": "{\"package\": \"29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d\", \"files\": {}}", 883 | "dest": "cargo/vendor/js-sys-0.3.69", 884 | "dest-filename": ".cargo-checksum.json" 885 | }, 886 | { 887 | "type": "archive", 888 | "archive-type": "tar-gzip", 889 | "url": "https://static.crates.io/crates/lazy_static/lazy_static-1.4.0.crate", 890 | "sha256": "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646", 891 | "dest": "cargo/vendor/lazy_static-1.4.0" 892 | }, 893 | { 894 | "type": "inline", 895 | "contents": "{\"package\": \"e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646\", \"files\": {}}", 896 | "dest": "cargo/vendor/lazy_static-1.4.0", 897 | "dest-filename": ".cargo-checksum.json" 898 | }, 899 | { 900 | "type": "archive", 901 | "archive-type": "tar-gzip", 902 | "url": "https://static.crates.io/crates/libc/libc-0.2.155.crate", 903 | "sha256": "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c", 904 | "dest": "cargo/vendor/libc-0.2.155" 905 | }, 906 | { 907 | "type": "inline", 908 | "contents": "{\"package\": \"97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c\", \"files\": {}}", 909 | "dest": "cargo/vendor/libc-0.2.155", 910 | "dest-filename": ".cargo-checksum.json" 911 | }, 912 | { 913 | "type": "archive", 914 | "archive-type": "tar-gzip", 915 | "url": "https://static.crates.io/crates/libflatpak/libflatpak-0.5.0.crate", 916 | "sha256": "2a0466e5bc49c8a9d03c1daf924833474640bf3b334b01efde4234e77efe9780", 917 | "dest": "cargo/vendor/libflatpak-0.5.0" 918 | }, 919 | { 920 | "type": "inline", 921 | "contents": "{\"package\": \"2a0466e5bc49c8a9d03c1daf924833474640bf3b334b01efde4234e77efe9780\", \"files\": {}}", 922 | "dest": "cargo/vendor/libflatpak-0.5.0", 923 | "dest-filename": ".cargo-checksum.json" 924 | }, 925 | { 926 | "type": "archive", 927 | "archive-type": "tar-gzip", 928 | "url": "https://static.crates.io/crates/libflatpak-sys/libflatpak-sys-0.5.0.crate", 929 | "sha256": "0022c1b20fa3959a52299cd531c6afc9433182f612b1210f18776a7857a58f2b", 930 | "dest": "cargo/vendor/libflatpak-sys-0.5.0" 931 | }, 932 | { 933 | "type": "inline", 934 | "contents": "{\"package\": \"0022c1b20fa3959a52299cd531c6afc9433182f612b1210f18776a7857a58f2b\", \"files\": {}}", 935 | "dest": "cargo/vendor/libflatpak-sys-0.5.0", 936 | "dest-filename": ".cargo-checksum.json" 937 | }, 938 | { 939 | "type": "archive", 940 | "archive-type": "tar-gzip", 941 | "url": "https://static.crates.io/crates/linux-raw-sys/linux-raw-sys-0.4.14.crate", 942 | "sha256": "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89", 943 | "dest": "cargo/vendor/linux-raw-sys-0.4.14" 944 | }, 945 | { 946 | "type": "inline", 947 | "contents": "{\"package\": \"78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89\", \"files\": {}}", 948 | "dest": "cargo/vendor/linux-raw-sys-0.4.14", 949 | "dest-filename": ".cargo-checksum.json" 950 | }, 951 | { 952 | "type": "archive", 953 | "archive-type": "tar-gzip", 954 | "url": "https://static.crates.io/crates/log/log-0.4.21.crate", 955 | "sha256": "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c", 956 | "dest": "cargo/vendor/log-0.4.21" 957 | }, 958 | { 959 | "type": "inline", 960 | "contents": "{\"package\": \"90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c\", \"files\": {}}", 961 | "dest": "cargo/vendor/log-0.4.21", 962 | "dest-filename": ".cargo-checksum.json" 963 | }, 964 | { 965 | "type": "archive", 966 | "archive-type": "tar-gzip", 967 | "url": "https://static.crates.io/crates/memchr/memchr-2.7.2.crate", 968 | "sha256": "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d", 969 | "dest": "cargo/vendor/memchr-2.7.2" 970 | }, 971 | { 972 | "type": "inline", 973 | "contents": "{\"package\": \"6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d\", \"files\": {}}", 974 | "dest": "cargo/vendor/memchr-2.7.2", 975 | "dest-filename": ".cargo-checksum.json" 976 | }, 977 | { 978 | "type": "archive", 979 | "archive-type": "tar-gzip", 980 | "url": "https://static.crates.io/crates/mime/mime-0.3.17.crate", 981 | "sha256": "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a", 982 | "dest": "cargo/vendor/mime-0.3.17" 983 | }, 984 | { 985 | "type": "inline", 986 | "contents": "{\"package\": \"6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a\", \"files\": {}}", 987 | "dest": "cargo/vendor/mime-0.3.17", 988 | "dest-filename": ".cargo-checksum.json" 989 | }, 990 | { 991 | "type": "archive", 992 | "archive-type": "tar-gzip", 993 | "url": "https://static.crates.io/crates/miniz_oxide/miniz_oxide-0.7.3.crate", 994 | "sha256": "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae", 995 | "dest": "cargo/vendor/miniz_oxide-0.7.3" 996 | }, 997 | { 998 | "type": "inline", 999 | "contents": "{\"package\": \"87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae\", \"files\": {}}", 1000 | "dest": "cargo/vendor/miniz_oxide-0.7.3", 1001 | "dest-filename": ".cargo-checksum.json" 1002 | }, 1003 | { 1004 | "type": "archive", 1005 | "archive-type": "tar-gzip", 1006 | "url": "https://static.crates.io/crates/mio/mio-0.8.11.crate", 1007 | "sha256": "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c", 1008 | "dest": "cargo/vendor/mio-0.8.11" 1009 | }, 1010 | { 1011 | "type": "inline", 1012 | "contents": "{\"package\": \"a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c\", \"files\": {}}", 1013 | "dest": "cargo/vendor/mio-0.8.11", 1014 | "dest-filename": ".cargo-checksum.json" 1015 | }, 1016 | { 1017 | "type": "archive", 1018 | "archive-type": "tar-gzip", 1019 | "url": "https://static.crates.io/crates/native-tls/native-tls-0.2.12.crate", 1020 | "sha256": "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466", 1021 | "dest": "cargo/vendor/native-tls-0.2.12" 1022 | }, 1023 | { 1024 | "type": "inline", 1025 | "contents": "{\"package\": \"a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466\", \"files\": {}}", 1026 | "dest": "cargo/vendor/native-tls-0.2.12", 1027 | "dest-filename": ".cargo-checksum.json" 1028 | }, 1029 | { 1030 | "type": "archive", 1031 | "archive-type": "tar-gzip", 1032 | "url": "https://static.crates.io/crates/num-conv/num-conv-0.1.0.crate", 1033 | "sha256": "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9", 1034 | "dest": "cargo/vendor/num-conv-0.1.0" 1035 | }, 1036 | { 1037 | "type": "inline", 1038 | "contents": "{\"package\": \"51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9\", \"files\": {}}", 1039 | "dest": "cargo/vendor/num-conv-0.1.0", 1040 | "dest-filename": ".cargo-checksum.json" 1041 | }, 1042 | { 1043 | "type": "archive", 1044 | "archive-type": "tar-gzip", 1045 | "url": "https://static.crates.io/crates/num_cpus/num_cpus-1.16.0.crate", 1046 | "sha256": "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43", 1047 | "dest": "cargo/vendor/num_cpus-1.16.0" 1048 | }, 1049 | { 1050 | "type": "inline", 1051 | "contents": "{\"package\": \"4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43\", \"files\": {}}", 1052 | "dest": "cargo/vendor/num_cpus-1.16.0", 1053 | "dest-filename": ".cargo-checksum.json" 1054 | }, 1055 | { 1056 | "type": "archive", 1057 | "archive-type": "tar-gzip", 1058 | "url": "https://static.crates.io/crates/num_threads/num_threads-0.1.7.crate", 1059 | "sha256": "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9", 1060 | "dest": "cargo/vendor/num_threads-0.1.7" 1061 | }, 1062 | { 1063 | "type": "inline", 1064 | "contents": "{\"package\": \"5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9\", \"files\": {}}", 1065 | "dest": "cargo/vendor/num_threads-0.1.7", 1066 | "dest-filename": ".cargo-checksum.json" 1067 | }, 1068 | { 1069 | "type": "archive", 1070 | "archive-type": "tar-gzip", 1071 | "url": "https://static.crates.io/crates/object/object-0.35.0.crate", 1072 | "sha256": "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e", 1073 | "dest": "cargo/vendor/object-0.35.0" 1074 | }, 1075 | { 1076 | "type": "inline", 1077 | "contents": "{\"package\": \"b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e\", \"files\": {}}", 1078 | "dest": "cargo/vendor/object-0.35.0", 1079 | "dest-filename": ".cargo-checksum.json" 1080 | }, 1081 | { 1082 | "type": "archive", 1083 | "archive-type": "tar-gzip", 1084 | "url": "https://static.crates.io/crates/once_cell/once_cell-1.19.0.crate", 1085 | "sha256": "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92", 1086 | "dest": "cargo/vendor/once_cell-1.19.0" 1087 | }, 1088 | { 1089 | "type": "inline", 1090 | "contents": "{\"package\": \"3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92\", \"files\": {}}", 1091 | "dest": "cargo/vendor/once_cell-1.19.0", 1092 | "dest-filename": ".cargo-checksum.json" 1093 | }, 1094 | { 1095 | "type": "archive", 1096 | "archive-type": "tar-gzip", 1097 | "url": "https://static.crates.io/crates/openssl/openssl-0.10.64.crate", 1098 | "sha256": "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f", 1099 | "dest": "cargo/vendor/openssl-0.10.64" 1100 | }, 1101 | { 1102 | "type": "inline", 1103 | "contents": "{\"package\": \"95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f\", \"files\": {}}", 1104 | "dest": "cargo/vendor/openssl-0.10.64", 1105 | "dest-filename": ".cargo-checksum.json" 1106 | }, 1107 | { 1108 | "type": "archive", 1109 | "archive-type": "tar-gzip", 1110 | "url": "https://static.crates.io/crates/openssl-macros/openssl-macros-0.1.1.crate", 1111 | "sha256": "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c", 1112 | "dest": "cargo/vendor/openssl-macros-0.1.1" 1113 | }, 1114 | { 1115 | "type": "inline", 1116 | "contents": "{\"package\": \"a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c\", \"files\": {}}", 1117 | "dest": "cargo/vendor/openssl-macros-0.1.1", 1118 | "dest-filename": ".cargo-checksum.json" 1119 | }, 1120 | { 1121 | "type": "archive", 1122 | "archive-type": "tar-gzip", 1123 | "url": "https://static.crates.io/crates/openssl-probe/openssl-probe-0.1.5.crate", 1124 | "sha256": "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf", 1125 | "dest": "cargo/vendor/openssl-probe-0.1.5" 1126 | }, 1127 | { 1128 | "type": "inline", 1129 | "contents": "{\"package\": \"ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf\", \"files\": {}}", 1130 | "dest": "cargo/vendor/openssl-probe-0.1.5", 1131 | "dest-filename": ".cargo-checksum.json" 1132 | }, 1133 | { 1134 | "type": "archive", 1135 | "archive-type": "tar-gzip", 1136 | "url": "https://static.crates.io/crates/openssl-sys/openssl-sys-0.9.102.crate", 1137 | "sha256": "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2", 1138 | "dest": "cargo/vendor/openssl-sys-0.9.102" 1139 | }, 1140 | { 1141 | "type": "inline", 1142 | "contents": "{\"package\": \"c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2\", \"files\": {}}", 1143 | "dest": "cargo/vendor/openssl-sys-0.9.102", 1144 | "dest-filename": ".cargo-checksum.json" 1145 | }, 1146 | { 1147 | "type": "archive", 1148 | "archive-type": "tar-gzip", 1149 | "url": "https://static.crates.io/crates/percent-encoding/percent-encoding-2.3.1.crate", 1150 | "sha256": "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e", 1151 | "dest": "cargo/vendor/percent-encoding-2.3.1" 1152 | }, 1153 | { 1154 | "type": "inline", 1155 | "contents": "{\"package\": \"e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e\", \"files\": {}}", 1156 | "dest": "cargo/vendor/percent-encoding-2.3.1", 1157 | "dest-filename": ".cargo-checksum.json" 1158 | }, 1159 | { 1160 | "type": "archive", 1161 | "archive-type": "tar-gzip", 1162 | "url": "https://static.crates.io/crates/pin-project/pin-project-1.1.5.crate", 1163 | "sha256": "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3", 1164 | "dest": "cargo/vendor/pin-project-1.1.5" 1165 | }, 1166 | { 1167 | "type": "inline", 1168 | "contents": "{\"package\": \"b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3\", \"files\": {}}", 1169 | "dest": "cargo/vendor/pin-project-1.1.5", 1170 | "dest-filename": ".cargo-checksum.json" 1171 | }, 1172 | { 1173 | "type": "archive", 1174 | "archive-type": "tar-gzip", 1175 | "url": "https://static.crates.io/crates/pin-project-internal/pin-project-internal-1.1.5.crate", 1176 | "sha256": "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965", 1177 | "dest": "cargo/vendor/pin-project-internal-1.1.5" 1178 | }, 1179 | { 1180 | "type": "inline", 1181 | "contents": "{\"package\": \"2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965\", \"files\": {}}", 1182 | "dest": "cargo/vendor/pin-project-internal-1.1.5", 1183 | "dest-filename": ".cargo-checksum.json" 1184 | }, 1185 | { 1186 | "type": "archive", 1187 | "archive-type": "tar-gzip", 1188 | "url": "https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.14.crate", 1189 | "sha256": "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02", 1190 | "dest": "cargo/vendor/pin-project-lite-0.2.14" 1191 | }, 1192 | { 1193 | "type": "inline", 1194 | "contents": "{\"package\": \"bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02\", \"files\": {}}", 1195 | "dest": "cargo/vendor/pin-project-lite-0.2.14", 1196 | "dest-filename": ".cargo-checksum.json" 1197 | }, 1198 | { 1199 | "type": "archive", 1200 | "archive-type": "tar-gzip", 1201 | "url": "https://static.crates.io/crates/pin-utils/pin-utils-0.1.0.crate", 1202 | "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184", 1203 | "dest": "cargo/vendor/pin-utils-0.1.0" 1204 | }, 1205 | { 1206 | "type": "inline", 1207 | "contents": "{\"package\": \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\", \"files\": {}}", 1208 | "dest": "cargo/vendor/pin-utils-0.1.0", 1209 | "dest-filename": ".cargo-checksum.json" 1210 | }, 1211 | { 1212 | "type": "archive", 1213 | "archive-type": "tar-gzip", 1214 | "url": "https://static.crates.io/crates/pkg-config/pkg-config-0.3.30.crate", 1215 | "sha256": "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec", 1216 | "dest": "cargo/vendor/pkg-config-0.3.30" 1217 | }, 1218 | { 1219 | "type": "inline", 1220 | "contents": "{\"package\": \"d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec\", \"files\": {}}", 1221 | "dest": "cargo/vendor/pkg-config-0.3.30", 1222 | "dest-filename": ".cargo-checksum.json" 1223 | }, 1224 | { 1225 | "type": "archive", 1226 | "archive-type": "tar-gzip", 1227 | "url": "https://static.crates.io/crates/powerfmt/powerfmt-0.2.0.crate", 1228 | "sha256": "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391", 1229 | "dest": "cargo/vendor/powerfmt-0.2.0" 1230 | }, 1231 | { 1232 | "type": "inline", 1233 | "contents": "{\"package\": \"439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391\", \"files\": {}}", 1234 | "dest": "cargo/vendor/powerfmt-0.2.0", 1235 | "dest-filename": ".cargo-checksum.json" 1236 | }, 1237 | { 1238 | "type": "archive", 1239 | "archive-type": "tar-gzip", 1240 | "url": "https://static.crates.io/crates/ppv-lite86/ppv-lite86-0.2.17.crate", 1241 | "sha256": "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de", 1242 | "dest": "cargo/vendor/ppv-lite86-0.2.17" 1243 | }, 1244 | { 1245 | "type": "inline", 1246 | "contents": "{\"package\": \"5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de\", \"files\": {}}", 1247 | "dest": "cargo/vendor/ppv-lite86-0.2.17", 1248 | "dest-filename": ".cargo-checksum.json" 1249 | }, 1250 | { 1251 | "type": "archive", 1252 | "archive-type": "tar-gzip", 1253 | "url": "https://static.crates.io/crates/proc-macro-crate/proc-macro-crate-3.1.0.crate", 1254 | "sha256": "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284", 1255 | "dest": "cargo/vendor/proc-macro-crate-3.1.0" 1256 | }, 1257 | { 1258 | "type": "inline", 1259 | "contents": "{\"package\": \"6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284\", \"files\": {}}", 1260 | "dest": "cargo/vendor/proc-macro-crate-3.1.0", 1261 | "dest-filename": ".cargo-checksum.json" 1262 | }, 1263 | { 1264 | "type": "archive", 1265 | "archive-type": "tar-gzip", 1266 | "url": "https://static.crates.io/crates/proc-macro2/proc-macro2-1.0.85.crate", 1267 | "sha256": "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23", 1268 | "dest": "cargo/vendor/proc-macro2-1.0.85" 1269 | }, 1270 | { 1271 | "type": "inline", 1272 | "contents": "{\"package\": \"22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23\", \"files\": {}}", 1273 | "dest": "cargo/vendor/proc-macro2-1.0.85", 1274 | "dest-filename": ".cargo-checksum.json" 1275 | }, 1276 | { 1277 | "type": "archive", 1278 | "archive-type": "tar-gzip", 1279 | "url": "https://static.crates.io/crates/quote/quote-1.0.36.crate", 1280 | "sha256": "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7", 1281 | "dest": "cargo/vendor/quote-1.0.36" 1282 | }, 1283 | { 1284 | "type": "inline", 1285 | "contents": "{\"package\": \"0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7\", \"files\": {}}", 1286 | "dest": "cargo/vendor/quote-1.0.36", 1287 | "dest-filename": ".cargo-checksum.json" 1288 | }, 1289 | { 1290 | "type": "archive", 1291 | "archive-type": "tar-gzip", 1292 | "url": "https://static.crates.io/crates/rand/rand-0.8.5.crate", 1293 | "sha256": "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404", 1294 | "dest": "cargo/vendor/rand-0.8.5" 1295 | }, 1296 | { 1297 | "type": "inline", 1298 | "contents": "{\"package\": \"34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404\", \"files\": {}}", 1299 | "dest": "cargo/vendor/rand-0.8.5", 1300 | "dest-filename": ".cargo-checksum.json" 1301 | }, 1302 | { 1303 | "type": "archive", 1304 | "archive-type": "tar-gzip", 1305 | "url": "https://static.crates.io/crates/rand_chacha/rand_chacha-0.3.1.crate", 1306 | "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88", 1307 | "dest": "cargo/vendor/rand_chacha-0.3.1" 1308 | }, 1309 | { 1310 | "type": "inline", 1311 | "contents": "{\"package\": \"e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88\", \"files\": {}}", 1312 | "dest": "cargo/vendor/rand_chacha-0.3.1", 1313 | "dest-filename": ".cargo-checksum.json" 1314 | }, 1315 | { 1316 | "type": "archive", 1317 | "archive-type": "tar-gzip", 1318 | "url": "https://static.crates.io/crates/rand_core/rand_core-0.6.4.crate", 1319 | "sha256": "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c", 1320 | "dest": "cargo/vendor/rand_core-0.6.4" 1321 | }, 1322 | { 1323 | "type": "inline", 1324 | "contents": "{\"package\": \"ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c\", \"files\": {}}", 1325 | "dest": "cargo/vendor/rand_core-0.6.4", 1326 | "dest-filename": ".cargo-checksum.json" 1327 | }, 1328 | { 1329 | "type": "archive", 1330 | "archive-type": "tar-gzip", 1331 | "url": "https://static.crates.io/crates/reqwest/reqwest-0.12.4.crate", 1332 | "sha256": "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10", 1333 | "dest": "cargo/vendor/reqwest-0.12.4" 1334 | }, 1335 | { 1336 | "type": "inline", 1337 | "contents": "{\"package\": \"566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10\", \"files\": {}}", 1338 | "dest": "cargo/vendor/reqwest-0.12.4", 1339 | "dest-filename": ".cargo-checksum.json" 1340 | }, 1341 | { 1342 | "type": "archive", 1343 | "archive-type": "tar-gzip", 1344 | "url": "https://static.crates.io/crates/rustc-demangle/rustc-demangle-0.1.24.crate", 1345 | "sha256": "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f", 1346 | "dest": "cargo/vendor/rustc-demangle-0.1.24" 1347 | }, 1348 | { 1349 | "type": "inline", 1350 | "contents": "{\"package\": \"719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f\", \"files\": {}}", 1351 | "dest": "cargo/vendor/rustc-demangle-0.1.24", 1352 | "dest-filename": ".cargo-checksum.json" 1353 | }, 1354 | { 1355 | "type": "archive", 1356 | "archive-type": "tar-gzip", 1357 | "url": "https://static.crates.io/crates/rustix/rustix-0.38.34.crate", 1358 | "sha256": "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f", 1359 | "dest": "cargo/vendor/rustix-0.38.34" 1360 | }, 1361 | { 1362 | "type": "inline", 1363 | "contents": "{\"package\": \"70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f\", \"files\": {}}", 1364 | "dest": "cargo/vendor/rustix-0.38.34", 1365 | "dest-filename": ".cargo-checksum.json" 1366 | }, 1367 | { 1368 | "type": "archive", 1369 | "archive-type": "tar-gzip", 1370 | "url": "https://static.crates.io/crates/rustls-pemfile/rustls-pemfile-2.1.2.crate", 1371 | "sha256": "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d", 1372 | "dest": "cargo/vendor/rustls-pemfile-2.1.2" 1373 | }, 1374 | { 1375 | "type": "inline", 1376 | "contents": "{\"package\": \"29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d\", \"files\": {}}", 1377 | "dest": "cargo/vendor/rustls-pemfile-2.1.2", 1378 | "dest-filename": ".cargo-checksum.json" 1379 | }, 1380 | { 1381 | "type": "archive", 1382 | "archive-type": "tar-gzip", 1383 | "url": "https://static.crates.io/crates/rustls-pki-types/rustls-pki-types-1.7.0.crate", 1384 | "sha256": "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d", 1385 | "dest": "cargo/vendor/rustls-pki-types-1.7.0" 1386 | }, 1387 | { 1388 | "type": "inline", 1389 | "contents": "{\"package\": \"976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d\", \"files\": {}}", 1390 | "dest": "cargo/vendor/rustls-pki-types-1.7.0", 1391 | "dest-filename": ".cargo-checksum.json" 1392 | }, 1393 | { 1394 | "type": "archive", 1395 | "archive-type": "tar-gzip", 1396 | "url": "https://static.crates.io/crates/ryu/ryu-1.0.18.crate", 1397 | "sha256": "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f", 1398 | "dest": "cargo/vendor/ryu-1.0.18" 1399 | }, 1400 | { 1401 | "type": "inline", 1402 | "contents": "{\"package\": \"f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f\", \"files\": {}}", 1403 | "dest": "cargo/vendor/ryu-1.0.18", 1404 | "dest-filename": ".cargo-checksum.json" 1405 | }, 1406 | { 1407 | "type": "archive", 1408 | "archive-type": "tar-gzip", 1409 | "url": "https://static.crates.io/crates/schannel/schannel-0.1.23.crate", 1410 | "sha256": "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534", 1411 | "dest": "cargo/vendor/schannel-0.1.23" 1412 | }, 1413 | { 1414 | "type": "inline", 1415 | "contents": "{\"package\": \"fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534\", \"files\": {}}", 1416 | "dest": "cargo/vendor/schannel-0.1.23", 1417 | "dest-filename": ".cargo-checksum.json" 1418 | }, 1419 | { 1420 | "type": "archive", 1421 | "archive-type": "tar-gzip", 1422 | "url": "https://static.crates.io/crates/security-framework/security-framework-2.11.0.crate", 1423 | "sha256": "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0", 1424 | "dest": "cargo/vendor/security-framework-2.11.0" 1425 | }, 1426 | { 1427 | "type": "inline", 1428 | "contents": "{\"package\": \"c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0\", \"files\": {}}", 1429 | "dest": "cargo/vendor/security-framework-2.11.0", 1430 | "dest-filename": ".cargo-checksum.json" 1431 | }, 1432 | { 1433 | "type": "archive", 1434 | "archive-type": "tar-gzip", 1435 | "url": "https://static.crates.io/crates/security-framework-sys/security-framework-sys-2.11.0.crate", 1436 | "sha256": "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7", 1437 | "dest": "cargo/vendor/security-framework-sys-2.11.0" 1438 | }, 1439 | { 1440 | "type": "inline", 1441 | "contents": "{\"package\": \"317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7\", \"files\": {}}", 1442 | "dest": "cargo/vendor/security-framework-sys-2.11.0", 1443 | "dest-filename": ".cargo-checksum.json" 1444 | }, 1445 | { 1446 | "type": "archive", 1447 | "archive-type": "tar-gzip", 1448 | "url": "https://static.crates.io/crates/serde/serde-1.0.203.crate", 1449 | "sha256": "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094", 1450 | "dest": "cargo/vendor/serde-1.0.203" 1451 | }, 1452 | { 1453 | "type": "inline", 1454 | "contents": "{\"package\": \"7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094\", \"files\": {}}", 1455 | "dest": "cargo/vendor/serde-1.0.203", 1456 | "dest-filename": ".cargo-checksum.json" 1457 | }, 1458 | { 1459 | "type": "archive", 1460 | "archive-type": "tar-gzip", 1461 | "url": "https://static.crates.io/crates/serde_derive/serde_derive-1.0.203.crate", 1462 | "sha256": "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba", 1463 | "dest": "cargo/vendor/serde_derive-1.0.203" 1464 | }, 1465 | { 1466 | "type": "inline", 1467 | "contents": "{\"package\": \"500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba\", \"files\": {}}", 1468 | "dest": "cargo/vendor/serde_derive-1.0.203", 1469 | "dest-filename": ".cargo-checksum.json" 1470 | }, 1471 | { 1472 | "type": "archive", 1473 | "archive-type": "tar-gzip", 1474 | "url": "https://static.crates.io/crates/serde_json/serde_json-1.0.117.crate", 1475 | "sha256": "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3", 1476 | "dest": "cargo/vendor/serde_json-1.0.117" 1477 | }, 1478 | { 1479 | "type": "inline", 1480 | "contents": "{\"package\": \"455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3\", \"files\": {}}", 1481 | "dest": "cargo/vendor/serde_json-1.0.117", 1482 | "dest-filename": ".cargo-checksum.json" 1483 | }, 1484 | { 1485 | "type": "archive", 1486 | "archive-type": "tar-gzip", 1487 | "url": "https://static.crates.io/crates/serde_spanned/serde_spanned-0.6.6.crate", 1488 | "sha256": "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0", 1489 | "dest": "cargo/vendor/serde_spanned-0.6.6" 1490 | }, 1491 | { 1492 | "type": "inline", 1493 | "contents": "{\"package\": \"79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0\", \"files\": {}}", 1494 | "dest": "cargo/vendor/serde_spanned-0.6.6", 1495 | "dest-filename": ".cargo-checksum.json" 1496 | }, 1497 | { 1498 | "type": "archive", 1499 | "archive-type": "tar-gzip", 1500 | "url": "https://static.crates.io/crates/serde_urlencoded/serde_urlencoded-0.7.1.crate", 1501 | "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd", 1502 | "dest": "cargo/vendor/serde_urlencoded-0.7.1" 1503 | }, 1504 | { 1505 | "type": "inline", 1506 | "contents": "{\"package\": \"d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd\", \"files\": {}}", 1507 | "dest": "cargo/vendor/serde_urlencoded-0.7.1", 1508 | "dest-filename": ".cargo-checksum.json" 1509 | }, 1510 | { 1511 | "type": "archive", 1512 | "archive-type": "tar-gzip", 1513 | "url": "https://static.crates.io/crates/signal-hook/signal-hook-0.3.17.crate", 1514 | "sha256": "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801", 1515 | "dest": "cargo/vendor/signal-hook-0.3.17" 1516 | }, 1517 | { 1518 | "type": "inline", 1519 | "contents": "{\"package\": \"8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801\", \"files\": {}}", 1520 | "dest": "cargo/vendor/signal-hook-0.3.17", 1521 | "dest-filename": ".cargo-checksum.json" 1522 | }, 1523 | { 1524 | "type": "archive", 1525 | "archive-type": "tar-gzip", 1526 | "url": "https://static.crates.io/crates/signal-hook-registry/signal-hook-registry-1.4.2.crate", 1527 | "sha256": "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1", 1528 | "dest": "cargo/vendor/signal-hook-registry-1.4.2" 1529 | }, 1530 | { 1531 | "type": "inline", 1532 | "contents": "{\"package\": \"a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1\", \"files\": {}}", 1533 | "dest": "cargo/vendor/signal-hook-registry-1.4.2", 1534 | "dest-filename": ".cargo-checksum.json" 1535 | }, 1536 | { 1537 | "type": "archive", 1538 | "archive-type": "tar-gzip", 1539 | "url": "https://static.crates.io/crates/simple_logger/simple_logger-5.0.0.crate", 1540 | "sha256": "e8c5dfa5e08767553704aa0ffd9d9794d527103c736aba9854773851fd7497eb", 1541 | "dest": "cargo/vendor/simple_logger-5.0.0" 1542 | }, 1543 | { 1544 | "type": "inline", 1545 | "contents": "{\"package\": \"e8c5dfa5e08767553704aa0ffd9d9794d527103c736aba9854773851fd7497eb\", \"files\": {}}", 1546 | "dest": "cargo/vendor/simple_logger-5.0.0", 1547 | "dest-filename": ".cargo-checksum.json" 1548 | }, 1549 | { 1550 | "type": "archive", 1551 | "archive-type": "tar-gzip", 1552 | "url": "https://static.crates.io/crates/slab/slab-0.4.9.crate", 1553 | "sha256": "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67", 1554 | "dest": "cargo/vendor/slab-0.4.9" 1555 | }, 1556 | { 1557 | "type": "inline", 1558 | "contents": "{\"package\": \"8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67\", \"files\": {}}", 1559 | "dest": "cargo/vendor/slab-0.4.9", 1560 | "dest-filename": ".cargo-checksum.json" 1561 | }, 1562 | { 1563 | "type": "archive", 1564 | "archive-type": "tar-gzip", 1565 | "url": "https://static.crates.io/crates/smallvec/smallvec-1.13.2.crate", 1566 | "sha256": "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67", 1567 | "dest": "cargo/vendor/smallvec-1.13.2" 1568 | }, 1569 | { 1570 | "type": "inline", 1571 | "contents": "{\"package\": \"3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67\", \"files\": {}}", 1572 | "dest": "cargo/vendor/smallvec-1.13.2", 1573 | "dest-filename": ".cargo-checksum.json" 1574 | }, 1575 | { 1576 | "type": "archive", 1577 | "archive-type": "tar-gzip", 1578 | "url": "https://static.crates.io/crates/socket2/socket2-0.5.7.crate", 1579 | "sha256": "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c", 1580 | "dest": "cargo/vendor/socket2-0.5.7" 1581 | }, 1582 | { 1583 | "type": "inline", 1584 | "contents": "{\"package\": \"ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c\", \"files\": {}}", 1585 | "dest": "cargo/vendor/socket2-0.5.7", 1586 | "dest-filename": ".cargo-checksum.json" 1587 | }, 1588 | { 1589 | "type": "archive", 1590 | "archive-type": "tar-gzip", 1591 | "url": "https://static.crates.io/crates/strsim/strsim-0.11.1.crate", 1592 | "sha256": "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f", 1593 | "dest": "cargo/vendor/strsim-0.11.1" 1594 | }, 1595 | { 1596 | "type": "inline", 1597 | "contents": "{\"package\": \"7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f\", \"files\": {}}", 1598 | "dest": "cargo/vendor/strsim-0.11.1", 1599 | "dest-filename": ".cargo-checksum.json" 1600 | }, 1601 | { 1602 | "type": "archive", 1603 | "archive-type": "tar-gzip", 1604 | "url": "https://static.crates.io/crates/syn/syn-2.0.66.crate", 1605 | "sha256": "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5", 1606 | "dest": "cargo/vendor/syn-2.0.66" 1607 | }, 1608 | { 1609 | "type": "inline", 1610 | "contents": "{\"package\": \"c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5\", \"files\": {}}", 1611 | "dest": "cargo/vendor/syn-2.0.66", 1612 | "dest-filename": ".cargo-checksum.json" 1613 | }, 1614 | { 1615 | "type": "archive", 1616 | "archive-type": "tar-gzip", 1617 | "url": "https://static.crates.io/crates/sync_wrapper/sync_wrapper-0.1.2.crate", 1618 | "sha256": "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160", 1619 | "dest": "cargo/vendor/sync_wrapper-0.1.2" 1620 | }, 1621 | { 1622 | "type": "inline", 1623 | "contents": "{\"package\": \"2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160\", \"files\": {}}", 1624 | "dest": "cargo/vendor/sync_wrapper-0.1.2", 1625 | "dest-filename": ".cargo-checksum.json" 1626 | }, 1627 | { 1628 | "type": "archive", 1629 | "archive-type": "tar-gzip", 1630 | "url": "https://static.crates.io/crates/system-configuration/system-configuration-0.5.1.crate", 1631 | "sha256": "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7", 1632 | "dest": "cargo/vendor/system-configuration-0.5.1" 1633 | }, 1634 | { 1635 | "type": "inline", 1636 | "contents": "{\"package\": \"ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7\", \"files\": {}}", 1637 | "dest": "cargo/vendor/system-configuration-0.5.1", 1638 | "dest-filename": ".cargo-checksum.json" 1639 | }, 1640 | { 1641 | "type": "archive", 1642 | "archive-type": "tar-gzip", 1643 | "url": "https://static.crates.io/crates/system-configuration-sys/system-configuration-sys-0.5.0.crate", 1644 | "sha256": "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9", 1645 | "dest": "cargo/vendor/system-configuration-sys-0.5.0" 1646 | }, 1647 | { 1648 | "type": "inline", 1649 | "contents": "{\"package\": \"a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9\", \"files\": {}}", 1650 | "dest": "cargo/vendor/system-configuration-sys-0.5.0", 1651 | "dest-filename": ".cargo-checksum.json" 1652 | }, 1653 | { 1654 | "type": "archive", 1655 | "archive-type": "tar-gzip", 1656 | "url": "https://static.crates.io/crates/system-deps/system-deps-6.2.2.crate", 1657 | "sha256": "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349", 1658 | "dest": "cargo/vendor/system-deps-6.2.2" 1659 | }, 1660 | { 1661 | "type": "inline", 1662 | "contents": "{\"package\": \"a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349\", \"files\": {}}", 1663 | "dest": "cargo/vendor/system-deps-6.2.2", 1664 | "dest-filename": ".cargo-checksum.json" 1665 | }, 1666 | { 1667 | "type": "archive", 1668 | "archive-type": "tar-gzip", 1669 | "url": "https://static.crates.io/crates/target-lexicon/target-lexicon-0.12.14.crate", 1670 | "sha256": "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f", 1671 | "dest": "cargo/vendor/target-lexicon-0.12.14" 1672 | }, 1673 | { 1674 | "type": "inline", 1675 | "contents": "{\"package\": \"e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f\", \"files\": {}}", 1676 | "dest": "cargo/vendor/target-lexicon-0.12.14", 1677 | "dest-filename": ".cargo-checksum.json" 1678 | }, 1679 | { 1680 | "type": "archive", 1681 | "archive-type": "tar-gzip", 1682 | "url": "https://static.crates.io/crates/tempfile/tempfile-3.10.1.crate", 1683 | "sha256": "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1", 1684 | "dest": "cargo/vendor/tempfile-3.10.1" 1685 | }, 1686 | { 1687 | "type": "inline", 1688 | "contents": "{\"package\": \"85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1\", \"files\": {}}", 1689 | "dest": "cargo/vendor/tempfile-3.10.1", 1690 | "dest-filename": ".cargo-checksum.json" 1691 | }, 1692 | { 1693 | "type": "archive", 1694 | "archive-type": "tar-gzip", 1695 | "url": "https://static.crates.io/crates/thiserror/thiserror-1.0.61.crate", 1696 | "sha256": "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709", 1697 | "dest": "cargo/vendor/thiserror-1.0.61" 1698 | }, 1699 | { 1700 | "type": "inline", 1701 | "contents": "{\"package\": \"c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709\", \"files\": {}}", 1702 | "dest": "cargo/vendor/thiserror-1.0.61", 1703 | "dest-filename": ".cargo-checksum.json" 1704 | }, 1705 | { 1706 | "type": "archive", 1707 | "archive-type": "tar-gzip", 1708 | "url": "https://static.crates.io/crates/thiserror-impl/thiserror-impl-1.0.61.crate", 1709 | "sha256": "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533", 1710 | "dest": "cargo/vendor/thiserror-impl-1.0.61" 1711 | }, 1712 | { 1713 | "type": "inline", 1714 | "contents": "{\"package\": \"46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533\", \"files\": {}}", 1715 | "dest": "cargo/vendor/thiserror-impl-1.0.61", 1716 | "dest-filename": ".cargo-checksum.json" 1717 | }, 1718 | { 1719 | "type": "archive", 1720 | "archive-type": "tar-gzip", 1721 | "url": "https://static.crates.io/crates/time/time-0.3.36.crate", 1722 | "sha256": "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885", 1723 | "dest": "cargo/vendor/time-0.3.36" 1724 | }, 1725 | { 1726 | "type": "inline", 1727 | "contents": "{\"package\": \"5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885\", \"files\": {}}", 1728 | "dest": "cargo/vendor/time-0.3.36", 1729 | "dest-filename": ".cargo-checksum.json" 1730 | }, 1731 | { 1732 | "type": "archive", 1733 | "archive-type": "tar-gzip", 1734 | "url": "https://static.crates.io/crates/time-core/time-core-0.1.2.crate", 1735 | "sha256": "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3", 1736 | "dest": "cargo/vendor/time-core-0.1.2" 1737 | }, 1738 | { 1739 | "type": "inline", 1740 | "contents": "{\"package\": \"ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3\", \"files\": {}}", 1741 | "dest": "cargo/vendor/time-core-0.1.2", 1742 | "dest-filename": ".cargo-checksum.json" 1743 | }, 1744 | { 1745 | "type": "archive", 1746 | "archive-type": "tar-gzip", 1747 | "url": "https://static.crates.io/crates/time-macros/time-macros-0.2.18.crate", 1748 | "sha256": "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf", 1749 | "dest": "cargo/vendor/time-macros-0.2.18" 1750 | }, 1751 | { 1752 | "type": "inline", 1753 | "contents": "{\"package\": \"3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf\", \"files\": {}}", 1754 | "dest": "cargo/vendor/time-macros-0.2.18", 1755 | "dest-filename": ".cargo-checksum.json" 1756 | }, 1757 | { 1758 | "type": "archive", 1759 | "archive-type": "tar-gzip", 1760 | "url": "https://static.crates.io/crates/tinyvec/tinyvec-1.6.0.crate", 1761 | "sha256": "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50", 1762 | "dest": "cargo/vendor/tinyvec-1.6.0" 1763 | }, 1764 | { 1765 | "type": "inline", 1766 | "contents": "{\"package\": \"87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50\", \"files\": {}}", 1767 | "dest": "cargo/vendor/tinyvec-1.6.0", 1768 | "dest-filename": ".cargo-checksum.json" 1769 | }, 1770 | { 1771 | "type": "archive", 1772 | "archive-type": "tar-gzip", 1773 | "url": "https://static.crates.io/crates/tinyvec_macros/tinyvec_macros-0.1.1.crate", 1774 | "sha256": "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20", 1775 | "dest": "cargo/vendor/tinyvec_macros-0.1.1" 1776 | }, 1777 | { 1778 | "type": "inline", 1779 | "contents": "{\"package\": \"1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20\", \"files\": {}}", 1780 | "dest": "cargo/vendor/tinyvec_macros-0.1.1", 1781 | "dest-filename": ".cargo-checksum.json" 1782 | }, 1783 | { 1784 | "type": "archive", 1785 | "archive-type": "tar-gzip", 1786 | "url": "https://static.crates.io/crates/tokio/tokio-1.38.0.crate", 1787 | "sha256": "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a", 1788 | "dest": "cargo/vendor/tokio-1.38.0" 1789 | }, 1790 | { 1791 | "type": "inline", 1792 | "contents": "{\"package\": \"ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a\", \"files\": {}}", 1793 | "dest": "cargo/vendor/tokio-1.38.0", 1794 | "dest-filename": ".cargo-checksum.json" 1795 | }, 1796 | { 1797 | "type": "archive", 1798 | "archive-type": "tar-gzip", 1799 | "url": "https://static.crates.io/crates/tokio-native-tls/tokio-native-tls-0.3.1.crate", 1800 | "sha256": "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2", 1801 | "dest": "cargo/vendor/tokio-native-tls-0.3.1" 1802 | }, 1803 | { 1804 | "type": "inline", 1805 | "contents": "{\"package\": \"bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2\", \"files\": {}}", 1806 | "dest": "cargo/vendor/tokio-native-tls-0.3.1", 1807 | "dest-filename": ".cargo-checksum.json" 1808 | }, 1809 | { 1810 | "type": "archive", 1811 | "archive-type": "tar-gzip", 1812 | "url": "https://static.crates.io/crates/tokio-util/tokio-util-0.7.11.crate", 1813 | "sha256": "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1", 1814 | "dest": "cargo/vendor/tokio-util-0.7.11" 1815 | }, 1816 | { 1817 | "type": "inline", 1818 | "contents": "{\"package\": \"9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1\", \"files\": {}}", 1819 | "dest": "cargo/vendor/tokio-util-0.7.11", 1820 | "dest-filename": ".cargo-checksum.json" 1821 | }, 1822 | { 1823 | "type": "archive", 1824 | "archive-type": "tar-gzip", 1825 | "url": "https://static.crates.io/crates/toml/toml-0.8.14.crate", 1826 | "sha256": "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335", 1827 | "dest": "cargo/vendor/toml-0.8.14" 1828 | }, 1829 | { 1830 | "type": "inline", 1831 | "contents": "{\"package\": \"6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335\", \"files\": {}}", 1832 | "dest": "cargo/vendor/toml-0.8.14", 1833 | "dest-filename": ".cargo-checksum.json" 1834 | }, 1835 | { 1836 | "type": "archive", 1837 | "archive-type": "tar-gzip", 1838 | "url": "https://static.crates.io/crates/toml_datetime/toml_datetime-0.6.6.crate", 1839 | "sha256": "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf", 1840 | "dest": "cargo/vendor/toml_datetime-0.6.6" 1841 | }, 1842 | { 1843 | "type": "inline", 1844 | "contents": "{\"package\": \"4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf\", \"files\": {}}", 1845 | "dest": "cargo/vendor/toml_datetime-0.6.6", 1846 | "dest-filename": ".cargo-checksum.json" 1847 | }, 1848 | { 1849 | "type": "archive", 1850 | "archive-type": "tar-gzip", 1851 | "url": "https://static.crates.io/crates/toml_edit/toml_edit-0.21.1.crate", 1852 | "sha256": "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1", 1853 | "dest": "cargo/vendor/toml_edit-0.21.1" 1854 | }, 1855 | { 1856 | "type": "inline", 1857 | "contents": "{\"package\": \"6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1\", \"files\": {}}", 1858 | "dest": "cargo/vendor/toml_edit-0.21.1", 1859 | "dest-filename": ".cargo-checksum.json" 1860 | }, 1861 | { 1862 | "type": "archive", 1863 | "archive-type": "tar-gzip", 1864 | "url": "https://static.crates.io/crates/toml_edit/toml_edit-0.22.14.crate", 1865 | "sha256": "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38", 1866 | "dest": "cargo/vendor/toml_edit-0.22.14" 1867 | }, 1868 | { 1869 | "type": "inline", 1870 | "contents": "{\"package\": \"f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38\", \"files\": {}}", 1871 | "dest": "cargo/vendor/toml_edit-0.22.14", 1872 | "dest-filename": ".cargo-checksum.json" 1873 | }, 1874 | { 1875 | "type": "archive", 1876 | "archive-type": "tar-gzip", 1877 | "url": "https://static.crates.io/crates/tower/tower-0.4.13.crate", 1878 | "sha256": "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c", 1879 | "dest": "cargo/vendor/tower-0.4.13" 1880 | }, 1881 | { 1882 | "type": "inline", 1883 | "contents": "{\"package\": \"b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c\", \"files\": {}}", 1884 | "dest": "cargo/vendor/tower-0.4.13", 1885 | "dest-filename": ".cargo-checksum.json" 1886 | }, 1887 | { 1888 | "type": "archive", 1889 | "archive-type": "tar-gzip", 1890 | "url": "https://static.crates.io/crates/tower-layer/tower-layer-0.3.2.crate", 1891 | "sha256": "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0", 1892 | "dest": "cargo/vendor/tower-layer-0.3.2" 1893 | }, 1894 | { 1895 | "type": "inline", 1896 | "contents": "{\"package\": \"c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0\", \"files\": {}}", 1897 | "dest": "cargo/vendor/tower-layer-0.3.2", 1898 | "dest-filename": ".cargo-checksum.json" 1899 | }, 1900 | { 1901 | "type": "archive", 1902 | "archive-type": "tar-gzip", 1903 | "url": "https://static.crates.io/crates/tower-service/tower-service-0.3.2.crate", 1904 | "sha256": "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52", 1905 | "dest": "cargo/vendor/tower-service-0.3.2" 1906 | }, 1907 | { 1908 | "type": "inline", 1909 | "contents": "{\"package\": \"b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52\", \"files\": {}}", 1910 | "dest": "cargo/vendor/tower-service-0.3.2", 1911 | "dest-filename": ".cargo-checksum.json" 1912 | }, 1913 | { 1914 | "type": "archive", 1915 | "archive-type": "tar-gzip", 1916 | "url": "https://static.crates.io/crates/tracing/tracing-0.1.40.crate", 1917 | "sha256": "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef", 1918 | "dest": "cargo/vendor/tracing-0.1.40" 1919 | }, 1920 | { 1921 | "type": "inline", 1922 | "contents": "{\"package\": \"c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef\", \"files\": {}}", 1923 | "dest": "cargo/vendor/tracing-0.1.40", 1924 | "dest-filename": ".cargo-checksum.json" 1925 | }, 1926 | { 1927 | "type": "archive", 1928 | "archive-type": "tar-gzip", 1929 | "url": "https://static.crates.io/crates/tracing-core/tracing-core-0.1.32.crate", 1930 | "sha256": "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54", 1931 | "dest": "cargo/vendor/tracing-core-0.1.32" 1932 | }, 1933 | { 1934 | "type": "inline", 1935 | "contents": "{\"package\": \"c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54\", \"files\": {}}", 1936 | "dest": "cargo/vendor/tracing-core-0.1.32", 1937 | "dest-filename": ".cargo-checksum.json" 1938 | }, 1939 | { 1940 | "type": "archive", 1941 | "archive-type": "tar-gzip", 1942 | "url": "https://static.crates.io/crates/try-lock/try-lock-0.2.5.crate", 1943 | "sha256": "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b", 1944 | "dest": "cargo/vendor/try-lock-0.2.5" 1945 | }, 1946 | { 1947 | "type": "inline", 1948 | "contents": "{\"package\": \"e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b\", \"files\": {}}", 1949 | "dest": "cargo/vendor/try-lock-0.2.5", 1950 | "dest-filename": ".cargo-checksum.json" 1951 | }, 1952 | { 1953 | "type": "archive", 1954 | "archive-type": "tar-gzip", 1955 | "url": "https://static.crates.io/crates/unicode-bidi/unicode-bidi-0.3.15.crate", 1956 | "sha256": "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75", 1957 | "dest": "cargo/vendor/unicode-bidi-0.3.15" 1958 | }, 1959 | { 1960 | "type": "inline", 1961 | "contents": "{\"package\": \"08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75\", \"files\": {}}", 1962 | "dest": "cargo/vendor/unicode-bidi-0.3.15", 1963 | "dest-filename": ".cargo-checksum.json" 1964 | }, 1965 | { 1966 | "type": "archive", 1967 | "archive-type": "tar-gzip", 1968 | "url": "https://static.crates.io/crates/unicode-ident/unicode-ident-1.0.12.crate", 1969 | "sha256": "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b", 1970 | "dest": "cargo/vendor/unicode-ident-1.0.12" 1971 | }, 1972 | { 1973 | "type": "inline", 1974 | "contents": "{\"package\": \"3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b\", \"files\": {}}", 1975 | "dest": "cargo/vendor/unicode-ident-1.0.12", 1976 | "dest-filename": ".cargo-checksum.json" 1977 | }, 1978 | { 1979 | "type": "archive", 1980 | "archive-type": "tar-gzip", 1981 | "url": "https://static.crates.io/crates/unicode-normalization/unicode-normalization-0.1.23.crate", 1982 | "sha256": "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5", 1983 | "dest": "cargo/vendor/unicode-normalization-0.1.23" 1984 | }, 1985 | { 1986 | "type": "inline", 1987 | "contents": "{\"package\": \"a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5\", \"files\": {}}", 1988 | "dest": "cargo/vendor/unicode-normalization-0.1.23", 1989 | "dest-filename": ".cargo-checksum.json" 1990 | }, 1991 | { 1992 | "type": "archive", 1993 | "archive-type": "tar-gzip", 1994 | "url": "https://static.crates.io/crates/url/url-2.5.0.crate", 1995 | "sha256": "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633", 1996 | "dest": "cargo/vendor/url-2.5.0" 1997 | }, 1998 | { 1999 | "type": "inline", 2000 | "contents": "{\"package\": \"31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633\", \"files\": {}}", 2001 | "dest": "cargo/vendor/url-2.5.0", 2002 | "dest-filename": ".cargo-checksum.json" 2003 | }, 2004 | { 2005 | "type": "archive", 2006 | "archive-type": "tar-gzip", 2007 | "url": "https://static.crates.io/crates/utf8parse/utf8parse-0.2.2.crate", 2008 | "sha256": "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821", 2009 | "dest": "cargo/vendor/utf8parse-0.2.2" 2010 | }, 2011 | { 2012 | "type": "inline", 2013 | "contents": "{\"package\": \"06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821\", \"files\": {}}", 2014 | "dest": "cargo/vendor/utf8parse-0.2.2", 2015 | "dest-filename": ".cargo-checksum.json" 2016 | }, 2017 | { 2018 | "type": "archive", 2019 | "archive-type": "tar-gzip", 2020 | "url": "https://static.crates.io/crates/vcpkg/vcpkg-0.2.15.crate", 2021 | "sha256": "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426", 2022 | "dest": "cargo/vendor/vcpkg-0.2.15" 2023 | }, 2024 | { 2025 | "type": "inline", 2026 | "contents": "{\"package\": \"accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426\", \"files\": {}}", 2027 | "dest": "cargo/vendor/vcpkg-0.2.15", 2028 | "dest-filename": ".cargo-checksum.json" 2029 | }, 2030 | { 2031 | "type": "archive", 2032 | "archive-type": "tar-gzip", 2033 | "url": "https://static.crates.io/crates/version-compare/version-compare-0.2.0.crate", 2034 | "sha256": "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b", 2035 | "dest": "cargo/vendor/version-compare-0.2.0" 2036 | }, 2037 | { 2038 | "type": "inline", 2039 | "contents": "{\"package\": \"852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b\", \"files\": {}}", 2040 | "dest": "cargo/vendor/version-compare-0.2.0", 2041 | "dest-filename": ".cargo-checksum.json" 2042 | }, 2043 | { 2044 | "type": "archive", 2045 | "archive-type": "tar-gzip", 2046 | "url": "https://static.crates.io/crates/want/want-0.3.1.crate", 2047 | "sha256": "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e", 2048 | "dest": "cargo/vendor/want-0.3.1" 2049 | }, 2050 | { 2051 | "type": "inline", 2052 | "contents": "{\"package\": \"bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e\", \"files\": {}}", 2053 | "dest": "cargo/vendor/want-0.3.1", 2054 | "dest-filename": ".cargo-checksum.json" 2055 | }, 2056 | { 2057 | "type": "archive", 2058 | "archive-type": "tar-gzip", 2059 | "url": "https://static.crates.io/crates/wasi/wasi-0.11.0+wasi-snapshot-preview1.crate", 2060 | "sha256": "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423", 2061 | "dest": "cargo/vendor/wasi-0.11.0+wasi-snapshot-preview1" 2062 | }, 2063 | { 2064 | "type": "inline", 2065 | "contents": "{\"package\": \"9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423\", \"files\": {}}", 2066 | "dest": "cargo/vendor/wasi-0.11.0+wasi-snapshot-preview1", 2067 | "dest-filename": ".cargo-checksum.json" 2068 | }, 2069 | { 2070 | "type": "archive", 2071 | "archive-type": "tar-gzip", 2072 | "url": "https://static.crates.io/crates/wasm-bindgen/wasm-bindgen-0.2.92.crate", 2073 | "sha256": "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8", 2074 | "dest": "cargo/vendor/wasm-bindgen-0.2.92" 2075 | }, 2076 | { 2077 | "type": "inline", 2078 | "contents": "{\"package\": \"4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8\", \"files\": {}}", 2079 | "dest": "cargo/vendor/wasm-bindgen-0.2.92", 2080 | "dest-filename": ".cargo-checksum.json" 2081 | }, 2082 | { 2083 | "type": "archive", 2084 | "archive-type": "tar-gzip", 2085 | "url": "https://static.crates.io/crates/wasm-bindgen-backend/wasm-bindgen-backend-0.2.92.crate", 2086 | "sha256": "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da", 2087 | "dest": "cargo/vendor/wasm-bindgen-backend-0.2.92" 2088 | }, 2089 | { 2090 | "type": "inline", 2091 | "contents": "{\"package\": \"614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da\", \"files\": {}}", 2092 | "dest": "cargo/vendor/wasm-bindgen-backend-0.2.92", 2093 | "dest-filename": ".cargo-checksum.json" 2094 | }, 2095 | { 2096 | "type": "archive", 2097 | "archive-type": "tar-gzip", 2098 | "url": "https://static.crates.io/crates/wasm-bindgen-futures/wasm-bindgen-futures-0.4.42.crate", 2099 | "sha256": "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0", 2100 | "dest": "cargo/vendor/wasm-bindgen-futures-0.4.42" 2101 | }, 2102 | { 2103 | "type": "inline", 2104 | "contents": "{\"package\": \"76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0\", \"files\": {}}", 2105 | "dest": "cargo/vendor/wasm-bindgen-futures-0.4.42", 2106 | "dest-filename": ".cargo-checksum.json" 2107 | }, 2108 | { 2109 | "type": "archive", 2110 | "archive-type": "tar-gzip", 2111 | "url": "https://static.crates.io/crates/wasm-bindgen-macro/wasm-bindgen-macro-0.2.92.crate", 2112 | "sha256": "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726", 2113 | "dest": "cargo/vendor/wasm-bindgen-macro-0.2.92" 2114 | }, 2115 | { 2116 | "type": "inline", 2117 | "contents": "{\"package\": \"a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726\", \"files\": {}}", 2118 | "dest": "cargo/vendor/wasm-bindgen-macro-0.2.92", 2119 | "dest-filename": ".cargo-checksum.json" 2120 | }, 2121 | { 2122 | "type": "archive", 2123 | "archive-type": "tar-gzip", 2124 | "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/wasm-bindgen-macro-support-0.2.92.crate", 2125 | "sha256": "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7", 2126 | "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.92" 2127 | }, 2128 | { 2129 | "type": "inline", 2130 | "contents": "{\"package\": \"e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7\", \"files\": {}}", 2131 | "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.92", 2132 | "dest-filename": ".cargo-checksum.json" 2133 | }, 2134 | { 2135 | "type": "archive", 2136 | "archive-type": "tar-gzip", 2137 | "url": "https://static.crates.io/crates/wasm-bindgen-shared/wasm-bindgen-shared-0.2.92.crate", 2138 | "sha256": "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96", 2139 | "dest": "cargo/vendor/wasm-bindgen-shared-0.2.92" 2140 | }, 2141 | { 2142 | "type": "inline", 2143 | "contents": "{\"package\": \"af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96\", \"files\": {}}", 2144 | "dest": "cargo/vendor/wasm-bindgen-shared-0.2.92", 2145 | "dest-filename": ".cargo-checksum.json" 2146 | }, 2147 | { 2148 | "type": "archive", 2149 | "archive-type": "tar-gzip", 2150 | "url": "https://static.crates.io/crates/web-sys/web-sys-0.3.69.crate", 2151 | "sha256": "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef", 2152 | "dest": "cargo/vendor/web-sys-0.3.69" 2153 | }, 2154 | { 2155 | "type": "inline", 2156 | "contents": "{\"package\": \"77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef\", \"files\": {}}", 2157 | "dest": "cargo/vendor/web-sys-0.3.69", 2158 | "dest-filename": ".cargo-checksum.json" 2159 | }, 2160 | { 2161 | "type": "archive", 2162 | "archive-type": "tar-gzip", 2163 | "url": "https://static.crates.io/crates/windows-sys/windows-sys-0.48.0.crate", 2164 | "sha256": "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9", 2165 | "dest": "cargo/vendor/windows-sys-0.48.0" 2166 | }, 2167 | { 2168 | "type": "inline", 2169 | "contents": "{\"package\": \"677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9\", \"files\": {}}", 2170 | "dest": "cargo/vendor/windows-sys-0.48.0", 2171 | "dest-filename": ".cargo-checksum.json" 2172 | }, 2173 | { 2174 | "type": "archive", 2175 | "archive-type": "tar-gzip", 2176 | "url": "https://static.crates.io/crates/windows-sys/windows-sys-0.52.0.crate", 2177 | "sha256": "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d", 2178 | "dest": "cargo/vendor/windows-sys-0.52.0" 2179 | }, 2180 | { 2181 | "type": "inline", 2182 | "contents": "{\"package\": \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\", \"files\": {}}", 2183 | "dest": "cargo/vendor/windows-sys-0.52.0", 2184 | "dest-filename": ".cargo-checksum.json" 2185 | }, 2186 | { 2187 | "type": "archive", 2188 | "archive-type": "tar-gzip", 2189 | "url": "https://static.crates.io/crates/windows-targets/windows-targets-0.48.5.crate", 2190 | "sha256": "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c", 2191 | "dest": "cargo/vendor/windows-targets-0.48.5" 2192 | }, 2193 | { 2194 | "type": "inline", 2195 | "contents": "{\"package\": \"9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c\", \"files\": {}}", 2196 | "dest": "cargo/vendor/windows-targets-0.48.5", 2197 | "dest-filename": ".cargo-checksum.json" 2198 | }, 2199 | { 2200 | "type": "archive", 2201 | "archive-type": "tar-gzip", 2202 | "url": "https://static.crates.io/crates/windows-targets/windows-targets-0.52.5.crate", 2203 | "sha256": "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb", 2204 | "dest": "cargo/vendor/windows-targets-0.52.5" 2205 | }, 2206 | { 2207 | "type": "inline", 2208 | "contents": "{\"package\": \"6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb\", \"files\": {}}", 2209 | "dest": "cargo/vendor/windows-targets-0.52.5", 2210 | "dest-filename": ".cargo-checksum.json" 2211 | }, 2212 | { 2213 | "type": "archive", 2214 | "archive-type": "tar-gzip", 2215 | "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.48.5.crate", 2216 | "sha256": "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8", 2217 | "dest": "cargo/vendor/windows_aarch64_gnullvm-0.48.5" 2218 | }, 2219 | { 2220 | "type": "inline", 2221 | "contents": "{\"package\": \"2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8\", \"files\": {}}", 2222 | "dest": "cargo/vendor/windows_aarch64_gnullvm-0.48.5", 2223 | "dest-filename": ".cargo-checksum.json" 2224 | }, 2225 | { 2226 | "type": "archive", 2227 | "archive-type": "tar-gzip", 2228 | "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.52.5.crate", 2229 | "sha256": "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263", 2230 | "dest": "cargo/vendor/windows_aarch64_gnullvm-0.52.5" 2231 | }, 2232 | { 2233 | "type": "inline", 2234 | "contents": "{\"package\": \"7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263\", \"files\": {}}", 2235 | "dest": "cargo/vendor/windows_aarch64_gnullvm-0.52.5", 2236 | "dest-filename": ".cargo-checksum.json" 2237 | }, 2238 | { 2239 | "type": "archive", 2240 | "archive-type": "tar-gzip", 2241 | "url": "https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.48.5.crate", 2242 | "sha256": "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc", 2243 | "dest": "cargo/vendor/windows_aarch64_msvc-0.48.5" 2244 | }, 2245 | { 2246 | "type": "inline", 2247 | "contents": "{\"package\": \"dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc\", \"files\": {}}", 2248 | "dest": "cargo/vendor/windows_aarch64_msvc-0.48.5", 2249 | "dest-filename": ".cargo-checksum.json" 2250 | }, 2251 | { 2252 | "type": "archive", 2253 | "archive-type": "tar-gzip", 2254 | "url": "https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.52.5.crate", 2255 | "sha256": "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6", 2256 | "dest": "cargo/vendor/windows_aarch64_msvc-0.52.5" 2257 | }, 2258 | { 2259 | "type": "inline", 2260 | "contents": "{\"package\": \"9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6\", \"files\": {}}", 2261 | "dest": "cargo/vendor/windows_aarch64_msvc-0.52.5", 2262 | "dest-filename": ".cargo-checksum.json" 2263 | }, 2264 | { 2265 | "type": "archive", 2266 | "archive-type": "tar-gzip", 2267 | "url": "https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.48.5.crate", 2268 | "sha256": "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e", 2269 | "dest": "cargo/vendor/windows_i686_gnu-0.48.5" 2270 | }, 2271 | { 2272 | "type": "inline", 2273 | "contents": "{\"package\": \"a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e\", \"files\": {}}", 2274 | "dest": "cargo/vendor/windows_i686_gnu-0.48.5", 2275 | "dest-filename": ".cargo-checksum.json" 2276 | }, 2277 | { 2278 | "type": "archive", 2279 | "archive-type": "tar-gzip", 2280 | "url": "https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.52.5.crate", 2281 | "sha256": "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670", 2282 | "dest": "cargo/vendor/windows_i686_gnu-0.52.5" 2283 | }, 2284 | { 2285 | "type": "inline", 2286 | "contents": "{\"package\": \"88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670\", \"files\": {}}", 2287 | "dest": "cargo/vendor/windows_i686_gnu-0.52.5", 2288 | "dest-filename": ".cargo-checksum.json" 2289 | }, 2290 | { 2291 | "type": "archive", 2292 | "archive-type": "tar-gzip", 2293 | "url": "https://static.crates.io/crates/windows_i686_gnullvm/windows_i686_gnullvm-0.52.5.crate", 2294 | "sha256": "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9", 2295 | "dest": "cargo/vendor/windows_i686_gnullvm-0.52.5" 2296 | }, 2297 | { 2298 | "type": "inline", 2299 | "contents": "{\"package\": \"87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9\", \"files\": {}}", 2300 | "dest": "cargo/vendor/windows_i686_gnullvm-0.52.5", 2301 | "dest-filename": ".cargo-checksum.json" 2302 | }, 2303 | { 2304 | "type": "archive", 2305 | "archive-type": "tar-gzip", 2306 | "url": "https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.48.5.crate", 2307 | "sha256": "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406", 2308 | "dest": "cargo/vendor/windows_i686_msvc-0.48.5" 2309 | }, 2310 | { 2311 | "type": "inline", 2312 | "contents": "{\"package\": \"8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406\", \"files\": {}}", 2313 | "dest": "cargo/vendor/windows_i686_msvc-0.48.5", 2314 | "dest-filename": ".cargo-checksum.json" 2315 | }, 2316 | { 2317 | "type": "archive", 2318 | "archive-type": "tar-gzip", 2319 | "url": "https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.52.5.crate", 2320 | "sha256": "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf", 2321 | "dest": "cargo/vendor/windows_i686_msvc-0.52.5" 2322 | }, 2323 | { 2324 | "type": "inline", 2325 | "contents": "{\"package\": \"db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf\", \"files\": {}}", 2326 | "dest": "cargo/vendor/windows_i686_msvc-0.52.5", 2327 | "dest-filename": ".cargo-checksum.json" 2328 | }, 2329 | { 2330 | "type": "archive", 2331 | "archive-type": "tar-gzip", 2332 | "url": "https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.48.5.crate", 2333 | "sha256": "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e", 2334 | "dest": "cargo/vendor/windows_x86_64_gnu-0.48.5" 2335 | }, 2336 | { 2337 | "type": "inline", 2338 | "contents": "{\"package\": \"53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e\", \"files\": {}}", 2339 | "dest": "cargo/vendor/windows_x86_64_gnu-0.48.5", 2340 | "dest-filename": ".cargo-checksum.json" 2341 | }, 2342 | { 2343 | "type": "archive", 2344 | "archive-type": "tar-gzip", 2345 | "url": "https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.52.5.crate", 2346 | "sha256": "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9", 2347 | "dest": "cargo/vendor/windows_x86_64_gnu-0.52.5" 2348 | }, 2349 | { 2350 | "type": "inline", 2351 | "contents": "{\"package\": \"4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9\", \"files\": {}}", 2352 | "dest": "cargo/vendor/windows_x86_64_gnu-0.52.5", 2353 | "dest-filename": ".cargo-checksum.json" 2354 | }, 2355 | { 2356 | "type": "archive", 2357 | "archive-type": "tar-gzip", 2358 | "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.48.5.crate", 2359 | "sha256": "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc", 2360 | "dest": "cargo/vendor/windows_x86_64_gnullvm-0.48.5" 2361 | }, 2362 | { 2363 | "type": "inline", 2364 | "contents": "{\"package\": \"0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc\", \"files\": {}}", 2365 | "dest": "cargo/vendor/windows_x86_64_gnullvm-0.48.5", 2366 | "dest-filename": ".cargo-checksum.json" 2367 | }, 2368 | { 2369 | "type": "archive", 2370 | "archive-type": "tar-gzip", 2371 | "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.52.5.crate", 2372 | "sha256": "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596", 2373 | "dest": "cargo/vendor/windows_x86_64_gnullvm-0.52.5" 2374 | }, 2375 | { 2376 | "type": "inline", 2377 | "contents": "{\"package\": \"852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596\", \"files\": {}}", 2378 | "dest": "cargo/vendor/windows_x86_64_gnullvm-0.52.5", 2379 | "dest-filename": ".cargo-checksum.json" 2380 | }, 2381 | { 2382 | "type": "archive", 2383 | "archive-type": "tar-gzip", 2384 | "url": "https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.48.5.crate", 2385 | "sha256": "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538", 2386 | "dest": "cargo/vendor/windows_x86_64_msvc-0.48.5" 2387 | }, 2388 | { 2389 | "type": "inline", 2390 | "contents": "{\"package\": \"ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538\", \"files\": {}}", 2391 | "dest": "cargo/vendor/windows_x86_64_msvc-0.48.5", 2392 | "dest-filename": ".cargo-checksum.json" 2393 | }, 2394 | { 2395 | "type": "archive", 2396 | "archive-type": "tar-gzip", 2397 | "url": "https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.52.5.crate", 2398 | "sha256": "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0", 2399 | "dest": "cargo/vendor/windows_x86_64_msvc-0.52.5" 2400 | }, 2401 | { 2402 | "type": "inline", 2403 | "contents": "{\"package\": \"bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0\", \"files\": {}}", 2404 | "dest": "cargo/vendor/windows_x86_64_msvc-0.52.5", 2405 | "dest-filename": ".cargo-checksum.json" 2406 | }, 2407 | { 2408 | "type": "archive", 2409 | "archive-type": "tar-gzip", 2410 | "url": "https://static.crates.io/crates/winnow/winnow-0.5.40.crate", 2411 | "sha256": "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876", 2412 | "dest": "cargo/vendor/winnow-0.5.40" 2413 | }, 2414 | { 2415 | "type": "inline", 2416 | "contents": "{\"package\": \"f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876\", \"files\": {}}", 2417 | "dest": "cargo/vendor/winnow-0.5.40", 2418 | "dest-filename": ".cargo-checksum.json" 2419 | }, 2420 | { 2421 | "type": "archive", 2422 | "archive-type": "tar-gzip", 2423 | "url": "https://static.crates.io/crates/winnow/winnow-0.6.13.crate", 2424 | "sha256": "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1", 2425 | "dest": "cargo/vendor/winnow-0.6.13" 2426 | }, 2427 | { 2428 | "type": "inline", 2429 | "contents": "{\"package\": \"59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1\", \"files\": {}}", 2430 | "dest": "cargo/vendor/winnow-0.6.13", 2431 | "dest-filename": ".cargo-checksum.json" 2432 | }, 2433 | { 2434 | "type": "archive", 2435 | "archive-type": "tar-gzip", 2436 | "url": "https://static.crates.io/crates/winreg/winreg-0.52.0.crate", 2437 | "sha256": "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5", 2438 | "dest": "cargo/vendor/winreg-0.52.0" 2439 | }, 2440 | { 2441 | "type": "inline", 2442 | "contents": "{\"package\": \"a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5\", \"files\": {}}", 2443 | "dest": "cargo/vendor/winreg-0.52.0", 2444 | "dest-filename": ".cargo-checksum.json" 2445 | }, 2446 | { 2447 | "type": "inline", 2448 | "contents": "[source.vendored-sources]\ndirectory = \"cargo/vendor\"\n\n[source.crates-io]\nreplace-with = \"vendored-sources\"\n", 2449 | "dest": "cargo", 2450 | "dest-filename": "config" 2451 | } 2452 | ] -------------------------------------------------------------------------------- /flatpak/io.github.ryanabx.flatpak-ext.yml: -------------------------------------------------------------------------------- 1 | id: io.github.ryanabx.flatpak-ext 2 | runtime: org.freedesktop.Platform 3 | runtime-version: "23.08" 4 | sdk: org.freedesktop.Sdk 5 | sdk-extensions: 6 | - org.freedesktop.Sdk.Extension.rust-stable 7 | # The Flatpak Builder BaseApp includes required libraries that 8 | # are necessary to build flatpak and flatpak-ext. 9 | # We dispose of the BaseApp's files after building. 10 | base: org.flatpak.Builder.BaseApp 11 | base-version: "23.08" 12 | separate-locales: false 13 | command: flatpak-ext-host 14 | finish-args: 15 | - "--share=ipc" 16 | - "--device=dri" 17 | - "--socket=wayland" 18 | - "--socket=fallback-x11" 19 | # Unfortunately, it's necessary for us to have this permission 20 | # flatpak-ext installs system runtimes and launches flatpaks 21 | # from a local repo (non system and non user). 22 | - "--talk-name=org.freedesktop.Flatpak" 23 | build-options: 24 | append-path: "/usr/lib/sdk/rust-stable/bin" 25 | env: 26 | CARGO_HOME: "/run/build/flatpak-ext/cargo" 27 | build-args: 28 | - "--share=network" 29 | modules: 30 | # Install flatpak 31 | - name: flatpak 32 | config-opts: 33 | - "--disable-documentation" 34 | - "--disable-seccomp" 35 | - "--disable-sandboxed-triggers" 36 | - "--disable-system-helper" 37 | - "--with-system-install-dir=/var/lib/flatpak" 38 | cleanup: 39 | - "/etc/profile.d" 40 | - "/lib/systemd" 41 | - "/share/dbus-1/interfaces/org.freedesktop.*" 42 | - "/share/dbus-1/services/org.freedesktop.*" 43 | - "/share/gdm" 44 | sources: 45 | - type: archive 46 | url: "https://github.com/flatpak/flatpak/releases/download/1.14.8/flatpak-1.14.8.tar.xz" 47 | sha256: "1016b7327f7af87896f95465f7e5813750d3b7049a3740a1a4ddcb5fa8c5348e" 48 | x-checker-data: 49 | type: "json" 50 | url: "https://api.github.com/repos/flatpak/flatpak/releases/latest" 51 | version-query: ".tag_name" 52 | url-query: "\"https://github.com/flatpak/flatpak/releases/download/\\($version)/flatpak-\\($version).tar.xz\"" 53 | # Install flatpak-ext 54 | - name: flatpak-ext 55 | buildsystem: simple 56 | build-commands: 57 | # Build using BaseApp libs and binaries 58 | - cargo --offline fetch --manifest-path Cargo.toml --verbose 59 | - cargo --offline build --release --verbose 60 | # Cleanup BaseApp as we don't need it any more 61 | - rm -rf /app/* 62 | # Install binary and data 63 | - install -Dm0755 target/release/flatpak-ext /app/bin/flatpak-ext 64 | - install -Dm0644 data/flatpak-ext.desktop /app/share/applications/io.github.ryanabx.flatpak-ext.desktop 65 | - install -Dm0644 data/flatpak-ext.metainfo.xml /app/share/metainfo/io.github.ryanabx.flatpak-ext.metainfo.xml 66 | - install -Dm0644 flatpak-ext.svg /app/share/icons/hicolor/scalable/apps/io.github.ryanabx.flatpak-ext.svg 67 | sources: 68 | - type: git 69 | url: https://github.com/ryanabx/flatpak-ext.git 70 | branch: master 71 | # tag: 72 | # commit: 73 | - generated-sources.json 74 | - name: flatpak-unsandbox 75 | buildsystem: simple 76 | build-commands: 77 | - cargo build --release 78 | - install -Dm0755 target/release/flatpak-unsandbox /app/libexec/flatpak-unsandbox 79 | - echo '#!/bin/sh' >> flatpak-ext-host 80 | - echo 'exec /app/libexec/flatpak-unsandbox -- /app/bin/flatpak-ext --verbose "$@"' >> flatpak-ext-host 81 | - install -Dm0755 flatpak-ext-host /app/bin/flatpak-ext-host 82 | sources: 83 | - type: git 84 | url: https://github.com/ryanabx/flatpak-unsandbox 85 | # branch: master 86 | tag: v0.2.0 87 | commit: 2176342245076a2499e4eac6d75e63522214c091 -------------------------------------------------------------------------------- /justfile: -------------------------------------------------------------------------------- 1 | build-flatpak: 2 | flatpak install -y --or-update flathub org.flatpak.Builder.BaseApp 3 | flatpak install -y --or-update flathub org.freedesktop.Sdk.Extension.rust-stable/x86_64/23.08 4 | flatpak run org.flatpak.Builder --force-clean --install --user .flatpak-target flatpak/io.github.ryanabx.flatrun.yml 5 | rm -r .flatpak-target -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use crate::types::FlatpakExtError; 2 | use clap::{Parser, Subcommand}; 3 | use run_temp::run_no_install; 4 | 5 | pub mod run_temp; 6 | pub mod run_temp_tools; 7 | pub mod types; 8 | pub mod utils; 9 | 10 | #[derive(Parser)] 11 | #[command(version, about, long_about = None)] 12 | #[command(propagate_version = true)] 13 | /// Flatpak-ext: Tools to extend flatpak's functionality 14 | struct Cli { 15 | /// Command to run 16 | #[command(subcommand)] 17 | command: Command, 18 | /// Verbose 19 | #[arg(long)] 20 | verbose: bool, 21 | } 22 | 23 | #[derive(Subcommand, Clone, Debug)] 24 | enum Command { 25 | /// Run a flatpak temporarily, without installing 26 | RunTemp { 27 | /// Flatpak to run from file 28 | #[arg(short, long)] 29 | file: Option, 30 | /// Dependency file (leave out to download dependencies automatically) 31 | #[arg(short, long)] 32 | dep: Option, 33 | /// Flatpak appid to download 34 | #[arg(short, long)] 35 | app_id: Option, 36 | /// Flatpak remote to use to download any flatpaks (defaults to flathub) 37 | #[arg(short, long)] 38 | remote: Option, 39 | /// Clean out the temp repo directory 40 | #[arg(short, long)] 41 | clean: bool, 42 | }, 43 | } 44 | 45 | fn main() -> Result<(), FlatpakExtError> { 46 | let cli = Cli::parse(); 47 | if cli.verbose { 48 | simple_logger::init_with_level(log::Level::Trace).unwrap(); 49 | } 50 | log::info!("Starting flatrun!"); 51 | match cli.command { 52 | Command::RunTemp { 53 | file, 54 | dep, 55 | app_id, 56 | remote, 57 | clean, 58 | } => run_no_install(file, dep, app_id, remote, clean)?, 59 | } 60 | Ok(()) 61 | } 62 | -------------------------------------------------------------------------------- /src/run_temp.rs: -------------------------------------------------------------------------------- 1 | use crate::{ 2 | run_temp_tools::{run, Message}, 3 | types::{Flatpak, FlatpakExtError, Repo}, 4 | }; 5 | use std::{env, fs::remove_dir_all}; 6 | 7 | use crate::utils::path_from_uri; 8 | 9 | pub fn run_no_install( 10 | file: Option, 11 | dep: Option, 12 | app_id: Option, 13 | remote: Option, 14 | clean: bool, 15 | ) -> Result<(), FlatpakExtError> { 16 | if clean { 17 | let _ = remove_dir_all(env::temp_dir().join("flatrun")); 18 | log::trace!("Cleared directory: {:?}", env::temp_dir().join("flatrun")); 19 | } 20 | for e in env::vars().map(|(x, y)| format!("{}={}", x, y)) { 21 | log::trace!("{e}"); 22 | } 23 | 24 | match file { 25 | Some(path) => { 26 | match run( 27 | Repo::temp(), 28 | Flatpak::Bundle(path_from_uri(path)), 29 | Some(Repo::default()), 30 | dep.map(|x| Flatpak::Bundle(path_from_uri(x))), 31 | remote, 32 | handle_message, 33 | ) { 34 | Ok(_) => Ok(()), 35 | Err(e) => { 36 | log::error!("{:?}", e); 37 | Err(e) 38 | } 39 | } 40 | } 41 | None => { 42 | if let Some(app_id) = app_id { 43 | match run( 44 | Repo::temp_in(env::temp_dir().join("flatrun")), 45 | Flatpak::Download(app_id), 46 | Some(Repo::default()), 47 | dep.map(|x| Flatpak::Bundle(path_from_uri(x))), 48 | remote, 49 | handle_message, 50 | ) { 51 | Ok(_) => Ok(()), 52 | Err(e) => { 53 | log::error!("{:?}", e); 54 | Err(e) 55 | } 56 | } 57 | } else { 58 | if !clean { 59 | println!( 60 | "'No args specified! {} run-temp --help' to see args", 61 | env::current_exe().unwrap().to_string_lossy() 62 | ); 63 | } 64 | Ok(()) 65 | } 66 | } 67 | } 68 | } 69 | 70 | fn handle_message(msg: Message) { 71 | match msg { 72 | Message::Install { r, progress, .. } => { 73 | println!("Installing {}... {}%", r, progress * 100.0); 74 | } 75 | Message::Running { n } => { 76 | println!("Running {}", n); 77 | } 78 | Message::Unknown => { 79 | println!("Unknown message!"); 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/run_temp_tools.rs: -------------------------------------------------------------------------------- 1 | use libflatpak::{ 2 | glib::{KeyFile, KeyFileFlags}, 3 | prelude::RemoteExt, 4 | prelude::{ 5 | BundleRefExt, FileExt, InstallationExt, InstallationExtManual, InstanceExt, RefExt, 6 | RemoteRefExt, TransactionExt, 7 | }, 8 | LaunchFlags, TransactionOperationType, 9 | }; 10 | use rustix::process::{Pid, WaitOptions}; 11 | use signal_hook::{consts::SIGINT, iterator::Signals}; 12 | use std::thread; 13 | 14 | use crate::types::{get_installation, Flatpak, FlatpakExtError, FlatpakOut, Remote, Repo}; 15 | 16 | #[derive(Clone, Debug)] 17 | pub enum Message { 18 | Install { 19 | r: String, 20 | progress: f32, 21 | dependency: bool, 22 | }, 23 | Running { 24 | n: String, 25 | }, 26 | Unknown, 27 | } 28 | 29 | impl Message { 30 | fn new_from(t: TransactionOperationType, r: String, p: f32, d: bool) -> Self { 31 | match t { 32 | TransactionOperationType::Install | TransactionOperationType::InstallBundle => { 33 | Self::Install { 34 | r, 35 | progress: p, 36 | dependency: d, 37 | } 38 | } 39 | _ => Self::Unknown, 40 | } 41 | } 42 | } 43 | 44 | /// Runs a flatpak 45 | pub fn run( 46 | install_at: Repo, 47 | app: Flatpak, 48 | deps_at: Option, 49 | runtime: Option, 50 | remote_uri: Option, 51 | update_callback: fn(Message), 52 | ) -> Result<(), FlatpakExtError> { 53 | log::debug!("Get the flatpak installations, error out if they don't exist or some other error occurs..."); 54 | let deps_repo: libflatpak::Installation = 55 | get_installation(&deps_at.as_ref().unwrap_or(&Repo::default()))?; 56 | let install_repo: libflatpak::Installation = get_installation(&install_at)?; 57 | log::debug!("Add remote for installations"); 58 | let remote = remote_uri.map_or(Remote::default(), |x| Remote::new(x)); 59 | let default_branch = remote.clone().default_branch; 60 | let remote = libflatpak::Remote::try_from(remote)?; 61 | remote.set_default_branch(&default_branch); 62 | if let Err(e) = deps_repo.add_remote( 63 | &remote, 64 | true, 65 | libflatpak::gio::Cancellable::current().as_ref(), 66 | ) { 67 | log::error!("There was a problem adding the remote: {}", e); 68 | } 69 | if let Err(e) = install_repo.add_remote( 70 | &remote, 71 | true, 72 | libflatpak::gio::Cancellable::current().as_ref(), 73 | ) { 74 | log::error!("There was a problem adding the remote: {}", e); 75 | } 76 | log::debug!("Get the flatpak"); 77 | let app = app.convert_to_flatpak_out(&install_repo, &remote, &default_branch, false)?; 78 | log::debug!("Get the runtime"); 79 | let runtime = runtime.map_or( 80 | { 81 | match app { 82 | FlatpakOut::Bundle(ref bundle) => { 83 | let config = KeyFile::new(); 84 | config.load_from_bytes(&bundle.metadata().unwrap(), KeyFileFlags::NONE)?; 85 | let runtime_str = config.string("Application", "runtime").unwrap().to_string(); 86 | let mut info = runtime_str.split("/"); 87 | let app_id = info.next().unwrap().to_string(); 88 | let _ = info.next().unwrap().to_string(); 89 | let branch = info.next().unwrap().to_string(); 90 | Ok::( 91 | Flatpak::Download(app_id) 92 | .convert_to_flatpak_out(&deps_repo, &remote, &branch, true)?, 93 | ) 94 | } 95 | FlatpakOut::Download(ref download) => { 96 | let config = KeyFile::new(); 97 | config.load_from_bytes(&download.metadata().unwrap(), KeyFileFlags::NONE)?; 98 | let runtime_str = config.string("Application", "runtime").unwrap().to_string(); 99 | let mut info = runtime_str.split("/"); 100 | let app_id = info.next().unwrap().to_string(); 101 | let _ = info.next().unwrap().to_string(); 102 | let branch = info.next().unwrap().to_string(); 103 | Ok::( 104 | Flatpak::Download(app_id) 105 | .convert_to_flatpak_out(&deps_repo, &remote, &branch, true)?, 106 | ) 107 | } 108 | } 109 | }, 110 | |x| { 111 | Ok::(x.convert_to_flatpak_out( 112 | &deps_repo, 113 | &remote, 114 | &default_branch, 115 | true, 116 | )?) 117 | }, 118 | )?; 119 | log::debug!("Create transactions"); 120 | let deps_transaction = libflatpak::Transaction::for_installation( 121 | &deps_repo, 122 | libflatpak::gio::Cancellable::current().as_ref(), 123 | )?; 124 | let install_transaction = libflatpak::Transaction::for_installation( 125 | &install_repo, 126 | libflatpak::gio::Cancellable::current().as_ref(), 127 | )?; 128 | log::debug!("Connect operations to callback"); 129 | deps_transaction.connect_new_operation(move |_, transaction, progress| { 130 | let op_type = transaction.operation_type().clone(); 131 | let app_ref = transaction.get_ref().unwrap().to_string(); 132 | update_callback(Message::new_from(op_type, app_ref.clone(), 0.0, true)); 133 | progress.connect_changed(move |progress| { 134 | update_callback(Message::new_from( 135 | op_type, 136 | app_ref.clone(), 137 | progress.progress() as f32 / 100.0, 138 | true, 139 | )); 140 | }); 141 | }); 142 | install_transaction.connect_new_operation(move |_, transaction, progress| { 143 | let op_type = transaction.operation_type().clone(); 144 | let app_ref = transaction.get_ref().unwrap().to_string(); 145 | update_callback(Message::new_from(op_type, app_ref.clone(), 0.0, false)); 146 | progress.connect_changed(move |progress| { 147 | update_callback(Message::new_from( 148 | op_type, 149 | app_ref.clone(), 150 | progress.progress() as f32 / 100.0, 151 | false, 152 | )); 153 | }); 154 | }); 155 | log::debug!("Add installation command to dependency transaction"); 156 | if let Err(e) = match runtime { 157 | FlatpakOut::Bundle(ref bundle) => deps_transaction 158 | .add_install_bundle(&bundle.file().unwrap(), None) 159 | .map_err(|e| FlatpakExtError::from(e)), 160 | FlatpakOut::Download(ref download) => deps_transaction 161 | .add_install( 162 | &download.remote_name().unwrap(), 163 | &download.format_ref().unwrap(), 164 | &[], 165 | ) 166 | .map_err(|e| FlatpakExtError::from(e)), 167 | } { 168 | log::warn!("Could not install dependency: {:?}", e); 169 | } 170 | log::debug!("Run dependency transaction."); 171 | deps_transaction.run(libflatpak::gio::Cancellable::current().as_ref())?; 172 | log::debug!("Set up sideload repo..."); 173 | install_transaction 174 | .add_sideload_repo(&deps_repo.path().unwrap().path().unwrap().to_string_lossy()); 175 | log::debug!("Add installation command to install transaction"); 176 | if let Err(e) = match app { 177 | FlatpakOut::Bundle(ref bundle) => install_transaction 178 | .add_install_bundle(&bundle.file().unwrap(), None) 179 | .map_err(|e| FlatpakExtError::from(e)), 180 | FlatpakOut::Download(ref download) => install_transaction 181 | .add_install( 182 | &download.remote_name().unwrap(), 183 | &download.format_ref().unwrap(), 184 | &[], 185 | ) 186 | .map_err(|e| FlatpakExtError::from(e)), 187 | } { 188 | log::error!("Could not install app: {:?}", e); 189 | panic!() 190 | } 191 | log::debug!("Add deps as dependency source"); 192 | install_transaction.add_dependency_source(&deps_repo); 193 | log::debug!("Run install transaction"); 194 | install_transaction.run(libflatpak::gio::Cancellable::current().as_ref())?; 195 | log::debug!("Run instance"); 196 | 197 | let inst = match app { 198 | FlatpakOut::Bundle(bundle) => install_repo.launch_full( 199 | LaunchFlags::DO_NOT_REAP, 200 | &bundle.name().unwrap(), 201 | bundle.arch().as_deref(), 202 | bundle.branch().as_deref(), 203 | None, 204 | libflatpak::gio::Cancellable::current().as_ref(), 205 | )?, 206 | FlatpakOut::Download(download) => install_repo.launch_full( 207 | LaunchFlags::DO_NOT_REAP, 208 | &download.name().unwrap(), 209 | download.arch().as_deref(), 210 | download.branch().as_deref(), 211 | None, 212 | libflatpak::gio::Cancellable::current().as_ref(), 213 | )?, 214 | }; 215 | // Track instance 216 | let pid = Pid::from_raw(inst.pid()).unwrap(); 217 | let mut signals = Signals::new(&[SIGINT])?; 218 | 219 | thread::spawn(move || { 220 | for sig in signals.forever() { 221 | log::info!("Received signal {:?}", sig); 222 | let _ = 223 | rustix::process::kill_process(pid, rustix::process::Signal::from_raw(sig).unwrap()); 224 | } 225 | }); 226 | 227 | log::debug!("Waiting on instance to close..."); 228 | while !rustix::process::waitpid(Some(pid), WaitOptions::empty()) 229 | .is_ok_and(|x| x.is_some_and(|y| y.exited() || y.signaled())) 230 | {} 231 | log::debug!("Drop repos"); 232 | drop(install_repo); 233 | drop(deps_at); 234 | Ok(()) 235 | } 236 | -------------------------------------------------------------------------------- /src/types.rs: -------------------------------------------------------------------------------- 1 | use std::{env, fs::remove_dir_all, path::PathBuf}; 2 | 3 | use libflatpak::{ 4 | gio::prelude::FileExt, 5 | prelude::{InstallationExt, RemoteExt}, 6 | BundleRef, RefKind, 7 | }; 8 | use rand::{distributions::Alphanumeric, thread_rng, Rng}; 9 | 10 | #[derive(Debug)] 11 | pub enum FlatpakExtError { 12 | Glib(libflatpak::glib::Error), 13 | IO(std::io::Error), 14 | Reqwest(reqwest::Error), 15 | } 16 | 17 | impl From for FlatpakExtError { 18 | fn from(value: std::io::Error) -> Self { 19 | Self::IO(value) 20 | } 21 | } 22 | 23 | impl From for FlatpakExtError { 24 | fn from(value: libflatpak::glib::Error) -> Self { 25 | Self::Glib(value) 26 | } 27 | } 28 | 29 | impl From for FlatpakExtError { 30 | fn from(value: reqwest::Error) -> Self { 31 | Self::Reqwest(value) 32 | } 33 | } 34 | 35 | #[derive(Clone, Debug)] 36 | pub enum Flatpak { 37 | Bundle(PathBuf), 38 | Download(String), 39 | } 40 | 41 | #[derive(Clone, Debug)] 42 | pub enum FlatpakOut { 43 | Bundle(libflatpak::BundleRef), 44 | Download(libflatpak::RemoteRef), 45 | } 46 | 47 | impl Flatpak { 48 | pub fn convert_to_flatpak_out( 49 | &self, 50 | installation: &libflatpak::Installation, 51 | remote: &libflatpak::Remote, 52 | branch: &String, 53 | is_runtime: bool, 54 | ) -> Result { 55 | match self { 56 | Flatpak::Bundle(path) => { 57 | let bundle_path = libflatpak::gio::File::for_path(&path); 58 | let bundle = BundleRef::new(&bundle_path)?; 59 | Ok(FlatpakOut::Bundle(bundle)) 60 | } 61 | Flatpak::Download(app_id) => { 62 | Ok(FlatpakOut::Download(installation.fetch_remote_ref_sync( 63 | &remote.name().unwrap(), 64 | if is_runtime { 65 | RefKind::Runtime 66 | } else { 67 | RefKind::App 68 | }, 69 | &app_id, 70 | libflatpak::default_arch().as_deref(), 71 | Some(&branch), 72 | libflatpak::gio::Cancellable::current().as_ref(), 73 | )?)) 74 | } 75 | } 76 | } 77 | } 78 | 79 | #[derive(Clone, Debug)] 80 | /// A remote to download from 81 | pub struct Remote { 82 | /// uri to a .flatpakrepo file (can be a URL or a file path) 83 | uri: String, 84 | name: String, 85 | pub default_branch: String, 86 | } 87 | 88 | impl Default for Remote { 89 | fn default() -> Self { 90 | Remote { 91 | uri: "https://dl.flathub.org/repo/flathub.flatpakrepo".into(), 92 | name: "flathub".into(), 93 | default_branch: "stable".into(), 94 | } 95 | } 96 | } 97 | 98 | impl Remote { 99 | pub fn new(uri: String) -> Self { 100 | Remote { 101 | uri: uri.clone(), 102 | name: uri.clone(), 103 | default_branch: "master".into(), 104 | } 105 | } 106 | } 107 | 108 | impl TryFrom for libflatpak::Remote { 109 | fn try_from(value: Remote) -> Result { 110 | log::trace!("Loading bytes from uri: '{}'", value.uri); 111 | let bytes = uri_to_bytes(value.uri)?; 112 | let remote = libflatpak::Remote::from_file(&value.name, &bytes)?; 113 | if remote.name().unwrap().to_string() == "flathub".to_string() { 114 | remote.set_default_branch("stable"); 115 | } 116 | Ok(remote) 117 | } 118 | 119 | type Error = FlatpakExtError; 120 | } 121 | 122 | pub fn uri_to_bytes(uri: String) -> Result { 123 | if uri.starts_with("file://") { 124 | Ok( 125 | libflatpak::gio::File::for_path(&uri.split_once("file://").unwrap().0) 126 | .load_bytes(libflatpak::gio::Cancellable::current().as_ref())? 127 | .0, 128 | ) 129 | } else { 130 | Ok(libflatpak::glib::Bytes::from_owned( 131 | reqwest::blocking::get(uri)?.bytes().unwrap(), 132 | )) 133 | } 134 | } 135 | 136 | #[derive(Clone, Debug, Default)] 137 | /// An abstraction representing a flatpak repository 138 | pub enum Repo { 139 | /// A temporary repo that is intended to be deleted when the value is dropped 140 | /// > **WARNING:** Only enter in a directory that should be deleted when dropped 141 | Temp(PathBuf), 142 | /// The default System repo 143 | #[default] 144 | System, 145 | /// The default User repo 146 | User, 147 | /// A static repo that will persist after the execution of this program 148 | /// `user`=`true` for `--user`, `user`=`false` for `--system` 149 | Static { path: PathBuf, user: bool }, 150 | } 151 | 152 | impl Repo { 153 | /// Creates a new temp repo in the default tmp directory 154 | pub fn temp() -> Self { 155 | let path = env::temp_dir(); 156 | Self::temp_in(path) 157 | } 158 | 159 | /// Creates a new temp repo in the specified directory 160 | pub fn temp_in(path: PathBuf) -> Self { 161 | let foldername: String = thread_rng() 162 | .sample_iter(&Alphanumeric) 163 | .take(7) 164 | .map(char::from) 165 | .collect(); 166 | let temp_repo = path.join(format!(".tmp{}", foldername)); 167 | Repo::Temp(temp_repo) 168 | } 169 | } 170 | 171 | impl Drop for Repo { 172 | fn drop(&mut self) { 173 | if let Self::Temp(path) = self { 174 | log::debug!("Dropping TempRepo: {}", &path.to_string_lossy()); 175 | let _ = remove_dir_all(&path); 176 | } 177 | } 178 | } 179 | 180 | pub fn get_installation(value: &Repo) -> Result { 181 | match value { 182 | Repo::Temp(ref path) => { 183 | let repo_file = libflatpak::gio::File::for_path(path); 184 | // Create installation 185 | Ok(libflatpak::Installation::for_path( 186 | &repo_file, 187 | true, 188 | libflatpak::gio::Cancellable::current().as_ref(), 189 | )?) 190 | } 191 | Repo::Static { ref path, user } => { 192 | let repo_file = libflatpak::gio::File::for_path(path); 193 | Ok(libflatpak::Installation::for_path( 194 | &repo_file, 195 | *user, 196 | libflatpak::gio::Cancellable::current().as_ref(), 197 | )?) 198 | } 199 | Repo::System => Ok(libflatpak::Installation::new_system( 200 | libflatpak::gio::Cancellable::current().as_ref(), 201 | )?), 202 | Repo::User => Ok(libflatpak::Installation::new_user( 203 | libflatpak::gio::Cancellable::current().as_ref(), 204 | )?), 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /src/utils.rs: -------------------------------------------------------------------------------- 1 | use std::path::{Path, PathBuf}; 2 | 3 | pub fn path_from_uri(uri: String) -> PathBuf { 4 | if uri.starts_with("file://") { 5 | Path::new(uri.split_once("file://").unwrap().1).to_path_buf() 6 | } else { 7 | Path::new(&uri).to_path_buf() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tools/generate-sources.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | __license__ = 'MIT' 4 | import json 5 | from urllib.parse import urlparse, ParseResult, parse_qs 6 | import os 7 | import contextlib 8 | import copy 9 | import glob 10 | import subprocess 11 | import argparse 12 | import logging 13 | import hashlib 14 | import asyncio 15 | from typing import Any, Dict, List, NamedTuple, Optional, Tuple, TypedDict 16 | 17 | import aiohttp 18 | import toml 19 | 20 | CRATES_IO = 'https://static.crates.io/crates' 21 | CARGO_HOME = 'cargo' 22 | CARGO_CRATES = f'{CARGO_HOME}/vendor' 23 | VENDORED_SOURCES = 'vendored-sources' 24 | GIT_CACHE = 'flatpak-cargo/git' 25 | COMMIT_LEN = 7 26 | 27 | 28 | @contextlib.contextmanager 29 | def workdir(path: str): 30 | oldpath = os.getcwd() 31 | os.chdir(path) 32 | try: 33 | yield 34 | finally: 35 | os.chdir(oldpath) 36 | 37 | 38 | def canonical_url(url: str) -> ParseResult: 39 | 'Converts a string to a Cargo Canonical URL, as per https://github.com/rust-lang/cargo/blob/35c55a93200c84a4de4627f1770f76a8ad268a39/src/cargo/util/canonical_url.rs#L19' 40 | # Hrm. The upstream cargo does not replace those URLs, but if we don't then it doesn't work too well :( 41 | url = url.replace('git+https://', 'https://') 42 | u = urlparse(url) 43 | # It seems cargo drops query and fragment 44 | u = ParseResult(u.scheme, u.netloc, u.path, '', '', '') 45 | u = u._replace(path = u.path.rstrip('/')) 46 | 47 | if u.netloc == 'github.com': 48 | u = u._replace(scheme = 'https') 49 | u = u._replace(path = u.path.lower()) 50 | 51 | if u.path.endswith('.git'): 52 | u = u._replace(path = u.path[:-len('.git')]) 53 | 54 | return u 55 | 56 | 57 | def get_git_tarball(repo_url: str, commit: str) -> str: 58 | url = canonical_url(repo_url) 59 | path = url.path.split('/')[1:] 60 | 61 | assert len(path) == 2 62 | owner = path[0] 63 | if path[1].endswith('.git'): 64 | repo = path[1].replace('.git', '') 65 | else: 66 | repo = path[1] 67 | if url.hostname == 'github.com': 68 | return f'https://codeload.{url.hostname}/{owner}/{repo}/tar.gz/{commit}' 69 | elif url.hostname.split('.')[0] == 'gitlab': # type: ignore 70 | return f'https://{url.hostname}/{owner}/{repo}/-/archive/{commit}/{repo}-{commit}.tar.gz' 71 | elif url.hostname == 'bitbucket.org': 72 | return f'https://{url.hostname}/{owner}/{repo}/get/{commit}.tar.gz' 73 | else: 74 | raise ValueError(f'Don\'t know how to get tarball for {repo_url}') 75 | 76 | 77 | async def get_remote_sha256(url: str) -> str: 78 | logging.info(f"started sha256({url})") 79 | sha256 = hashlib.sha256() 80 | async with aiohttp.ClientSession(raise_for_status=True) as http_session: 81 | async with http_session.get(url) as response: 82 | while True: 83 | data = await response.content.read(4096) 84 | if not data: 85 | break 86 | sha256.update(data) 87 | logging.info(f"done sha256({url})") 88 | return sha256.hexdigest() 89 | 90 | 91 | _TomlType = Dict[str, Any] 92 | 93 | 94 | def load_toml(tomlfile: str = 'Cargo.lock') -> _TomlType: 95 | with open(tomlfile, 'r') as f: 96 | toml_data = toml.load(f) 97 | return toml_data 98 | 99 | 100 | def git_repo_name(git_url: str, commit: str) -> str: 101 | name = canonical_url(git_url).path.split('/')[-1] 102 | return f'{name}-{commit[:COMMIT_LEN]}' 103 | 104 | 105 | def fetch_git_repo(git_url: str, commit: str) -> str: 106 | repo_dir = git_url.replace('://', '_').replace('/', '_') 107 | cache_dir = os.environ.get('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) 108 | clone_dir = os.path.join(cache_dir, 'flatpak-cargo', repo_dir) 109 | if not os.path.isdir(os.path.join(clone_dir, '.git')): 110 | subprocess.run(['git', 'clone', '--depth=1', git_url, clone_dir], check=True) 111 | rev_parse_proc = subprocess.run(['git', 'rev-parse', 'HEAD'], cwd=clone_dir, check=True, 112 | stdout=subprocess.PIPE) 113 | head = rev_parse_proc.stdout.decode().strip() 114 | if head[:COMMIT_LEN] != commit[:COMMIT_LEN]: 115 | subprocess.run(['git', 'fetch', 'origin', commit], cwd=clone_dir, check=True) 116 | subprocess.run(['git', 'checkout', commit], cwd=clone_dir, check=True) 117 | 118 | # Get the submodules as they might contain dependencies. This is a noop if 119 | # there are no submodules in the repository 120 | subprocess.run(['git', 'submodule', 'update', '--init', '--recursive'], cwd=clone_dir, check=True) 121 | 122 | return clone_dir 123 | 124 | def update_workspace_keys(pkg, workspace): 125 | for key, item in pkg.items(): 126 | # There cannot be a 'workspace' key if the item is not a dict. 127 | if not isinstance(item, dict): 128 | continue; 129 | 130 | # Recurse for keys under target.cfg(..) 131 | if key == 'target': 132 | for target in item.values(): 133 | update_workspace_keys(target, workspace) 134 | continue; 135 | # dev-dependencies and build-dependencies should reference root dependencies table from workspace 136 | elif key == 'dev-dependencies' or key == 'build-dependencies': 137 | update_workspace_keys(item, workspace.get('dependencies', None)) 138 | continue; 139 | 140 | if not workspace or not key in workspace: 141 | continue; 142 | 143 | workspace_item = workspace[key] 144 | 145 | if 'workspace' in item: 146 | if isinstance(workspace_item, dict): 147 | del item['workspace'] 148 | 149 | for dep_key, workspace_value in workspace_item.items(): 150 | # features are additive 151 | if dep_key == 'features' and 'features' in item: 152 | item['features'] += workspace_value 153 | else: 154 | item[dep_key] = workspace_value 155 | elif len(item) > 1: 156 | del item['workspace'] 157 | item.update({ 'version': workspace_item }) 158 | else: 159 | pkg[key] = workspace_item 160 | else: 161 | update_workspace_keys(item, workspace_item) 162 | 163 | class _GitPackage(NamedTuple): 164 | path: str 165 | package: _TomlType 166 | workspace: Optional[_TomlType] 167 | 168 | @property 169 | def normalized(self) -> _TomlType: 170 | package = copy.deepcopy(self.package) 171 | if self.workspace is None: 172 | return package 173 | 174 | update_workspace_keys(package, self.workspace) 175 | 176 | return package 177 | 178 | _GitPackagesType = Dict[str, _GitPackage] 179 | 180 | 181 | async def get_git_repo_packages(git_url: str, commit: str) -> _GitPackagesType: 182 | logging.info('Loading packages from %s', git_url) 183 | git_repo_dir = fetch_git_repo(git_url, commit) 184 | packages: _GitPackagesType = {} 185 | 186 | def get_cargo_toml_packages(root_dir: str, workspace: Optional[_TomlType] = None): 187 | assert not os.path.isabs(root_dir) and os.path.isdir(root_dir) 188 | 189 | with workdir(root_dir): 190 | if os.path.exists('Cargo.toml'): 191 | cargo_toml = load_toml('Cargo.toml') 192 | workspace = cargo_toml.get('workspace') or workspace 193 | 194 | if 'package' in cargo_toml: 195 | packages[cargo_toml['package']['name']] = _GitPackage( 196 | path=os.path.normpath(root_dir), 197 | package=cargo_toml, 198 | workspace=workspace 199 | ) 200 | for child in os.scandir(root_dir): 201 | if child.is_dir(): 202 | # the workspace can be referenced by any subdirectory 203 | get_cargo_toml_packages(child.path, workspace) 204 | 205 | with workdir(git_repo_dir): 206 | get_cargo_toml_packages('.') 207 | 208 | assert packages, f"No packages found in {git_repo_dir}" 209 | logging.debug( 210 | 'Packages in %s:\n%s', 211 | git_url, 212 | json.dumps( 213 | {k: v.path for k, v in packages.items()}, 214 | indent=4, 215 | ), 216 | ) 217 | return packages 218 | 219 | 220 | _FlatpakSourceType = Dict[str, Any] 221 | 222 | 223 | async def get_git_repo_sources( 224 | url: str, 225 | commit: str, 226 | tarball: bool = False, 227 | ) -> List[_FlatpakSourceType]: 228 | name = git_repo_name(url, commit) 229 | if tarball: 230 | tarball_url = get_git_tarball(url, commit) 231 | git_repo_sources = [{ 232 | 'type': 'archive', 233 | 'archive-type': 'tar-gzip', 234 | 'url': tarball_url, 235 | 'sha256': await get_remote_sha256(tarball_url), 236 | 'dest': f'{GIT_CACHE}/{name}', 237 | }] 238 | else: 239 | git_repo_sources = [{ 240 | 'type': 'git', 241 | 'url': url, 242 | 'commit': commit, 243 | 'dest': f'{GIT_CACHE}/{name}', 244 | }] 245 | return git_repo_sources 246 | 247 | 248 | _GitRepo = TypedDict('_GitRepo', {'lock': asyncio.Lock, 'commits': Dict[str, _GitPackagesType]}) 249 | _GitReposType = Dict[str, _GitRepo] 250 | _VendorEntryType = Dict[str, Dict[str, str]] 251 | 252 | 253 | async def get_git_package_sources( 254 | package: _TomlType, 255 | git_repos: _GitReposType, 256 | ) -> Tuple[List[_FlatpakSourceType], _VendorEntryType]: 257 | name = package['name'] 258 | source = package['source'] 259 | commit = urlparse(source).fragment 260 | assert commit, 'The commit needs to be indicated in the fragement part' 261 | canonical = canonical_url(source) 262 | repo_url = canonical.geturl() 263 | 264 | git_repo = git_repos.setdefault(repo_url, { 265 | 'commits': {}, 266 | 'lock': asyncio.Lock(), 267 | }) 268 | async with git_repo['lock']: 269 | if commit not in git_repo['commits']: 270 | git_repo['commits'][commit] = await get_git_repo_packages(repo_url, commit) 271 | 272 | cargo_vendored_entry: _VendorEntryType = { 273 | repo_url: { 274 | 'git': repo_url, 275 | 'replace-with': VENDORED_SOURCES, 276 | } 277 | } 278 | rev = parse_qs(urlparse(source).query).get('rev') 279 | tag = parse_qs(urlparse(source).query).get('tag') 280 | branch = parse_qs(urlparse(source).query).get('branch') 281 | if rev: 282 | assert len(rev) == 1 283 | cargo_vendored_entry[repo_url]['rev'] = rev[0] 284 | elif tag: 285 | assert len(tag) == 1 286 | cargo_vendored_entry[repo_url]['tag'] = tag[0] 287 | elif branch: 288 | assert len(branch) == 1 289 | cargo_vendored_entry[repo_url]['branch'] = branch[0] 290 | 291 | logging.info("Adding package %s from %s", name, repo_url) 292 | git_pkg = git_repo['commits'][commit][name] 293 | pkg_repo_dir = os.path.join(GIT_CACHE, git_repo_name(repo_url, commit), git_pkg.path) 294 | git_sources: List[_FlatpakSourceType] = [ 295 | { 296 | 'type': 'shell', 297 | 'commands': [ 298 | f'cp -r --reflink=auto "{pkg_repo_dir}" "{CARGO_CRATES}/{name}"' 299 | ], 300 | }, 301 | { 302 | 'type': 'inline', 303 | 'contents': toml.dumps(git_pkg.normalized), 304 | 'dest': f'{CARGO_CRATES}/{name}', #-{version}', 305 | 'dest-filename': 'Cargo.toml', 306 | }, 307 | { 308 | 'type': 'inline', 309 | 'contents': json.dumps({'package': None, 'files': {}}), 310 | 'dest': f'{CARGO_CRATES}/{name}', #-{version}', 311 | 'dest-filename': '.cargo-checksum.json', 312 | } 313 | ] 314 | 315 | return (git_sources, cargo_vendored_entry) 316 | 317 | 318 | async def get_package_sources( 319 | package: _TomlType, 320 | cargo_lock: _TomlType, 321 | git_repos: _GitReposType, 322 | ) -> Optional[Tuple[List[_FlatpakSourceType], _VendorEntryType]]: 323 | metadata = cargo_lock.get('metadata') 324 | name = package['name'] 325 | version = package['version'] 326 | 327 | if 'source' not in package: 328 | logging.debug('%s has no source', name) 329 | return None 330 | source = package['source'] 331 | 332 | if source.startswith('git+'): 333 | return await get_git_package_sources(package, git_repos) 334 | 335 | key = f'checksum {name} {version} ({source})' 336 | if metadata is not None and key in metadata: 337 | checksum = metadata[key] 338 | elif 'checksum' in package: 339 | checksum = package['checksum'] 340 | else: 341 | logging.warning(f'{name} doesn\'t have checksum') 342 | return None 343 | crate_sources = [ 344 | { 345 | 'type': 'archive', 346 | 'archive-type': 'tar-gzip', 347 | 'url': f'{CRATES_IO}/{name}/{name}-{version}.crate', 348 | 'sha256': checksum, 349 | 'dest': f'{CARGO_CRATES}/{name}-{version}', 350 | }, 351 | { 352 | 'type': 'inline', 353 | 'contents': json.dumps({'package': checksum, 'files': {}}), 354 | 'dest': f'{CARGO_CRATES}/{name}-{version}', 355 | 'dest-filename': '.cargo-checksum.json', 356 | }, 357 | ] 358 | return (crate_sources, {'crates-io': {'replace-with': VENDORED_SOURCES}}) 359 | 360 | 361 | async def generate_sources( 362 | cargo_lock: _TomlType, 363 | git_tarballs: bool = False, 364 | ) -> List[_FlatpakSourceType]: 365 | # { 366 | # "git-repo-url": { 367 | # "lock": asyncio.Lock(), 368 | # "commits": { 369 | # "commit-hash": { 370 | # "package-name": "./relative/package/path" 371 | # } 372 | # } 373 | # } 374 | # } 375 | git_repos: _GitReposType = {} 376 | sources: List[_FlatpakSourceType] = [] 377 | package_sources = [] 378 | cargo_vendored_sources = { 379 | VENDORED_SOURCES: {'directory': f'{CARGO_CRATES}'}, 380 | } 381 | 382 | pkg_coros = [get_package_sources(p, cargo_lock, git_repos) for p in cargo_lock['package']] 383 | for pkg in await asyncio.gather(*pkg_coros): 384 | if pkg is None: 385 | continue 386 | else: 387 | pkg_sources, cargo_vendored_entry = pkg 388 | package_sources.extend(pkg_sources) 389 | cargo_vendored_sources.update(cargo_vendored_entry) 390 | 391 | logging.debug('Adding collected git repos:\n%s', json.dumps(list(git_repos), indent=4)) 392 | git_repo_coros = [] 393 | for git_url, git_repo in git_repos.items(): 394 | for git_commit in git_repo['commits']: 395 | git_repo_coros.append(get_git_repo_sources(git_url, git_commit, git_tarballs)) 396 | sources.extend(sum(await asyncio.gather(*git_repo_coros), [])) 397 | 398 | sources.extend(package_sources) 399 | 400 | logging.debug('Vendored sources:\n%s', json.dumps(cargo_vendored_sources, indent=4)) 401 | sources.append({ 402 | 'type': 'inline', 403 | 'contents': toml.dumps({ 404 | 'source': cargo_vendored_sources, 405 | }), 406 | 'dest': CARGO_HOME, 407 | 'dest-filename': 'config' 408 | }) 409 | return sources 410 | 411 | 412 | def main(): 413 | parser = argparse.ArgumentParser() 414 | parser.add_argument('cargo_lock', help='Path to the Cargo.lock file') 415 | parser.add_argument('-o', '--output', required=False, help='Where to write generated sources') 416 | parser.add_argument('-t', '--git-tarballs', action='store_true', help='Download git repos as tarballs') 417 | parser.add_argument('-d', '--debug', action='store_true') 418 | args = parser.parse_args() 419 | if args.output is not None: 420 | outfile = args.output 421 | else: 422 | outfile = 'generated-sources.json' 423 | if args.debug: 424 | loglevel = logging.DEBUG 425 | else: 426 | loglevel = logging.INFO 427 | logging.basicConfig(level=loglevel) 428 | 429 | generated_sources = asyncio.run(generate_sources(load_toml(args.cargo_lock), 430 | git_tarballs=args.git_tarballs)) 431 | with open(outfile, 'w') as out: 432 | json.dump(generated_sources, out, indent=4, sort_keys=False) 433 | 434 | 435 | if __name__ == '__main__': 436 | main() --------------------------------------------------------------------------------