├── .github └── workflows │ └── ci.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md └── src ├── cargo.rs ├── config.rs ├── engine.rs ├── error.rs ├── flutter.rs ├── lib.rs ├── main.rs ├── package ├── apk.rs ├── appimage.rs └── mod.rs └── unzip.rs /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request] 2 | 3 | name: Cargo Flutter 4 | 5 | jobs: 6 | ci: 7 | strategy: 8 | fail-fast: false 9 | matrix: 10 | toolchain: 11 | - rust: stable 12 | - rust: nightly 13 | platform: 14 | - target: x86_64-unknown-linux-gnu 15 | host: ubuntu-latest 16 | - target: x86_64-apple-darwin 17 | host: macos-latest 18 | - target: x86_64-pc-windows-msvc 19 | host: windows-latest 20 | env: 21 | RUST_BACKTRACE: 1 22 | CARGO_INCREMENTAL: 0 23 | 24 | runs-on: ${{ matrix.platform.host }} 25 | steps: 26 | - name: Checkout sources 27 | uses: actions/checkout@v2 28 | 29 | - name: Cache cargo folder 30 | uses: actions/cache@v1 31 | with: 32 | path: ~/.cargo 33 | key: ${{ matrix.platform.target }}-cargo-${{ matrix.toolchain.rust }} 34 | 35 | - name: Install rust toolchain 36 | uses: hecrj/setup-rust-action@v1 37 | with: 38 | rust-version: ${{ matrix.toolchain.rust }} 39 | 40 | - name: Build 41 | run: cargo build 42 | 43 | - name: Test 44 | run: cargo test 45 | 46 | lint: 47 | runs-on: ubuntu-latest 48 | steps: 49 | - name: Checkout sources 50 | uses: actions/checkout@v1 51 | 52 | - name: Install rust toolchain 53 | uses: hecrj/setup-rust-action@v1 54 | with: 55 | rust-version: stable 56 | components: clippy, rustfmt 57 | 58 | - name: cargo fmt 59 | run: cargo fmt --all -- --check 60 | 61 | - name: cargo clippy 62 | run: cargo clippy -- -D warnings 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "adler32" 5 | version = "1.0.4" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | 8 | [[package]] 9 | name = "aho-corasick" 10 | version = "0.7.6" 11 | source = "registry+https://github.com/rust-lang/crates.io-index" 12 | dependencies = [ 13 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 14 | ] 15 | 16 | [[package]] 17 | name = "ansi_term" 18 | version = "0.11.0" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | dependencies = [ 21 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 22 | ] 23 | 24 | [[package]] 25 | name = "anyhow" 26 | version = "1.0.26" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | 29 | [[package]] 30 | name = "arrayref" 31 | version = "0.3.5" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | 34 | [[package]] 35 | name = "arrayvec" 36 | version = "0.5.1" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | 39 | [[package]] 40 | name = "atty" 41 | version = "0.2.14" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | dependencies = [ 44 | "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 45 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 46 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 47 | ] 48 | 49 | [[package]] 50 | name = "autocfg" 51 | version = "0.1.7" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | 54 | [[package]] 55 | name = "backtrace" 56 | version = "0.3.40" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | dependencies = [ 59 | "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 60 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 61 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 62 | "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 63 | ] 64 | 65 | [[package]] 66 | name = "backtrace-sys" 67 | version = "0.1.32" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | dependencies = [ 70 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 72 | ] 73 | 74 | [[package]] 75 | name = "base64" 76 | version = "0.10.1" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | dependencies = [ 79 | "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 80 | ] 81 | 82 | [[package]] 83 | name = "base64" 84 | version = "0.11.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | 87 | [[package]] 88 | name = "bitflags" 89 | version = "1.2.1" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | 92 | [[package]] 93 | name = "blake2b_simd" 94 | version = "0.5.10" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | dependencies = [ 97 | "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 98 | "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 99 | "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 100 | ] 101 | 102 | [[package]] 103 | name = "bstr" 104 | version = "0.2.8" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | dependencies = [ 107 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 108 | ] 109 | 110 | [[package]] 111 | name = "bumpalo" 112 | version = "3.1.2" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | 115 | [[package]] 116 | name = "byteorder" 117 | version = "1.3.2" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | 120 | [[package]] 121 | name = "bytesize" 122 | version = "1.0.0" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | 125 | [[package]] 126 | name = "bzip2" 127 | version = "0.3.3" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | dependencies = [ 130 | "bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 131 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 132 | ] 133 | 134 | [[package]] 135 | name = "bzip2-sys" 136 | version = "0.1.7" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | dependencies = [ 139 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 140 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 141 | ] 142 | 143 | [[package]] 144 | name = "c2-chacha" 145 | version = "0.2.3" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | dependencies = [ 148 | "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 149 | ] 150 | 151 | [[package]] 152 | name = "cargo" 153 | version = "0.41.0" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | dependencies = [ 156 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 157 | "bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 158 | "cargo-platform 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 160 | "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 161 | "crates-io 0.29.0 (registry+https://github.com/rust-lang/crates.io-index)", 162 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 163 | "crypto-hash 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 164 | "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 165 | "curl-sys 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 166 | "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 167 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 169 | "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 170 | "fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 171 | "fwdansi 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 172 | "git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", 173 | "git2-curl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 174 | "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 175 | "hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 176 | "home 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 177 | "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 178 | "ignore 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 179 | "im-rc 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 180 | "jobserver 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", 181 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 182 | "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 183 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 184 | "libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", 185 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 186 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 187 | "miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "opener 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 190 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 191 | "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 192 | "rustc-workspace-hack 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 193 | "rustfix 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 194 | "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 195 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 196 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 197 | "serde_ignored 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 198 | "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", 199 | "shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 200 | "strip-ansi-escapes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 201 | "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", 202 | "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 203 | "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 204 | "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 205 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 206 | "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 207 | "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", 208 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 209 | ] 210 | 211 | [[package]] 212 | name = "cargo-flutter" 213 | version = "0.1.12" 214 | dependencies = [ 215 | "cargo 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)", 216 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 217 | "copy_dir 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 218 | "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 219 | "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 220 | "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 221 | "exitfailure 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 222 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 223 | "lib-cargo-apk 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 224 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 225 | "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 226 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 227 | "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 228 | "ureq 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 229 | "which 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 230 | "zip 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", 231 | ] 232 | 233 | [[package]] 234 | name = "cargo-platform" 235 | version = "0.1.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | dependencies = [ 238 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 239 | ] 240 | 241 | [[package]] 242 | name = "cc" 243 | version = "1.0.50" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | dependencies = [ 246 | "jobserver 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", 247 | ] 248 | 249 | [[package]] 250 | name = "cfg-if" 251 | version = "0.1.10" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | 254 | [[package]] 255 | name = "chunked_transfer" 256 | version = "1.0.0" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | 259 | [[package]] 260 | name = "clap" 261 | version = "2.33.0" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | dependencies = [ 264 | "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 265 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 266 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 267 | "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 268 | "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 269 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 270 | "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 271 | ] 272 | 273 | [[package]] 274 | name = "cloudabi" 275 | version = "0.0.3" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | dependencies = [ 278 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 279 | ] 280 | 281 | [[package]] 282 | name = "commoncrypto" 283 | version = "0.2.0" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | dependencies = [ 286 | "commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 287 | ] 288 | 289 | [[package]] 290 | name = "commoncrypto-sys" 291 | version = "0.2.0" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | dependencies = [ 294 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 295 | ] 296 | 297 | [[package]] 298 | name = "constant_time_eq" 299 | version = "0.1.4" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | 302 | [[package]] 303 | name = "cookie" 304 | version = "0.12.0" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | dependencies = [ 307 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 308 | "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", 309 | ] 310 | 311 | [[package]] 312 | name = "copy_dir" 313 | version = "0.1.2" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | dependencies = [ 316 | "walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 317 | ] 318 | 319 | [[package]] 320 | name = "core-foundation" 321 | version = "0.6.4" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | dependencies = [ 324 | "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", 325 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 326 | ] 327 | 328 | [[package]] 329 | name = "core-foundation-sys" 330 | version = "0.6.2" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | 333 | [[package]] 334 | name = "crates-io" 335 | version = "0.29.0" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | dependencies = [ 338 | "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 339 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 340 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 341 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 342 | "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 343 | "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", 344 | "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 345 | ] 346 | 347 | [[package]] 348 | name = "crc32fast" 349 | version = "1.2.0" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | dependencies = [ 352 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 353 | ] 354 | 355 | [[package]] 356 | name = "crossbeam-channel" 357 | version = "0.3.9" 358 | source = "registry+https://github.com/rust-lang/crates.io-index" 359 | dependencies = [ 360 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 361 | ] 362 | 363 | [[package]] 364 | name = "crossbeam-utils" 365 | version = "0.6.6" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | dependencies = [ 368 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 369 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 370 | ] 371 | 372 | [[package]] 373 | name = "crypto-hash" 374 | version = "0.3.4" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | dependencies = [ 377 | "commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 378 | "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 379 | "openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)", 380 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 381 | ] 382 | 383 | [[package]] 384 | name = "curl" 385 | version = "0.4.25" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | dependencies = [ 388 | "curl-sys 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 389 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 390 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 391 | "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", 392 | "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", 393 | "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 394 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 395 | ] 396 | 397 | [[package]] 398 | name = "curl-sys" 399 | version = "0.4.25" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | dependencies = [ 402 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 403 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 404 | "libnghttp2-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 405 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 406 | "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", 407 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 408 | "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 409 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 410 | ] 411 | 412 | [[package]] 413 | name = "dirs" 414 | version = "2.0.2" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | dependencies = [ 417 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 418 | "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 419 | ] 420 | 421 | [[package]] 422 | name = "dirs-sys" 423 | version = "0.3.4" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | dependencies = [ 426 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 427 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 428 | "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 429 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 430 | ] 431 | 432 | [[package]] 433 | name = "either" 434 | version = "1.5.3" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | 437 | [[package]] 438 | name = "env_logger" 439 | version = "0.7.1" 440 | source = "registry+https://github.com/rust-lang/crates.io-index" 441 | dependencies = [ 442 | "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 443 | "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 444 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 445 | "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 446 | "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 447 | ] 448 | 449 | [[package]] 450 | name = "exitfailure" 451 | version = "0.5.1" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | dependencies = [ 454 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 455 | ] 456 | 457 | [[package]] 458 | name = "failure" 459 | version = "0.1.6" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | dependencies = [ 462 | "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", 463 | "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 464 | ] 465 | 466 | [[package]] 467 | name = "failure_derive" 468 | version = "0.1.6" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | dependencies = [ 471 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 472 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 473 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 474 | "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", 475 | ] 476 | 477 | [[package]] 478 | name = "filetime" 479 | version = "0.2.8" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | dependencies = [ 482 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 483 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 484 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 485 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 486 | ] 487 | 488 | [[package]] 489 | name = "flate2" 490 | version = "1.0.13" 491 | source = "registry+https://github.com/rust-lang/crates.io-index" 492 | dependencies = [ 493 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 494 | "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 495 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 496 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 497 | "miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 498 | ] 499 | 500 | [[package]] 501 | name = "fnv" 502 | version = "1.0.6" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | 505 | [[package]] 506 | name = "foreign-types" 507 | version = "0.3.2" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | dependencies = [ 510 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 511 | ] 512 | 513 | [[package]] 514 | name = "foreign-types-shared" 515 | version = "0.1.1" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | 518 | [[package]] 519 | name = "fs2" 520 | version = "0.4.3" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | dependencies = [ 523 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 524 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 525 | ] 526 | 527 | [[package]] 528 | name = "fuchsia-cprng" 529 | version = "0.1.1" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | 532 | [[package]] 533 | name = "fwdansi" 534 | version = "1.1.0" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | dependencies = [ 537 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 538 | "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 539 | ] 540 | 541 | [[package]] 542 | name = "getrandom" 543 | version = "0.1.14" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | dependencies = [ 546 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 547 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 548 | "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", 549 | ] 550 | 551 | [[package]] 552 | name = "git2" 553 | version = "0.10.2" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | dependencies = [ 556 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 557 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 558 | "libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", 559 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 560 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 561 | "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", 562 | "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 563 | ] 564 | 565 | [[package]] 566 | name = "git2-curl" 567 | version = "0.11.0" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | dependencies = [ 570 | "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)", 571 | "git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", 572 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 573 | "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 574 | ] 575 | 576 | [[package]] 577 | name = "glob" 578 | version = "0.3.0" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | 581 | [[package]] 582 | name = "globset" 583 | version = "0.4.4" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | dependencies = [ 586 | "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", 587 | "bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 588 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 589 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 590 | "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 591 | ] 592 | 593 | [[package]] 594 | name = "heck" 595 | version = "0.3.1" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | dependencies = [ 598 | "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 599 | ] 600 | 601 | [[package]] 602 | name = "hermit-abi" 603 | version = "0.1.6" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | dependencies = [ 606 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 607 | ] 608 | 609 | [[package]] 610 | name = "hex" 611 | version = "0.3.2" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | 614 | [[package]] 615 | name = "hex" 616 | version = "0.4.0" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | 619 | [[package]] 620 | name = "home" 621 | version = "0.5.3" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | dependencies = [ 624 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 625 | ] 626 | 627 | [[package]] 628 | name = "humantime" 629 | version = "1.3.0" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | dependencies = [ 632 | "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 633 | ] 634 | 635 | [[package]] 636 | name = "idna" 637 | version = "0.1.5" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | dependencies = [ 640 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 641 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 642 | "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 643 | ] 644 | 645 | [[package]] 646 | name = "idna" 647 | version = "0.2.0" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | dependencies = [ 650 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 651 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 652 | "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 653 | ] 654 | 655 | [[package]] 656 | name = "ignore" 657 | version = "0.4.10" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | dependencies = [ 660 | "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", 661 | "globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 662 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 663 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 664 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 665 | "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 666 | "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 667 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 668 | "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", 669 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 670 | ] 671 | 672 | [[package]] 673 | name = "im-rc" 674 | version = "13.0.0" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | dependencies = [ 677 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 678 | "sized-chunks 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 679 | "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", 680 | ] 681 | 682 | [[package]] 683 | name = "itertools" 684 | version = "0.8.2" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | dependencies = [ 687 | "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 688 | ] 689 | 690 | [[package]] 691 | name = "itoa" 692 | version = "0.4.4" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | 695 | [[package]] 696 | name = "jobserver" 697 | version = "0.1.18" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | dependencies = [ 700 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 701 | ] 702 | 703 | [[package]] 704 | name = "js-sys" 705 | version = "0.3.35" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | dependencies = [ 708 | "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 709 | ] 710 | 711 | [[package]] 712 | name = "kernel32-sys" 713 | version = "0.2.2" 714 | source = "registry+https://github.com/rust-lang/crates.io-index" 715 | dependencies = [ 716 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 717 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 718 | ] 719 | 720 | [[package]] 721 | name = "lazy_static" 722 | version = "1.4.0" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | 725 | [[package]] 726 | name = "lazycell" 727 | version = "1.2.1" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | 730 | [[package]] 731 | name = "lib-cargo-apk" 732 | version = "0.5.1" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | dependencies = [ 735 | "cargo 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)", 736 | "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", 737 | "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 738 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 739 | "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 740 | "multimap 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 741 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 742 | "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 743 | ] 744 | 745 | [[package]] 746 | name = "libc" 747 | version = "0.2.66" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | 750 | [[package]] 751 | name = "libgit2-sys" 752 | version = "0.9.2" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | dependencies = [ 755 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 756 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 757 | "libssh2-sys 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", 758 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 759 | "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", 760 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 761 | ] 762 | 763 | [[package]] 764 | name = "libnghttp2-sys" 765 | version = "0.1.2" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | dependencies = [ 768 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 769 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 770 | ] 771 | 772 | [[package]] 773 | name = "libssh2-sys" 774 | version = "0.2.13" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | dependencies = [ 777 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 778 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 779 | "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", 780 | "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", 781 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 782 | "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 783 | ] 784 | 785 | [[package]] 786 | name = "libz-sys" 787 | version = "1.0.25" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | dependencies = [ 790 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 791 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 792 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 793 | "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 794 | ] 795 | 796 | [[package]] 797 | name = "log" 798 | version = "0.4.8" 799 | source = "registry+https://github.com/rust-lang/crates.io-index" 800 | dependencies = [ 801 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 802 | ] 803 | 804 | [[package]] 805 | name = "matches" 806 | version = "0.1.8" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | 809 | [[package]] 810 | name = "memchr" 811 | version = "2.2.1" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | 814 | [[package]] 815 | name = "miniz_oxide" 816 | version = "0.3.5" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | dependencies = [ 819 | "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 820 | ] 821 | 822 | [[package]] 823 | name = "miow" 824 | version = "0.3.3" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | dependencies = [ 827 | "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 828 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 829 | ] 830 | 831 | [[package]] 832 | name = "multimap" 833 | version = "0.8.0" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | dependencies = [ 836 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 837 | ] 838 | 839 | [[package]] 840 | name = "nom" 841 | version = "4.2.3" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | dependencies = [ 844 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 845 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 846 | ] 847 | 848 | [[package]] 849 | name = "num_cpus" 850 | version = "1.11.1" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | dependencies = [ 853 | "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 854 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 855 | ] 856 | 857 | [[package]] 858 | name = "opener" 859 | version = "0.4.1" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | dependencies = [ 862 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 863 | ] 864 | 865 | [[package]] 866 | name = "openssl" 867 | version = "0.10.26" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | dependencies = [ 870 | "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 871 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 872 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 873 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 874 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 875 | "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)", 876 | ] 877 | 878 | [[package]] 879 | name = "openssl-probe" 880 | version = "0.1.2" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | 883 | [[package]] 884 | name = "openssl-sys" 885 | version = "0.9.53" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | dependencies = [ 888 | "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 889 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 890 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 891 | "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", 892 | "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 893 | ] 894 | 895 | [[package]] 896 | name = "percent-encoding" 897 | version = "1.0.1" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | 900 | [[package]] 901 | name = "percent-encoding" 902 | version = "2.1.0" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | 905 | [[package]] 906 | name = "pkg-config" 907 | version = "0.3.17" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | 910 | [[package]] 911 | name = "podio" 912 | version = "0.1.6" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | 915 | [[package]] 916 | name = "ppv-lite86" 917 | version = "0.2.6" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | 920 | [[package]] 921 | name = "proc-macro2" 922 | version = "1.0.7" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | dependencies = [ 925 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 926 | ] 927 | 928 | [[package]] 929 | name = "qstring" 930 | version = "0.7.0" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | dependencies = [ 933 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 934 | ] 935 | 936 | [[package]] 937 | name = "quick-error" 938 | version = "1.2.3" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | 941 | [[package]] 942 | name = "quote" 943 | version = "1.0.2" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | dependencies = [ 946 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 947 | ] 948 | 949 | [[package]] 950 | name = "rand" 951 | version = "0.7.3" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | dependencies = [ 954 | "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 955 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 956 | "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 957 | "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 958 | "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 959 | ] 960 | 961 | [[package]] 962 | name = "rand_chacha" 963 | version = "0.2.1" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | dependencies = [ 966 | "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 967 | "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 968 | ] 969 | 970 | [[package]] 971 | name = "rand_core" 972 | version = "0.3.1" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | dependencies = [ 975 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 976 | ] 977 | 978 | [[package]] 979 | name = "rand_core" 980 | version = "0.4.2" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | 983 | [[package]] 984 | name = "rand_core" 985 | version = "0.5.1" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | dependencies = [ 988 | "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 989 | ] 990 | 991 | [[package]] 992 | name = "rand_hc" 993 | version = "0.2.0" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | dependencies = [ 996 | "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 997 | ] 998 | 999 | [[package]] 1000 | name = "rand_os" 1001 | version = "0.1.3" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | dependencies = [ 1004 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1005 | "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1006 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1007 | "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1008 | "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1009 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "rdrand" 1014 | version = "0.4.0" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | dependencies = [ 1017 | "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "redox_syscall" 1022 | version = "0.1.56" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | 1025 | [[package]] 1026 | name = "redox_users" 1027 | version = "0.3.1" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | dependencies = [ 1030 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1031 | "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1032 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1033 | "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1034 | ] 1035 | 1036 | [[package]] 1037 | name = "regex" 1038 | version = "1.3.1" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | dependencies = [ 1041 | "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", 1042 | "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1043 | "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", 1044 | "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "regex-syntax" 1049 | version = "0.6.12" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | 1052 | [[package]] 1053 | name = "remove_dir_all" 1054 | version = "0.5.2" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | dependencies = [ 1057 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "ring" 1062 | version = "0.16.9" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | dependencies = [ 1065 | "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", 1066 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1067 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1068 | "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 1069 | "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1070 | "web-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", 1071 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "rust-argon2" 1076 | version = "0.5.1" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | dependencies = [ 1079 | "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 1080 | "blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", 1081 | "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "rustc-demangle" 1086 | version = "0.1.16" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | 1089 | [[package]] 1090 | name = "rustc-workspace-hack" 1091 | version = "1.0.0" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | 1094 | [[package]] 1095 | name = "rustc_version" 1096 | version = "0.2.3" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | dependencies = [ 1099 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | ] 1101 | 1102 | [[package]] 1103 | name = "rustfix" 1104 | version = "0.4.6" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | dependencies = [ 1107 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1108 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1109 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1110 | "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "rustls" 1115 | version = "0.16.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | dependencies = [ 1118 | "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 1119 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1120 | "ring 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", 1121 | "sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 1122 | "webpki 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", 1123 | ] 1124 | 1125 | [[package]] 1126 | name = "ryu" 1127 | version = "1.0.2" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | 1130 | [[package]] 1131 | name = "same-file" 1132 | version = "1.0.5" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | dependencies = [ 1135 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "schannel" 1140 | version = "0.1.16" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | dependencies = [ 1143 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1144 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1145 | ] 1146 | 1147 | [[package]] 1148 | name = "sct" 1149 | version = "0.6.0" 1150 | source = "registry+https://github.com/rust-lang/crates.io-index" 1151 | dependencies = [ 1152 | "ring 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", 1153 | "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "semver" 1158 | version = "0.9.0" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | dependencies = [ 1161 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1162 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "semver-parser" 1167 | version = "0.7.0" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | 1170 | [[package]] 1171 | name = "serde" 1172 | version = "1.0.104" 1173 | source = "registry+https://github.com/rust-lang/crates.io-index" 1174 | dependencies = [ 1175 | "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "serde_derive" 1180 | version = "1.0.104" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | dependencies = [ 1183 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1184 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "serde_ignored" 1190 | version = "0.1.1" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | dependencies = [ 1193 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "serde_json" 1198 | version = "1.0.44" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | dependencies = [ 1201 | "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1202 | "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1203 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1204 | ] 1205 | 1206 | [[package]] 1207 | name = "shell-escape" 1208 | version = "0.1.4" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | 1211 | [[package]] 1212 | name = "sized-chunks" 1213 | version = "0.3.1" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | dependencies = [ 1216 | "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "smallvec" 1221 | version = "1.1.0" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | 1224 | [[package]] 1225 | name = "socket2" 1226 | version = "0.3.11" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | dependencies = [ 1229 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1230 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1231 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1232 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "sourcefile" 1237 | version = "0.1.4" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | 1240 | [[package]] 1241 | name = "spin" 1242 | version = "0.5.2" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | 1245 | [[package]] 1246 | name = "strip-ansi-escapes" 1247 | version = "0.1.0" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | dependencies = [ 1250 | "vte 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1251 | ] 1252 | 1253 | [[package]] 1254 | name = "strsim" 1255 | version = "0.8.0" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | 1258 | [[package]] 1259 | name = "syn" 1260 | version = "1.0.13" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | dependencies = [ 1263 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1264 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1265 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "synstructure" 1270 | version = "0.12.3" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | dependencies = [ 1273 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1274 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1275 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1276 | "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "tar" 1281 | version = "0.4.26" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | dependencies = [ 1284 | "filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1285 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1286 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "tempfile" 1291 | version = "3.1.0" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | dependencies = [ 1294 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1295 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1296 | "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", 1297 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1298 | "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 1299 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "termcolor" 1304 | version = "1.0.5" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | dependencies = [ 1307 | "wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "textwrap" 1312 | version = "0.11.0" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | dependencies = [ 1315 | "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "thread_local" 1320 | version = "0.3.6" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | dependencies = [ 1323 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1324 | ] 1325 | 1326 | [[package]] 1327 | name = "time" 1328 | version = "0.1.42" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | dependencies = [ 1331 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1332 | "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", 1333 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "toml" 1338 | version = "0.5.5" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | dependencies = [ 1341 | "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "typenum" 1346 | version = "1.11.2" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | 1349 | [[package]] 1350 | name = "unicode-bidi" 1351 | version = "0.3.4" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | dependencies = [ 1354 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1355 | ] 1356 | 1357 | [[package]] 1358 | name = "unicode-normalization" 1359 | version = "0.1.11" 1360 | source = "registry+https://github.com/rust-lang/crates.io-index" 1361 | dependencies = [ 1362 | "smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "unicode-segmentation" 1367 | version = "1.6.0" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | 1370 | [[package]] 1371 | name = "unicode-width" 1372 | version = "0.1.7" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | 1375 | [[package]] 1376 | name = "unicode-xid" 1377 | version = "0.2.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | 1380 | [[package]] 1381 | name = "untrusted" 1382 | version = "0.7.0" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | 1385 | [[package]] 1386 | name = "ureq" 1387 | version = "0.11.3" 1388 | source = "registry+https://github.com/rust-lang/crates.io-index" 1389 | dependencies = [ 1390 | "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", 1391 | "chunked_transfer 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1392 | "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", 1393 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1394 | "qstring 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1395 | "rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", 1396 | "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", 1397 | "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1398 | "webpki 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", 1399 | "webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "url" 1404 | version = "1.7.2" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | dependencies = [ 1407 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1408 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1409 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "url" 1414 | version = "2.1.0" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | dependencies = [ 1417 | "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1418 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1419 | "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1420 | ] 1421 | 1422 | [[package]] 1423 | name = "utf8parse" 1424 | version = "0.1.1" 1425 | source = "registry+https://github.com/rust-lang/crates.io-index" 1426 | 1427 | [[package]] 1428 | name = "vcpkg" 1429 | version = "0.2.8" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | 1432 | [[package]] 1433 | name = "vec_map" 1434 | version = "0.8.1" 1435 | source = "registry+https://github.com/rust-lang/crates.io-index" 1436 | 1437 | [[package]] 1438 | name = "version_check" 1439 | version = "0.1.5" 1440 | source = "registry+https://github.com/rust-lang/crates.io-index" 1441 | 1442 | [[package]] 1443 | name = "vte" 1444 | version = "0.3.3" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | dependencies = [ 1447 | "utf8parse 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "walkdir" 1452 | version = "0.1.8" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | dependencies = [ 1455 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1456 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "walkdir" 1461 | version = "2.2.9" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | dependencies = [ 1464 | "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 1465 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1466 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1467 | ] 1468 | 1469 | [[package]] 1470 | name = "wasi" 1471 | version = "0.9.0+wasi-snapshot-preview1" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | 1474 | [[package]] 1475 | name = "wasm-bindgen" 1476 | version = "0.2.58" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | dependencies = [ 1479 | "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 1480 | "wasm-bindgen-macro 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1481 | ] 1482 | 1483 | [[package]] 1484 | name = "wasm-bindgen-backend" 1485 | version = "0.2.58" 1486 | source = "registry+https://github.com/rust-lang/crates.io-index" 1487 | dependencies = [ 1488 | "bumpalo 3.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1489 | "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1490 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1491 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1492 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1493 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1494 | "wasm-bindgen-shared 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1495 | ] 1496 | 1497 | [[package]] 1498 | name = "wasm-bindgen-macro" 1499 | version = "0.2.58" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | dependencies = [ 1502 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1503 | "wasm-bindgen-macro-support 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "wasm-bindgen-macro-support" 1508 | version = "0.2.58" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | dependencies = [ 1511 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1512 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1513 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1514 | "wasm-bindgen-backend 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1515 | "wasm-bindgen-shared 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1516 | ] 1517 | 1518 | [[package]] 1519 | name = "wasm-bindgen-shared" 1520 | version = "0.2.58" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | 1523 | [[package]] 1524 | name = "wasm-bindgen-webidl" 1525 | version = "0.2.58" 1526 | source = "registry+https://github.com/rust-lang/crates.io-index" 1527 | dependencies = [ 1528 | "anyhow 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", 1529 | "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1530 | "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1531 | "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1532 | "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1533 | "syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1534 | "wasm-bindgen-backend 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1535 | "weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "web-sys" 1540 | version = "0.3.35" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | dependencies = [ 1543 | "anyhow 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", 1544 | "js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", 1545 | "sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1546 | "wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1547 | "wasm-bindgen-webidl 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "webpki" 1552 | version = "0.21.0" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | dependencies = [ 1555 | "ring 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", 1556 | "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1557 | ] 1558 | 1559 | [[package]] 1560 | name = "webpki-roots" 1561 | version = "0.18.0" 1562 | source = "registry+https://github.com/rust-lang/crates.io-index" 1563 | dependencies = [ 1564 | "webpki 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", 1565 | ] 1566 | 1567 | [[package]] 1568 | name = "weedle" 1569 | version = "0.10.0" 1570 | source = "registry+https://github.com/rust-lang/crates.io-index" 1571 | dependencies = [ 1572 | "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1573 | ] 1574 | 1575 | [[package]] 1576 | name = "which" 1577 | version = "3.1.0" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | dependencies = [ 1580 | "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1581 | "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", 1582 | ] 1583 | 1584 | [[package]] 1585 | name = "winapi" 1586 | version = "0.2.8" 1587 | source = "registry+https://github.com/rust-lang/crates.io-index" 1588 | 1589 | [[package]] 1590 | name = "winapi" 1591 | version = "0.3.8" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | dependencies = [ 1594 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1595 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1596 | ] 1597 | 1598 | [[package]] 1599 | name = "winapi-build" 1600 | version = "0.1.1" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | 1603 | [[package]] 1604 | name = "winapi-i686-pc-windows-gnu" 1605 | version = "0.4.0" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | 1608 | [[package]] 1609 | name = "winapi-util" 1610 | version = "0.1.2" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | dependencies = [ 1613 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1614 | ] 1615 | 1616 | [[package]] 1617 | name = "winapi-x86_64-pc-windows-gnu" 1618 | version = "0.4.0" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | 1621 | [[package]] 1622 | name = "wincolor" 1623 | version = "1.0.2" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | dependencies = [ 1626 | "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1627 | "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1628 | ] 1629 | 1630 | [[package]] 1631 | name = "zip" 1632 | version = "0.5.4" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | dependencies = [ 1635 | "bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1636 | "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1637 | "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)", 1638 | "podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1639 | "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", 1640 | ] 1641 | 1642 | [metadata] 1643 | "checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" 1644 | "checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" 1645 | "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 1646 | "checksum anyhow 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "7825f6833612eb2414095684fcf6c635becf3ce97fe48cf6421321e93bfbd53c" 1647 | "checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" 1648 | "checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" 1649 | "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 1650 | "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" 1651 | "checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" 1652 | "checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" 1653 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 1654 | "checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" 1655 | "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 1656 | "checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" 1657 | "checksum bstr 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245" 1658 | "checksum bumpalo 3.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb8038c1ddc0a5f73787b130f4cc75151e96ed33e417fde765eb5a81e3532f4" 1659 | "checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" 1660 | "checksum bytesize 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "716960a18f978640f25101b5cbf1c6f6b0d3192fab36a2d98ca96f0ecbe41010" 1661 | "checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b" 1662 | "checksum bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6584aa36f5ad4c9247f5323b0a42f37802b37a836f0ad87084d7a33961abe25f" 1663 | "checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" 1664 | "checksum cargo 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2737475f76ce9681e230a4e5cb2476fb133875f28fd84a834a6b5aefd83d3741" 1665 | "checksum cargo-platform 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e78cce7683c0998d7a11405dcd13e31b23a930d4b5bba9e4245bdfba6bcd462c" 1666 | "checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 1667 | "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 1668 | "checksum chunked_transfer 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f98beb6554de08a14bd7b5c6014963c79d6a25a1c66b1d4ecb9e733ccba51d6c" 1669 | "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 1670 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1671 | "checksum commoncrypto 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007" 1672 | "checksum commoncrypto-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2" 1673 | "checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" 1674 | "checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" 1675 | "checksum copy_dir 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e4281031634644843bd2f5aa9c48cf98fc48d6b083bd90bb11becf10deaf8b0" 1676 | "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" 1677 | "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 1678 | "checksum crates-io 0.29.0 (registry+https://github.com/rust-lang/crates.io-index)" = "54a5db4b026e2d3bad49a9775b01722035ebc6976b95ec556716852d640f3ad5" 1679 | "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" 1680 | "checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" 1681 | "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" 1682 | "checksum crypto-hash 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8a77162240fd97248d19a564a565eb563a3f592b386e4136fb300909e67dddca" 1683 | "checksum curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)" = "06aa71e9208a54def20792d877bc663d6aae0732b9852e612c4a933177c31283" 1684 | "checksum curl-sys 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)" = "0c38ca47d60b86d0cc9d42caa90a0885669c2abc9791f871c81f58cdf39e979b" 1685 | "checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" 1686 | "checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" 1687 | "checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" 1688 | "checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" 1689 | "checksum exitfailure 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ff5bd832af37f366c6c194d813a11cd90ac484f124f079294f28e357ae40515" 1690 | "checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" 1691 | "checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" 1692 | "checksum filetime 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d" 1693 | "checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" 1694 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1695 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1696 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1697 | "checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" 1698 | "checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1699 | "checksum fwdansi 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08c1f5787fe85505d1f7777268db5103d80a7a374d2316a7ce262e57baf8f208" 1700 | "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" 1701 | "checksum git2 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c1af51ea8a906616af45a4ce78eacf25860f7a13ae7bf8a814693f0f4037a26" 1702 | "checksum git2-curl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cd6527e480187ce19aaf4fa6acfb7657b25628ce31cb8ffabdfca3bf731524c5" 1703 | "checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 1704 | "checksum globset 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "925aa2cac82d8834e2b2a4415b6f6879757fb5c0928fc445ae76461a12eed8f2" 1705 | "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" 1706 | "checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" 1707 | "checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" 1708 | "checksum hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "023b39be39e3a2da62a94feb433e91e8bcd37676fbc8bea371daf52b7a769a3e" 1709 | "checksum home 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" 1710 | "checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" 1711 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1712 | "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" 1713 | "checksum ignore 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ec16832258409d571aaef8273f3c3cc5b060d784e159d1a0f3b0017308f84a7" 1714 | "checksum im-rc 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0a0197597d095c0d11107975d3175173f810ee572c2501ff4de64f4f3f119806" 1715 | "checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" 1716 | "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" 1717 | "checksum jobserver 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "230ae9adf468173aecd4176c7233bddc84a15871a586c5971ace9a55f881c075" 1718 | "checksum js-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7889c7c36282151f6bf465be4700359318aef36baa951462382eae49e9577cf9" 1719 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1720 | "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1721 | "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" 1722 | "checksum lib-cargo-apk 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "55dbd5878a64bd83e1b8f8316abf92cb2e36bf2f13b22edb3b14bcb7374dfb14" 1723 | "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" 1724 | "checksum libgit2-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4870c781f6063efb83150cd22c1ddf6ecf58531419e7570cdcced46970f64a16" 1725 | "checksum libnghttp2-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02254d44f4435dd79e695f2c2b83cd06a47919adea30216ceaf0c57ca0a72463" 1726 | "checksum libssh2-sys 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "5fcd5a428a31cbbfe059812d74f4b6cd3b9b7426c2bdaec56993c5365da1c328" 1727 | "checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" 1728 | "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 1729 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1730 | "checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" 1731 | "checksum miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625" 1732 | "checksum miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226" 1733 | "checksum multimap 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a97fbd5d00e0e37bfb10f433af8f5aaf631e739368dc9fc28286ca81ca4948dc" 1734 | "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" 1735 | "checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" 1736 | "checksum opener 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13117407ca9d0caf3a0e74f97b490a7e64c0ae3aa90a8b7085544d0c37b6f3ae" 1737 | "checksum openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)" = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585" 1738 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1739 | "checksum openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)" = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f" 1740 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1741 | "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1742 | "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" 1743 | "checksum podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "780fb4b6698bbf9cf2444ea5d22411cef2953f0824b98f33cf454ec5615645bd" 1744 | "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" 1745 | "checksum proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0319972dcae462681daf4da1adeeaa066e3ebd29c69be96c6abb1259d2ee2bcc" 1746 | "checksum qstring 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "267047d2df92990367cbbf6b686c363c1518eb98e225b5193c8b936e52ab565a" 1747 | "checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 1748 | "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" 1749 | "checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1750 | "checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" 1751 | "checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 1752 | "checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 1753 | "checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1754 | "checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1755 | "checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 1756 | "checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 1757 | "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 1758 | "checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d" 1759 | "checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" 1760 | "checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" 1761 | "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" 1762 | "checksum ring 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6747f8da1f2b1fabbee1aaa4eb8a11abf9adef0bf58a41cee45db5d59cecdfac" 1763 | "checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" 1764 | "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 1765 | "checksum rustc-workspace-hack 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc71d2faa173b74b232dedc235e3ee1696581bb132fc116fa3626d6151a1a8fb" 1766 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1767 | "checksum rustfix 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7150ac777a2931a53489f5a41eb0937b84e3092a20cd0e73ad436b65b507f607" 1768 | "checksum rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e" 1769 | "checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" 1770 | "checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" 1771 | "checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021" 1772 | "checksum sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" 1773 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1774 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1775 | "checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" 1776 | "checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" 1777 | "checksum serde_ignored 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7248fdcbd17d3f2604fc2a02d0ecc844d9a7bf52bf95fc196d9f0a38f6da6a0e" 1778 | "checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" 1779 | "checksum shell-escape 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "170a13e64f2a51b77a45702ba77287f5c6829375b04a69cf2222acd17d0cfab9" 1780 | "checksum sized-chunks 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f01db57d7ee89c8e053245deb77040a6cc8508311f381c88749c33d4b9b78785" 1781 | "checksum smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44e59e0c9fa00817912ae6e4e6e3c4fe04455e75699d06eedc7d85917ed8e8f4" 1782 | "checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" 1783 | "checksum sourcefile 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3" 1784 | "checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 1785 | "checksum strip-ansi-escapes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d63676e2abafa709460982ddc02a3bb586b6d15a49b75c212e06edd3933acee" 1786 | "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 1787 | "checksum syn 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4ff033220a41d1a57d8125eab57bf5263783dfdcc18688b1dacc6ce9651ef8" 1788 | "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" 1789 | "checksum tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)" = "b3196bfbffbba3e57481b6ea32249fbaf590396a52505a2615adbb79d9d826d3" 1790 | "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" 1791 | "checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e" 1792 | "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 1793 | "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" 1794 | "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" 1795 | "checksum toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf" 1796 | "checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" 1797 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1798 | "checksum unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf" 1799 | "checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" 1800 | "checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 1801 | "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 1802 | "checksum untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" 1803 | "checksum ureq 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5281c8b41934f65338942a87ef7dc32052f2a2c1b2f5c53c6a96643ba674372" 1804 | "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 1805 | "checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61" 1806 | "checksum utf8parse 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8772a4ccbb4e89959023bc5b7cb8623a795caa7092d99f3aa9501b9484d4557d" 1807 | "checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" 1808 | "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 1809 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1810 | "checksum vte 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4f42f536e22f7fcbb407639765c8fd78707a33109301f834a594758bedd6e8cf" 1811 | "checksum walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c66c0b9792f0a765345452775f3adbd28dde9d33f30d13e5dcc5ae17cf6f3780" 1812 | "checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" 1813 | "checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1814 | "checksum wasm-bindgen 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c" 1815 | "checksum wasm-bindgen-backend 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "11cdb95816290b525b32587d76419facd99662a07e59d3cdb560488a819d9a45" 1816 | "checksum wasm-bindgen-macro 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "574094772ce6921576fb6f2e3f7497b8a76273b6db092be18fc48a082de09dc3" 1817 | "checksum wasm-bindgen-macro-support 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "e85031354f25eaebe78bb7db1c3d86140312a911a106b2e29f9cc440ce3e7668" 1818 | "checksum wasm-bindgen-shared 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e7e61fc929f4c0dddb748b102ebf9f632e2b8d739f2016542b4de2965a9601" 1819 | "checksum wasm-bindgen-webidl 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "ef012a0d93fc0432df126a8eaf547b2dce25a8ce9212e1d3cbeef5c11157975d" 1820 | "checksum web-sys 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)" = "aaf97caf6aa8c2b1dac90faf0db529d9d63c93846cca4911856f78a83cebf53b" 1821 | "checksum webpki 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d7e664e770ac0110e2384769bcc59ed19e329d81f555916a6e072714957b81b4" 1822 | "checksum webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" 1823 | "checksum weedle 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3bb43f70885151e629e2a19ce9e50bd730fd436cfd4b666894c9ce4de9141164" 1824 | "checksum which 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5475d47078209a02e60614f7ba5e645ef3ed60f771920ac1906d7c1cc65024c8" 1825 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1826 | "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1827 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1828 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1829 | "checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" 1830 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1831 | "checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9" 1832 | "checksum zip 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e41ff37ba788e2169b19fa70253b70cb53d9f2db9fb9aea9bcfc5047e02c3bae" 1833 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-flutter" 3 | version = "0.1.12" 4 | authors = ["David Craven "] 5 | edition = "2018" 6 | description = "Tool for building flutter-rs projects." 7 | license = "ISC" 8 | repository = "https://github.com/flutter-rs/cargo-flutter" 9 | 10 | [dependencies] 11 | cargo = "0.41.0" 12 | clap = "2.33.0" 13 | copy_dir = "0.1.2" 14 | curl = { version = "0.4.25", features = ["http2"] } 15 | dirs = "2.0.2" 16 | env_logger = "0.7.1" 17 | exitfailure = "0.5.1" 18 | failure = "0.1.6" 19 | lib-cargo-apk = "0.5.0" 20 | log = "0.4.8" 21 | rand = "0.7.3" 22 | serde = { version = "1.0.104", features = ["derive"] } 23 | toml = "0.5.5" 24 | ureq = { version = "0.11.2", features = ["json"] } 25 | which = "3.1.0" 26 | zip = "0.5.3" 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cargo plugin for building flutter applications 2 | 3 | ## Getting started 4 | ```sh 5 | cargo install cargo-flutter 6 | ``` 7 | 8 | ## Usage 9 | 10 | - Create a flutter-rs app 11 | 12 | `git clone https://github.com/flutter-rs/flutter-app-template` 13 | 14 | - Run a flutter-rs app in dev mode 15 | 16 | `cargo flutter run` 17 | 18 | - Bundle a flutter-rs app for distribution 19 | 20 | `cargo flutter --format appimage build --release` 21 | 22 | - Run `flutter_driver` tests 23 | 24 | `cargo flutter --dart-main test_driver/app.dart --drive run` 25 | 26 | ## Supported targets 27 | - x86_64-unknown-linux-gnu 28 | 29 | ## Supported formats 30 | - AppImage 31 | 32 | ## License 33 | ISC License 34 | 35 | Copyright (c) 2019, flutter-rs 36 | 37 | Permission to use, copy, modify, and/or distribute this software for any 38 | purpose with or without fee is hereby granted, provided that the above 39 | copyright notice and this permission notice appear in all copies. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 42 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 43 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 44 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 45 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 46 | OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 47 | PERFORMANCE OF THIS SOFTWARE. 48 | -------------------------------------------------------------------------------- /src/cargo.rs: -------------------------------------------------------------------------------- 1 | use crate::error::Error; 2 | use cargo::core::{Package, Workspace}; 3 | use cargo::util::important_paths::find_root_manifest_for_wd; 4 | use cargo::util::Config; 5 | use std::path::PathBuf; 6 | use std::process::Command; 7 | 8 | pub struct Cargo<'a> { 9 | args: Vec<&'a str>, 10 | workspace: Workspace<'a>, 11 | } 12 | 13 | impl<'a> Cargo<'a> { 14 | pub fn new(config: &'a mut Config, args: Vec<&'a str>) -> Result { 15 | let root_manifest = find_root_manifest_for_wd(config.cwd())?; 16 | let target_dir = root_manifest 17 | .parent() 18 | .unwrap() 19 | .join("target") 20 | .join("flutter"); 21 | config 22 | .configure(0, None, &None, false, false, false, &Some(target_dir), &[]) 23 | .unwrap(); 24 | 25 | let workspace = Workspace::new(&root_manifest, config)?; 26 | Ok(Self { args, workspace }) 27 | } 28 | 29 | fn arg bool>(&self, matches: F) -> Option<&str> { 30 | self.args 31 | .iter() 32 | .position(|f| matches(f)) 33 | .map(|pos| self.args.get(pos + 1)) 34 | .unwrap_or_default() 35 | .cloned() 36 | } 37 | 38 | pub fn cmd(&self) -> &str { 39 | self.args.iter().next().expect("Expected command") 40 | } 41 | 42 | pub fn target(&self) -> Option<&str> { 43 | self.arg(|f| f == "--target") 44 | } 45 | 46 | pub fn package(&self) -> Result<&Package, Error> { 47 | Ok( 48 | if let Some(package) = self.arg(|f| f == "--package" || f == "-p") { 49 | self.workspace() 50 | .members() 51 | .find(|pkg| pkg.name().as_str() == package) 52 | .ok_or(Error::PackageNotMember)? 53 | } else { 54 | self.workspace().current()? 55 | }, 56 | ) 57 | } 58 | 59 | pub fn release(&self) -> bool { 60 | self.args.iter().any(|f| *f == "--release") 61 | } 62 | 63 | pub fn host_triple(&self) -> Result { 64 | let rustc = self 65 | .workspace 66 | .config() 67 | .load_global_rustc(Some(&self.workspace))?; 68 | Ok(rustc.host.as_str().to_string()) 69 | } 70 | 71 | pub fn target_triple(&self) -> Result { 72 | if let Some(target) = self.target() { 73 | Ok(target.to_string()) 74 | } else { 75 | self.host_triple() 76 | } 77 | } 78 | 79 | pub fn workspace(&self) -> &Workspace { 80 | &self.workspace 81 | } 82 | 83 | pub fn target_dir(&self) -> PathBuf { 84 | self.workspace().target_dir().into_path_unlocked() 85 | } 86 | 87 | pub fn build_dir(&self) -> PathBuf { 88 | let flutter_dir = self.target_dir(); 89 | let triple_dir = if let Some(target) = self.target() { 90 | flutter_dir.join(target) 91 | } else { 92 | flutter_dir 93 | }; 94 | if self.release() { 95 | triple_dir.join("release") 96 | } else { 97 | triple_dir.join("debug") 98 | } 99 | } 100 | 101 | fn cargo_command(&self) -> Command { 102 | let mut cmd = Command::new("cargo"); 103 | cmd.current_dir(self.workspace.config().cwd()) 104 | .args(&self.args) 105 | .arg("--target-dir") 106 | .arg(self.target_dir()); 107 | cmd 108 | } 109 | 110 | pub fn exec(&self) -> Result<(), Error> { 111 | let status = self.cargo_command().status().expect("Success"); 112 | if status.code() != Some(0) { 113 | return Err(Error::CargoError); 114 | } 115 | Ok(()) 116 | } 117 | 118 | pub fn spawn(&self) -> Result<(), Error> { 119 | self.cargo_command().spawn().expect("Success"); 120 | Ok(()) 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use crate::cargo::Cargo; 2 | use crate::error::Error; 3 | use serde::Deserialize; 4 | 5 | #[derive(Debug, Clone, Deserialize)] 6 | pub struct TomlConfig { 7 | pub package: TomlPackage, 8 | } 9 | 10 | #[derive(Debug, Clone, Deserialize)] 11 | pub struct TomlPackage { 12 | pub name: String, 13 | pub metadata: Option, 14 | } 15 | 16 | #[derive(Debug, Default, Clone, Deserialize)] 17 | pub struct TomlMetadata { 18 | pub flutter: Option, 19 | pub apk: Option, 20 | pub appimage: Option, 21 | } 22 | 23 | #[derive(Debug, Default, Clone, Deserialize)] 24 | pub struct TomlFlutter { 25 | pub engine_version: Option, 26 | } 27 | 28 | impl TomlConfig { 29 | pub fn load(cargo: &Cargo) -> Result { 30 | let package = cargo.package()?; 31 | let bytes = std::fs::read(package.manifest_path())?; 32 | let string = std::str::from_utf8(&bytes)?; 33 | Ok(toml::from_str(string)?) 34 | } 35 | 36 | pub fn metadata(&self) -> TomlMetadata { 37 | self.package.metadata.clone().unwrap_or_default() 38 | } 39 | } 40 | 41 | impl TomlMetadata { 42 | pub fn engine_version(&self) -> Option { 43 | self.flutter.clone().unwrap_or_default().engine_version 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/engine.rs: -------------------------------------------------------------------------------- 1 | use crate::error::Error; 2 | use curl::easy::Easy; 3 | use exitfailure::ExitFailure; 4 | use std::fs::File; 5 | use std::io::Write; 6 | use std::path::PathBuf; 7 | 8 | #[derive(Clone, Debug, Eq, PartialEq)] 9 | pub struct Engine { 10 | version: String, 11 | target: String, 12 | build: Build, 13 | } 14 | 15 | #[derive(Clone, Copy, Debug, Eq, PartialEq)] 16 | pub enum Build { 17 | Debug, 18 | Release, 19 | Profile, 20 | } 21 | 22 | impl Build { 23 | pub fn build(&self) -> &str { 24 | match self { 25 | Self::Debug => "debug_unopt", 26 | Self::Release => "release", 27 | Self::Profile => "profile", 28 | } 29 | } 30 | } 31 | 32 | impl Engine { 33 | pub fn new(version: String, target: String, build: Build) -> Engine { 34 | Engine { 35 | version, 36 | target, 37 | build, 38 | } 39 | } 40 | 41 | pub fn download_url(&self) -> String { 42 | let build = self.build.build(); 43 | let platform = match self.target.as_str() { 44 | "x86_64-unknown-linux-gnu" => format!("linux_x64-host_{}", build), 45 | "armv7-linux-androideabi" => format!("linux_x64-android_{}", build), 46 | "aarch64-linux-android" => format!("linux_x64-android_{}_arm64", build), 47 | "i686-linux-android" => format!("linux_x64-android_{}_x64", build), 48 | "x86_64-linux-android" => format!("linux_x64-android_{}_x86", build), 49 | "x86_64-apple-darwin" => format!("macosx_x64-host_{}", build), 50 | "armv7-apple-ios" => format!("macosx_x64-ios_{}_arm", build), 51 | "aarch64-apple-ios" => format!("macosx_x64-ios_{}", build), 52 | "x86_64-pc-windows-msvc" => format!("windows_x64-host_{}", build), 53 | _ => panic!("unsupported platform"), 54 | }; 55 | format!( 56 | "https://github.com/flutter-rs/engine-builds/releases/download/f-{0}/{1}.zip", 57 | &self.version, platform 58 | ) 59 | } 60 | 61 | pub fn library_name(&self) -> &'static str { 62 | match self.target.as_str() { 63 | "x86_64-unknown-linux-gnu" => "libflutter_engine.so", 64 | "armv7-linux-androideabi" => "libflutter_engine.so", 65 | "aarch64-linux-android" => "libflutter_engine.so", 66 | "i686-linux-android" => "libflutter_engine.so", 67 | "x86_64-linux-android" => "libflutter_engine.so", 68 | "x86_64-apple-darwin" => "libflutter_engine.dylib", 69 | "armv7-apple-ios" => "libflutter_engine.dylib", 70 | "aarch64-apple-ios" => "libflutter_engine.dylib", 71 | "x86_64-pc-windows-msvc" => "flutter_engine.dll", 72 | _ => panic!("unsupported platform"), 73 | } 74 | } 75 | 76 | pub fn engine_dir(&self) -> PathBuf { 77 | dirs::cache_dir() 78 | .expect("Cannot get cache dir") 79 | .join("flutter-engine") 80 | .join(&self.version) 81 | .join(&self.target) 82 | .join(self.build.build()) 83 | } 84 | 85 | pub fn engine_path(&self) -> PathBuf { 86 | self.engine_dir().join(self.library_name()) 87 | } 88 | 89 | pub fn download(&self, quiet: bool) -> Result<(), ExitFailure> { 90 | let url = self.download_url(); 91 | let path = self.engine_path(); 92 | let dir = path.parent().unwrap().to_owned(); 93 | 94 | if path.exists() { 95 | return Ok(()); 96 | } 97 | 98 | std::fs::create_dir_all(&dir)?; 99 | 100 | println!("Starting download from {}", url); 101 | let download_file = dir.join("engine.zip"); 102 | let mut file = File::create(&download_file)?; 103 | let mut last_done = 0.0; 104 | 105 | let mut easy = Easy::new(); 106 | easy.fail_on_error(true)?; 107 | easy.url(&url)?; 108 | easy.follow_location(true)?; 109 | easy.progress(true)?; 110 | easy.progress_function(move |total, done, _, _| { 111 | if done > last_done { 112 | last_done = done; 113 | if !quiet { 114 | println!("Downloading flutter engine {} of {}", done, total); 115 | } 116 | } 117 | true 118 | })?; 119 | easy.write_function(move |data| Ok(file.write(data).unwrap()))?; 120 | 121 | easy.perform() 122 | .or_else(|_| Err(Error::EngineNotFound(self.version.clone())))?; 123 | println!("Download finished"); 124 | 125 | println!("Extracting..."); 126 | crate::unzip::unzip(&download_file, &dir)?; 127 | 128 | Ok(()) 129 | } 130 | 131 | pub fn dart(&self) -> Result { 132 | let host_engine_dir = self.engine_dir(); 133 | ["dart", "dart.exe"] 134 | .iter() 135 | .map(|bin| host_engine_dir.join(bin)) 136 | .find(|path| path.exists()) 137 | .ok_or(Error::DartNotFound) 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | #[derive(Debug)] 2 | pub enum Error { 3 | PackageNotMember, 4 | EngineNotFound(String), 5 | FlutterNotFound, 6 | DartNotFound, 7 | GenSnapshotNotFound, 8 | FormatNotSupported, 9 | CargoError, 10 | FlutterError, 11 | NotCalledWithCargo, 12 | Which(which::Error), 13 | Io(std::io::Error), 14 | Toml(toml::de::Error), 15 | Utf8(std::str::Utf8Error), 16 | Err(failure::Error), 17 | } 18 | 19 | impl std::fmt::Display for Error { 20 | fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { 21 | match self { 22 | Error::PackageNotMember => write!(f, "Package is not a member of the workspace"), 23 | Error::FlutterNotFound => write!(f, "Couldn't find flutter sdk"), 24 | Error::EngineNotFound(version) => write!( 25 | f, 26 | r#"We couldn't find the requested engine version '{}'. 27 | This means that your flutter version is too old or to new. 28 | 29 | To update flutter run `flutter upgrade`. If the problem persists the engine 30 | build has not completed yet. This means you need to manually supply the flutter 31 | engine version through one of the following methods: 32 | 33 | ```bash 34 | export FLUTTER_ENGINE_VERSION = "..." 35 | ``` 36 | 37 | `Cargo.toml` 38 | ```toml 39 | [package.metadata.flutter] 40 | engine_version = "..." 41 | ``` 42 | 43 | You'll find the available builds on our github releases page [0]. 44 | 45 | - [0] https://github.com/flutter-rs/engine-builds/releases"#, 46 | version, 47 | ), 48 | Error::DartNotFound => write!(f, "Could't find dart"), 49 | Error::GenSnapshotNotFound => write!(f, "Couldn't find gen_snapshot"), 50 | Error::FormatNotSupported => write!(f, "Format not supported"), 51 | Error::CargoError => write!(f, "Cargo did not exit successfully"), 52 | Error::FlutterError => write!(f, "Flutter did not exit successfully"), 53 | Error::NotCalledWithCargo => { 54 | write!(f, "This binary may only be called via `cargo flutter`.") 55 | } 56 | Error::Which(error) => error.fmt(f), 57 | Error::Io(error) => error.fmt(f), 58 | Error::Toml(error) => error.fmt(f), 59 | Error::Utf8(error) => error.fmt(f), 60 | Error::Err(error) => error.fmt(f), 61 | } 62 | } 63 | } 64 | 65 | impl std::error::Error for Error {} 66 | 67 | impl From for Error { 68 | fn from(error: which::Error) -> Self { 69 | Error::Which(error) 70 | } 71 | } 72 | 73 | impl From for Error { 74 | fn from(error: std::io::Error) -> Self { 75 | Error::Io(error) 76 | } 77 | } 78 | 79 | impl From for Error { 80 | fn from(error: toml::de::Error) -> Self { 81 | Error::Toml(error) 82 | } 83 | } 84 | 85 | impl From for Error { 86 | fn from(error: std::str::Utf8Error) -> Self { 87 | Error::Utf8(error) 88 | } 89 | } 90 | 91 | impl From for Error { 92 | fn from(error: failure::Error) -> Self { 93 | Error::Err(error) 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/flutter.rs: -------------------------------------------------------------------------------- 1 | use crate::cargo::Cargo; 2 | use crate::engine::{Build, Engine}; 3 | use crate::error::Error; 4 | use std::path::{Path, PathBuf}; 5 | use std::process::Command; 6 | 7 | pub struct Flutter { 8 | root: PathBuf, 9 | } 10 | 11 | impl Flutter { 12 | pub fn new() -> Result { 13 | let root = if let Ok(root) = std::env::var("FLUTTER_ROOT") { 14 | PathBuf::from(root) 15 | } else { 16 | let flutter = which::which("flutter").or(Err(Error::FlutterNotFound))?; 17 | let flutter = std::fs::canonicalize(flutter)?; 18 | flutter 19 | .parent() 20 | .ok_or(Error::FlutterNotFound)? 21 | .parent() 22 | .ok_or(Error::FlutterNotFound)? 23 | .to_owned() 24 | }; 25 | Ok(Flutter { root }) 26 | } 27 | 28 | pub fn root(&self) -> &Path { 29 | &self.root 30 | } 31 | 32 | pub fn flutter(&self) -> Result { 33 | which::which("flutter").or(Err(Error::FlutterNotFound)) 34 | } 35 | 36 | pub fn engine_version(&self) -> Result { 37 | let path = self 38 | .root 39 | .join("bin") 40 | .join("internal") 41 | .join("engine.version"); 42 | Ok(std::fs::read_to_string(path).map(|v| v.trim().to_owned())?) 43 | } 44 | 45 | pub fn bundle(&self, cargo: &Cargo, build: Build, dart_main: &Path) -> Result<(), Error> { 46 | let flag = match build { 47 | Build::Debug => "--debug", 48 | Build::Release => "--release", 49 | Build::Profile => "--profile", 50 | }; 51 | let status = Command::new(self.flutter()?) 52 | .current_dir(cargo.workspace().root()) 53 | .arg("build") 54 | .arg("bundle") 55 | .arg(flag) 56 | .arg("--track-widget-creation") 57 | .arg("--asset-dir") 58 | .arg(cargo.build_dir().join("flutter_assets")) 59 | .arg("--depfile") 60 | .arg(cargo.build_dir().join("snapshot_blob.bin.d")) 61 | .arg("--target") 62 | .arg(dart_main) 63 | .status() 64 | .expect("flutter build bundle"); 65 | if status.code() != Some(0) { 66 | return Err(Error::FlutterError); 67 | } 68 | Ok(()) 69 | } 70 | 71 | pub fn attach(&self, cargo: &Cargo, debug_uri: &str) -> Result<(), Error> { 72 | let status = Command::new(self.flutter()?) 73 | .current_dir(cargo.workspace().root()) 74 | .arg("attach") 75 | .arg("--device-id=flutter-tester") 76 | .arg(format!("--debug-uri={}", debug_uri)) 77 | .status() 78 | .expect("Success"); 79 | if status.code() != Some(0) { 80 | return Err(Error::FlutterError); 81 | } 82 | Ok(()) 83 | } 84 | 85 | pub fn aot( 86 | &self, 87 | cargo: &Cargo, 88 | host_engine: &Engine, 89 | target_engine: &Engine, 90 | ) -> Result<(), Error> { 91 | let root = cargo.workspace().root(); 92 | let build_dir = cargo.build_dir(); 93 | let host_engine_dir = host_engine.engine_dir(); 94 | let target_engine_dir = target_engine.engine_dir(); 95 | let snapshot = build_dir.join("kernel_snapshot.dill"); 96 | 97 | let status = Command::new(host_engine.dart()?) 98 | .current_dir(root) 99 | .arg( 100 | host_engine_dir 101 | .join("gen") 102 | .join("frontend_server.dart.snapshot"), 103 | ) 104 | .arg("--sdk-root") 105 | .arg(host_engine_dir.join("flutter_patched_sdk")) 106 | .arg("--target=flutter") 107 | .arg("--aot") 108 | .arg("--tfa") 109 | .arg("-Ddart.vm.product=true") 110 | .arg("--packages") 111 | .arg(".packages") 112 | .arg("--output-dill") 113 | .arg(&snapshot) 114 | .arg(root.join("lib").join("main.dart")) 115 | .status() 116 | .expect("Success"); 117 | 118 | if status.code() != Some(0) { 119 | return Err(Error::FlutterError); 120 | } 121 | 122 | let gen_snapshot = [ 123 | "gen_snapshot", 124 | "gen_snapshot_x64", 125 | "gen_snapshot_x86", 126 | "gen_snapshot_host_targeting_host", 127 | "gen_snapshot.exe", 128 | ] 129 | .iter() 130 | .map(|bin| target_engine_dir.join(bin)) 131 | .find(|path| path.exists()) 132 | .ok_or(Error::GenSnapshotNotFound)?; 133 | 134 | let status = Command::new(gen_snapshot) 135 | .current_dir(root) 136 | .arg("--causal_async_stacks") 137 | .arg("--deterministic") 138 | .arg("--snapshot_kind=app-aot-elf") 139 | .arg("--strip") 140 | .arg(format!("--elf={}", build_dir.join("app.so").display())) 141 | .arg(&snapshot) 142 | .status() 143 | .expect("Success"); 144 | 145 | if status.code() != Some(0) { 146 | return Err(Error::FlutterError); 147 | } 148 | 149 | Ok(()) 150 | } 151 | 152 | pub fn drive( 153 | &self, 154 | host_engine: &Engine, 155 | cargo: &Cargo, 156 | debug_uri: &str, 157 | dart_main: &Path, 158 | ) -> Result<(), Error> { 159 | let mut file = dart_main.file_stem().unwrap().to_owned(); 160 | file.push("_test.dart"); 161 | let driver = dart_main.parent().unwrap().join(file); 162 | 163 | // used by flutter_driver 164 | std::env::set_var("VM_SERVICE_URL", debug_uri); 165 | let status = Command::new(host_engine.dart()?) 166 | .current_dir(cargo.workspace().root()) 167 | .arg(driver) 168 | .status() 169 | .expect("Success"); 170 | if status.code() != Some(0) { 171 | return Err(Error::FlutterError); 172 | } 173 | Ok(()) 174 | } 175 | } 176 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | mod cargo; 2 | mod config; 3 | mod engine; 4 | mod error; 5 | mod flutter; 6 | pub mod package; 7 | mod unzip; 8 | 9 | pub use crate::cargo::Cargo; 10 | pub use crate::config::TomlConfig; 11 | pub use crate::engine::{Build, Engine}; 12 | pub use crate::error::Error; 13 | pub use crate::flutter::Flutter; 14 | pub use crate::package::{Item, Package}; 15 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use cargo::core::compiler::{CompileMode, ProfileKind}; 2 | use cargo::ops::{CompileOptions, Packages}; 3 | use cargo::util::Config; 4 | use cargo_flutter::package::apk::Apk; 5 | use cargo_flutter::package::appimage::AppImage; 6 | use cargo_flutter::{Build, Cargo, Engine, Error, Flutter, Item, Package, TomlConfig}; 7 | use clap::{App, AppSettings, Arg, SubCommand}; 8 | use exitfailure::ExitFailure; 9 | use rand::Rng; 10 | use std::path::PathBuf; 11 | use std::{env, str}; 12 | 13 | fn main() -> Result<(), ExitFailure> { 14 | env_logger::init(); 15 | 16 | let app_matches = App::new("cargo-flutter") 17 | .bin_name("cargo") 18 | .subcommand( 19 | SubCommand::with_name("flutter") 20 | .setting(AppSettings::TrailingVarArg) 21 | .version(env!("CARGO_PKG_VERSION")) 22 | .author("flutter-rs") 23 | .about("Provides a smooth experience for developing flutter-rs apps.") 24 | .arg( 25 | Arg::with_name("quiet") 26 | .long("quiet") 27 | .help("avoids excessive printing to stdout"), 28 | ) 29 | .arg( 30 | Arg::with_name("no-flutter") 31 | .long("no-flutter") 32 | .help("shortcut for no-bundle, no-attach and no-aot"), 33 | ) 34 | .arg( 35 | Arg::with_name("no-bundle") 36 | .long("no-bundle") 37 | .help("Skips running flutter bundle"), 38 | ) 39 | .arg( 40 | Arg::with_name("no-attach") 41 | .long("no-attach") 42 | .help("Skips attaching the flutter debugger"), 43 | ) 44 | .arg( 45 | Arg::with_name("no-aot") 46 | .long("no-aot") 47 | .help("Skips creating aot blob"), 48 | ) 49 | .arg( 50 | Arg::with_name("dart-main") 51 | .long("dart-main") 52 | .value_name("DART-MAIN") 53 | .takes_value(true) 54 | .help("Dart entrypoint (defaults to `lib/main.dart`)"), 55 | ) 56 | .arg( 57 | Arg::with_name("drive") 58 | .long("drive") 59 | .help("Runs driver `${dart-main-dir}_test.dart`"), 60 | ) 61 | .arg( 62 | Arg::with_name("format") 63 | .short("f") 64 | .long("format") 65 | .value_name("FORMAT") 66 | .takes_value(true) 67 | .help("Packaging format"), 68 | ) 69 | .arg( 70 | Arg::with_name("sign") 71 | .long("sign") 72 | .help("Sign package in debug build"), 73 | ) 74 | .arg( 75 | Arg::with_name("no-sign") 76 | .long("no-sign") 77 | .help("Don't sign package in release build"), 78 | ) 79 | .arg( 80 | Arg::with_name("cargo-args") 81 | .value_name("CARGO_ARGS") 82 | .takes_value(true) 83 | .required(true) 84 | .multiple(true), 85 | ), 86 | ) 87 | .get_matches(); 88 | 89 | let matches = if let Some(matches) = app_matches.subcommand_matches("flutter") { 90 | matches 91 | } else { 92 | return Err(Error::NotCalledWithCargo.into()); 93 | }; 94 | 95 | // Setup cargo 96 | let quiet = matches.is_present("quiet"); 97 | let cargo_args: Vec<&str> = matches 98 | .values_of("cargo-args") 99 | .expect("cargo-args to not be null") 100 | .collect(); 101 | let mut cargo_config = Config::default()?; 102 | let cargo = Cargo::new(&mut cargo_config, cargo_args)?; 103 | 104 | // Parse options 105 | let build = if cargo.release() { 106 | Build::Release 107 | } else { 108 | Build::Debug 109 | }; 110 | let aot = build == Build::Release; 111 | let sign = build == Build::Debug && matches.is_present("sign") 112 | || build == Build::Release && !matches.is_present("no-sign"); 113 | let config = TomlConfig::load(&cargo).ok(); 114 | let metadata = config 115 | .as_ref() 116 | .map(|config| config.metadata()) 117 | .unwrap_or_default(); 118 | 119 | // Find flutter sdk 120 | let flutter = Flutter::new()?; 121 | log::debug!("FLUTTER_ROOT {}", flutter.root().display()); 122 | 123 | // Find engine version used by the flutter sdk 124 | let engine_version = metadata.engine_version().unwrap_or_else(|| { 125 | std::env::var("FLUTTER_ENGINE_VERSION") 126 | .ok() 127 | .unwrap_or_else(|| flutter.engine_version().unwrap()) 128 | }); 129 | log::debug!("FLUTTER_ENGINE_VERSION {}", engine_version); 130 | 131 | // Download host engine 132 | let host_triple = cargo.host_triple()?; 133 | let host_engine = Engine::new(engine_version.clone(), host_triple, build); 134 | host_engine.download(quiet)?; 135 | 136 | // Download target engine 137 | let target_triple = cargo.target_triple()?; 138 | let target_engine = Engine::new(engine_version, target_triple.clone(), build); 139 | target_engine.download(quiet)?; 140 | 141 | // 142 | let flutter_asset_dir = cargo.build_dir().join("flutter_assets"); 143 | let snapshot_path = cargo.build_dir().join("app.so"); 144 | let engine_path = cargo 145 | .build_dir() 146 | .join("deps") 147 | .join(target_engine.library_name()); 148 | let dart_main = PathBuf::from(matches.value_of("dart-main").unwrap_or("lib/main.dart")); 149 | log::debug!("FLUTTER_ASSET_DIR {}", flutter_asset_dir.display()); 150 | 151 | // Copy target engine to deps dir 152 | if !engine_path.exists() { 153 | std::fs::create_dir_all(engine_path.parent().unwrap())?; 154 | std::fs::copy(target_engine.engine_path(), &engine_path)?; 155 | 156 | if target_triple == "x86_64-pc-windows-msvc" { 157 | let from_dir = target_engine.engine_path().parent().unwrap().to_owned(); 158 | let to_dir = engine_path.parent().unwrap(); 159 | for file in &[ 160 | "flutter_engine.lib", 161 | "flutter_engine.exp", 162 | "flutter_engine.pdb", 163 | ] { 164 | std::fs::copy(from_dir.join(file), to_dir.join(file))?; 165 | } 166 | } 167 | } 168 | 169 | // Build flutter_assets and aot binary 170 | if config.is_some() { 171 | if !matches.is_present("no-flutter") && !matches.is_present("no-bundle") { 172 | println!("flutter build bundle {}", dart_main.display()); 173 | flutter.bundle(&cargo, build, &dart_main)?; 174 | } 175 | 176 | if !matches.is_present("no-flutter") && !matches.is_present("no-aot") && aot { 177 | flutter.aot(&cargo, &host_engine, &target_engine)?; 178 | } 179 | } 180 | 181 | match (cargo.cmd(), config) { 182 | ("build", Some(config)) => { 183 | let mut package = Package::new(&config.package.name); 184 | package.add_lib(engine_path); 185 | if aot { 186 | package.add_lib(snapshot_path); 187 | } 188 | package.add_asset(flutter_asset_dir); 189 | 190 | if !target_triple.contains("android") { 191 | cargo.exec()?; 192 | package.add_bin(cargo.build_dir().join(&config.package.name)); 193 | 194 | if let Some(format) = matches.value_of("format") { 195 | match format { 196 | "appimage" => { 197 | let builder = AppImage::new(metadata.appimage.unwrap_or_default()); 198 | builder.build(&cargo, &package, sign)?; 199 | } 200 | "dmg" => {} 201 | "lipo" => {} 202 | "nsis" => {} 203 | _ => return Err(Error::FormatNotSupported.into()), 204 | } 205 | } 206 | } else { 207 | use lib_cargo_apk::config::AndroidBuildTarget; 208 | let mut android_config = lib_cargo_apk::config::load(cargo.package()?).unwrap(); 209 | let target = match target_triple.as_str() { 210 | "armv7-linux-androideabi" => AndroidBuildTarget::ArmV7a, 211 | "aarch64-linux-android" => AndroidBuildTarget::Arm64V8a, 212 | "i686-linux-android" => AndroidBuildTarget::X86, 213 | "x86_64-linux-android" => AndroidBuildTarget::X86_64, 214 | _ => panic!("unsupported android target"), 215 | }; 216 | android_config.build_targets = vec![target]; 217 | android_config.release = build != Build::Debug; 218 | 219 | let mut options = 220 | CompileOptions::new(cargo.workspace().config(), CompileMode::Build)?; 221 | options.build_config.profile_kind = if build == Build::Debug { 222 | ProfileKind::Dev 223 | } else { 224 | ProfileKind::Release 225 | }; 226 | options.spec = if let Ok(package) = cargo.package() { 227 | Packages::Packages(vec![package.name().to_string()]) 228 | } else { 229 | Packages::Default 230 | }; 231 | 232 | let libs = lib_cargo_apk::build_shared_libraries( 233 | cargo.workspace(), 234 | &android_config, 235 | options, 236 | &cargo.build_dir(), 237 | )?; 238 | for (_, libs) in libs.shared_libraries.iter_all() { 239 | for lib in libs { 240 | package.add_lib(Item::new(lib.path.clone(), lib.filename.clone())); 241 | } 242 | } 243 | if let Some(format) = matches.value_of("format") { 244 | if format != "apk" { 245 | return Err(Error::FormatNotSupported.into()); 246 | } 247 | let builder = Apk::new(android_config); 248 | builder.build(&cargo, &package, sign)?; 249 | } 250 | } 251 | } 252 | ("run", Some(_config)) => { 253 | let mut rng = rand::thread_rng(); 254 | let port = rng.gen_range(1024, 49152); 255 | let observatory = format!("http://127.0.0.1:{}", port); 256 | std::env::set_var("FLUTTER_AOT_SNAPSHOT", &snapshot_path); 257 | std::env::set_var("FLUTTER_ASSET_DIR", &flutter_asset_dir); 258 | std::env::set_var("DART_OBSERVATORY_PORT", port.to_string()); 259 | cargo.spawn()?; 260 | 261 | if matches.is_present("drive") { 262 | flutter.drive(&host_engine, &cargo, &observatory, &dart_main)?; 263 | } else if !matches.is_present("no-flutter") && !matches.is_present("no-attach") { 264 | flutter.attach(&cargo, &observatory)?; 265 | } 266 | } 267 | _ => cargo.exec()?, 268 | } 269 | 270 | Ok(()) 271 | } 272 | -------------------------------------------------------------------------------- /src/package/apk.rs: -------------------------------------------------------------------------------- 1 | use crate::cargo::Cargo; 2 | use crate::package::Package; 3 | use cargo::core::manifest::TargetKind; 4 | use failure::Error; 5 | use lib_cargo_apk::{AndroidConfig, BuildTarget, SharedLibraries, SharedLibrary}; 6 | use serde::Deserialize; 7 | 8 | #[derive(Debug, Default, Clone, Deserialize)] 9 | pub struct TomlApk {} 10 | 11 | pub struct Apk { 12 | toml: AndroidConfig, 13 | } 14 | 15 | impl Apk { 16 | pub fn new(toml: AndroidConfig) -> Self { 17 | Self { toml } 18 | } 19 | 20 | pub fn build(&self, cargo: &Cargo, package: &Package, _sign: bool) -> Result<(), Error> { 21 | let mut config = self.toml.clone(); 22 | config.default_target_config.assets = 23 | Some(package.assets()[0].path().to_str().unwrap().to_string()); 24 | let mut libs = SharedLibraries { 25 | shared_libraries: Default::default(), 26 | }; 27 | let target = BuildTarget::new(package.name().to_string(), TargetKind::Bin); 28 | for lib in package.libs() { 29 | libs.shared_libraries.insert( 30 | target.clone(), 31 | SharedLibrary { 32 | abi: self.toml.build_targets[0], 33 | path: lib.path().to_owned(), 34 | filename: lib.name().to_owned(), 35 | }, 36 | ); 37 | } 38 | 39 | lib_cargo_apk::build_apks(&config, &cargo.build_dir(), libs)?; 40 | Ok(()) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/package/appimage.rs: -------------------------------------------------------------------------------- 1 | use crate::cargo::Cargo; 2 | use crate::package::Package; 3 | use failure::Error; 4 | use serde::Deserialize; 5 | use std::fs::Permissions; 6 | #[cfg(unix)] 7 | use std::os::unix::fs::PermissionsExt; 8 | use std::path::PathBuf; 9 | use std::process::Command; 10 | 11 | #[derive(Debug, Default, Clone, Deserialize)] 12 | pub struct TomlAppImage { 13 | name: Option, 14 | icon: Option, 15 | } 16 | 17 | pub struct AppImage { 18 | toml: TomlAppImage, 19 | } 20 | 21 | impl AppImage { 22 | pub fn new(toml: TomlAppImage) -> Self { 23 | Self { toml } 24 | } 25 | 26 | #[cfg(not(unix))] 27 | pub fn build(&self, cargo: &Cargo, package: &Package, sign: bool) -> Result<(), Error> { 28 | Err(failure::format_err!("Creating appimages only supported from a unix host.").into()) 29 | } 30 | 31 | #[cfg(unix)] 32 | pub fn build(&self, cargo: &Cargo, package: &Package, sign: bool) -> Result<(), Error> { 33 | let build_dir = cargo.build_dir(); 34 | let appimage_dir = build_dir.join("appimage"); 35 | let name = self.toml.name.as_ref().unwrap_or(&package.name); 36 | let exec = &package.name; 37 | let icon_path = self 38 | .toml 39 | .icon 40 | .as_ref() 41 | .map(PathBuf::from) 42 | .unwrap_or_else(|| cargo.workspace().root().join("assets").join("icon.svg")); 43 | if !icon_path.exists() { 44 | return Err(failure::format_err!( 45 | "Icon not found {}", 46 | icon_path.display() 47 | )); 48 | } 49 | let icon = icon_path 50 | .file_stem() 51 | .map(|f| f.to_str().unwrap()) 52 | .unwrap_or("icon") 53 | .to_string(); 54 | std::fs::remove_dir_all(&appimage_dir).ok(); 55 | 56 | let bin_dir = appimage_dir.join("usr").join("bin"); 57 | std::fs::create_dir_all(&bin_dir)?; 58 | for bin in package.bins() { 59 | std::fs::copy(bin.path(), bin_dir.join(bin.name()))?; 60 | } 61 | 62 | let lib_dir = appimage_dir.join("usr").join("lib"); 63 | std::fs::create_dir_all(&lib_dir)?; 64 | for lib in package.libs() { 65 | std::fs::copy(lib.path(), lib_dir.join(lib.name()))?; 66 | } 67 | 68 | let asset_dir = appimage_dir.join("usr").join("share"); 69 | std::fs::create_dir_all(&asset_dir)?; 70 | for asset in package.assets() { 71 | copy_dir::copy_dir(asset.path(), asset_dir.join(asset.name()))?; 72 | } 73 | 74 | let apprun = appimage_dir.join("AppRun"); 75 | std::fs::write(&apprun, APP_RUN)?; 76 | std::fs::set_permissions(&apprun, Permissions::from_mode(0o755))?; 77 | 78 | let desktop = appimage_dir.join(format!("{}.desktop", exec)); 79 | std::fs::write(&desktop, gen_desktop(name, exec, &icon))?; 80 | std::fs::set_permissions(&desktop, Permissions::from_mode(0o755))?; 81 | 82 | std::fs::copy( 83 | &icon_path, 84 | appimage_dir.join(icon_path.file_name().unwrap()), 85 | )?; 86 | 87 | let appimagetool = which::which("appimagetool") 88 | .or_else(|_| Err(failure::format_err!("appimagetool not found")))?; 89 | let mut cmd = Command::new(appimagetool); 90 | cmd.current_dir(&build_dir).arg("appimage"); 91 | if sign { 92 | cmd.arg("--sign"); 93 | } 94 | cmd.status().expect("Success"); 95 | 96 | Ok(()) 97 | } 98 | } 99 | 100 | const APP_RUN: &str = r#"#!/bin/sh 101 | SELF=$(readlink -f "$0") 102 | HERE=${SELF%/*} 103 | export PATH="${HERE}/usr/bin/${PATH:+:$PATH}" 104 | export LD_LIBRARY_PATH="${HERE}/usr/lib/:${LD_LIBRARY_PATH:+:$LDLIBRARY_PATH}" 105 | export FLUTTER_ASSET_DIR="${HERE}/usr/share/flutter_assets" 106 | export FLUTTER_AOT_SNAPSHOT="${HERE}/usr/lib/app.so" 107 | EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2 | cut -d " " -f 1) 108 | exec "${EXEC}" "$@" 109 | "#; 110 | 111 | fn gen_desktop(name: &str, exec: &str, icon: &str) -> String { 112 | format!( 113 | r#"[Desktop Entry] 114 | Name={} 115 | Exec={} 116 | Icon={} 117 | Type=Application 118 | Categories=Utility; 119 | "#, 120 | name, exec, icon 121 | ) 122 | } 123 | -------------------------------------------------------------------------------- /src/package/mod.rs: -------------------------------------------------------------------------------- 1 | use std::path::{Path, PathBuf}; 2 | 3 | pub mod apk; 4 | pub mod appimage; 5 | 6 | pub struct Package { 7 | name: String, 8 | bin: Vec, 9 | lib: Vec, 10 | asset: Vec, 11 | } 12 | 13 | pub struct Item { 14 | path: PathBuf, 15 | name: String, 16 | } 17 | 18 | impl Item { 19 | pub fn new(path: PathBuf, name: String) -> Self { 20 | Self { path, name } 21 | } 22 | 23 | pub fn path(&self) -> &Path { 24 | &self.path 25 | } 26 | 27 | pub fn name(&self) -> &str { 28 | &self.name 29 | } 30 | } 31 | 32 | impl From for Item { 33 | fn from(path: PathBuf) -> Self { 34 | let name = path.file_name().unwrap().to_str().unwrap().to_string(); 35 | Self { path, name } 36 | } 37 | } 38 | 39 | impl Package { 40 | pub fn new(name: &str) -> Self { 41 | Self { 42 | name: name.to_string(), 43 | bin: Default::default(), 44 | lib: Default::default(), 45 | asset: Default::default(), 46 | } 47 | } 48 | 49 | pub fn name(&self) -> &str { 50 | &self.name 51 | } 52 | 53 | pub fn bins(&self) -> &[Item] { 54 | &self.bin 55 | } 56 | 57 | pub fn libs(&self) -> &[Item] { 58 | &self.lib 59 | } 60 | 61 | pub fn assets(&self) -> &[Item] { 62 | &self.asset 63 | } 64 | 65 | pub fn add_bin>(&mut self, item: T) { 66 | self.bin.push(item.into()); 67 | } 68 | 69 | pub fn add_lib>(&mut self, item: T) { 70 | self.lib.push(item.into()); 71 | } 72 | 73 | pub fn add_asset>(&mut self, item: T) { 74 | self.asset.push(item.into()); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/unzip.rs: -------------------------------------------------------------------------------- 1 | use std::fs::File; 2 | use std::io::Error; 3 | use std::path::Path; 4 | use zip::ZipArchive; 5 | 6 | pub fn unzip(archive: &Path, dir: &Path) -> Result<(), Error> { 7 | let file = File::open(archive)?; 8 | let mut archive = ZipArchive::new(file)?; 9 | for i in 0..archive.len() { 10 | let mut file = archive.by_index(i)?; 11 | let outpath = dir.join(file.sanitized_name()); 12 | if (&*file.name()).ends_with('/') { 13 | println!("File {} extracted to \"{}\"", i, outpath.display()); 14 | std::fs::create_dir_all(&outpath)?; 15 | } else { 16 | println!( 17 | "File {} extracted to \"{}\" ({} bytes)", 18 | i, 19 | outpath.display(), 20 | file.size() 21 | ); 22 | if let Some(p) = outpath.parent() { 23 | if !p.exists() { 24 | std::fs::create_dir_all(&p)?; 25 | } 26 | } 27 | let mut outfile = std::fs::File::create(&outpath)?; 28 | std::io::copy(&mut file, &mut outfile).unwrap(); 29 | 30 | #[cfg(unix)] 31 | { 32 | use std::fs::Permissions; 33 | use std::os::unix::fs::PermissionsExt; 34 | 35 | if let Some(mode) = file.unix_mode() { 36 | std::fs::set_permissions(&outpath, Permissions::from_mode(mode))?; 37 | } 38 | } 39 | } 40 | } 41 | 42 | Ok(()) 43 | } 44 | --------------------------------------------------------------------------------