├── .bin └── sat ├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Makefile ├── README.md ├── containerd-shim-aspdotnet-v1 ├── Cargo.toml └── src │ └── main.rs ├── containerd-shim-cehostshim-v1 ├── Cargo.toml └── src │ ├── main.rs │ ├── types.wit │ └── wasi-ce.wit ├── containerd-shim-sat-v1 ├── Cargo.toml └── src │ └── main.rs ├── containerd-shim-spin-v1 ├── Cargo.toml └── src │ └── main.rs └── images ├── aspnet ├── Dockerfile └── wasiwebapp.wasm ├── image-cpp ├── Dockerfile ├── Makefile ├── bindings │ ├── wasi-ce.c │ └── wasi-ce.h ├── ctest.wasm ├── lib.cpp └── wasi_ce.o ├── image-rs ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── src │ └── lib.rs ├── types.wit ├── wasi-ce.wit └── wasm.go ├── sat-hello ├── .runnable.yaml ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── src │ └── lib.rs └── wasm ├── spin-kitchensink └── Dockerfile └── spin ├── Dockerfile ├── spin.toml └── spinhelloworld.wasm /.bin/sat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mossaka/containerd-wasm-shims/c5a070a2834d4250e900e33f8036d634c1c0a3b7/.bin/sat -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v2 17 | - uses: actions/cache@v2 18 | with: 19 | path: | 20 | ~/.cargo/registry 21 | ~/.cargo/git 22 | target 23 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 24 | - name: Build 25 | run: cargo build --verbose 26 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | on: 3 | push: 4 | tags: 5 | - 'v[0-9]+.[0-9]+.*' 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - uses: actions/cache@v2 12 | with: 13 | path: | 14 | ~/.cargo/registry 15 | ~/.cargo/git 16 | target 17 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 18 | - name: Build 19 | run: cargo build --verbose 20 | release: 21 | permissions: 22 | contents: write 23 | packages: write 24 | needs: build 25 | if: startsWith(github.ref, 'refs/tags/v') 26 | runs-on: ubuntu-latest 27 | steps: 28 | - uses: actions/checkout@v2 29 | - name: Set RELEASE_VERSION ENV var 30 | run: echo "RELEASE_VERSION=${GITHUB_REF:10}" >> $GITHUB_ENV 31 | - name: lowercase the runner OS name 32 | shell: bash 33 | run: | 34 | OS=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]') 35 | echo "RUNNER_OS=$OS" >> $GITHUB_ENV 36 | - name: Install latest Rust stable toolchain 37 | uses: actions-rs/toolchain@v1 38 | with: 39 | toolchain: stable 40 | default: true 41 | - name: build release 42 | uses: actions-rs/cargo@v1 43 | with: 44 | command: build 45 | args: --release 46 | - name: package release assets 47 | run: | 48 | mkdir _dist 49 | cp target/release/containerd-shim-*-v1 _dist/ 50 | cd _dist 51 | tar czf containerd-shim-wasmserver-v1-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-amd64.tar.gz containerd-shim-*-v1 52 | - name: upload binary as GitHub artifact 53 | uses: actions/upload-artifact@v3 54 | with: 55 | name: containerd-shim-wasmserver-v1 56 | path: _dist/containerd-shim-wasmserver-v1-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-amd64.tar.gz 57 | - name: Recreate canary tag and release 58 | uses: ncipollo/release-action@v1.10.0 59 | with: 60 | tag: ${{ env.RELEASE_VERSION }} 61 | allowUpdates: true 62 | prerelease: true 63 | artifacts: _dist/containerd-shim-wasmserver-v1-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-amd64.tar.gz 64 | body: | 65 | This is a "canary" release of the most recent commits on our main branch. Canary is **not stable**. 66 | It is only intended for developers wishing to try out the latest features, some of which may not be fully implemented. 67 | - name: setup buildx 68 | uses: docker/setup-buildx-action@v1 69 | - name: login to GitHub container registry 70 | uses: docker/login-action@v1 71 | with: 72 | registry: ghcr.io 73 | username: ${{ github.repository_owner }} 74 | password: ${{ secrets.GITHUB_TOKEN }} 75 | - name: build and push 76 | uses: docker/build-push-action@v2 77 | with: 78 | push: true 79 | tags: | 80 | ghcr.io/mossaka/aspdotnet_wasm:${{ env.RELEASE_VERSION }} 81 | ghcr.io/mossaka/aspdotnet_wasm:latest 82 | context: images/aspnet 83 | - name: build and push 84 | uses: docker/build-push-action@v2 85 | with: 86 | push: true 87 | tags: | 88 | ghcr.io/mossaka/spinhelloworld:${{ env.RELEASE_VERSION }} 89 | ghcr.io/mossaka/spinhelloworld:latest 90 | context: images/spin 91 | - name: build and push 92 | uses: docker/build-push-action@v2 93 | with: 94 | push: true 95 | tags: | 96 | ghcr.io/mossaka/spinkitchensink:${{ env.RELEASE_VERSION }} 97 | ghcr.io/mossaka/spinkitchensink:latest 98 | context: images/spin-kitchensink -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/target/ 2 | .vscode 3 | test/ -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.17.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "adler32" 22 | version = "1.2.0" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 25 | 26 | [[package]] 27 | name = "ahash" 28 | version = "0.7.6" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 31 | dependencies = [ 32 | "getrandom 0.2.6", 33 | "once_cell", 34 | "version_check 0.9.4", 35 | ] 36 | 37 | [[package]] 38 | name = "aho-corasick" 39 | version = "0.7.18" 40 | source = "registry+https://github.com/rust-lang/crates.io-index" 41 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 42 | dependencies = [ 43 | "memchr", 44 | ] 45 | 46 | [[package]] 47 | name = "alloc-no-stdlib" 48 | version = "2.0.3" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" 51 | 52 | [[package]] 53 | name = "alloc-stdlib" 54 | version = "0.2.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" 57 | dependencies = [ 58 | "alloc-no-stdlib", 59 | ] 60 | 61 | [[package]] 62 | name = "ambient-authority" 63 | version = "0.0.1" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" 66 | 67 | [[package]] 68 | name = "ansi_term" 69 | version = "0.12.1" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 72 | dependencies = [ 73 | "winapi", 74 | ] 75 | 76 | [[package]] 77 | name = "anyhow" 78 | version = "1.0.57" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" 81 | 82 | [[package]] 83 | name = "ascii" 84 | version = "1.0.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "bbf56136a5198c7b01a49e3afcbef6cf84597273d298f54432926024107b0109" 87 | 88 | [[package]] 89 | name = "async-compression" 90 | version = "0.3.13" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "8589c784ff02ac80dafc5e4116c3a2a3743ac5e0c902483518a88eec6559cf99" 93 | dependencies = [ 94 | "flate2", 95 | "futures-core", 96 | "memchr", 97 | "pin-project-lite", 98 | "tokio", 99 | ] 100 | 101 | [[package]] 102 | name = "async-stream" 103 | version = "0.3.3" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" 106 | dependencies = [ 107 | "async-stream-impl", 108 | "futures-core", 109 | ] 110 | 111 | [[package]] 112 | name = "async-stream-impl" 113 | version = "0.3.3" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" 116 | dependencies = [ 117 | "proc-macro2", 118 | "quote", 119 | "syn", 120 | ] 121 | 122 | [[package]] 123 | name = "async-trait" 124 | version = "0.1.53" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" 127 | dependencies = [ 128 | "proc-macro2", 129 | "quote", 130 | "syn", 131 | ] 132 | 133 | [[package]] 134 | name = "atty" 135 | version = "0.2.14" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 138 | dependencies = [ 139 | "hermit-abi 0.1.19", 140 | "libc", 141 | "winapi", 142 | ] 143 | 144 | [[package]] 145 | name = "autocfg" 146 | version = "1.1.0" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 149 | 150 | [[package]] 151 | name = "backtrace" 152 | version = "0.3.65" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61" 155 | dependencies = [ 156 | "addr2line", 157 | "cc", 158 | "cfg-if 1.0.0", 159 | "libc", 160 | "miniz_oxide", 161 | "object 0.28.4", 162 | "rustc-demangle", 163 | ] 164 | 165 | [[package]] 166 | name = "base64" 167 | version = "0.10.1" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 170 | dependencies = [ 171 | "byteorder", 172 | ] 173 | 174 | [[package]] 175 | name = "base64" 176 | version = "0.12.3" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 179 | 180 | [[package]] 181 | name = "base64" 182 | version = "0.13.0" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 185 | 186 | [[package]] 187 | name = "bcrypt" 188 | version = "0.10.1" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "f691e63585950d8c1c43644d11bab9073e40f5060dd2822734ae7c3dc69a3a80" 191 | dependencies = [ 192 | "base64 0.13.0", 193 | "blowfish", 194 | "getrandom 0.2.6", 195 | ] 196 | 197 | [[package]] 198 | name = "bincode" 199 | version = "1.3.3" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 202 | dependencies = [ 203 | "serde", 204 | ] 205 | 206 | [[package]] 207 | name = "bindle" 208 | version = "0.8.0" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "aefcdee8421fe9cb679bd5ec175a7d8e0bbaebdb1d950b26eb0118a5abed27cb" 211 | dependencies = [ 212 | "anyhow", 213 | "async-compression", 214 | "async-trait", 215 | "base64 0.13.0", 216 | "bcrypt", 217 | "bytes 1.1.0", 218 | "dirs", 219 | "ed25519-dalek", 220 | "either", 221 | "futures", 222 | "hyper", 223 | "indexmap", 224 | "jsonwebtoken", 225 | "lru", 226 | "mime", 227 | "mime_guess", 228 | "oauth2", 229 | "openid", 230 | "rand 0.7.3", 231 | "reqwest", 232 | "semver", 233 | "serde", 234 | "serde_cbor", 235 | "serde_json", 236 | "sha2 0.10.2", 237 | "sled", 238 | "tempfile", 239 | "thiserror", 240 | "time 0.3.9", 241 | "tokio", 242 | "tokio-stream", 243 | "tokio-tar", 244 | "tokio-util 0.6.10", 245 | "toml", 246 | "tracing", 247 | "tracing-futures", 248 | "url 2.2.2", 249 | "warp", 250 | ] 251 | 252 | [[package]] 253 | name = "biscuit" 254 | version = "0.5.0" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "0dee631cea28b00e115fd355a1adedc860b155096941dc01259969eabd434a37" 257 | dependencies = [ 258 | "chrono", 259 | "data-encoding", 260 | "num", 261 | "once_cell", 262 | "ring", 263 | "serde", 264 | "serde_json", 265 | ] 266 | 267 | [[package]] 268 | name = "bitflags" 269 | version = "1.3.2" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 272 | 273 | [[package]] 274 | name = "block-buffer" 275 | version = "0.9.0" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 278 | dependencies = [ 279 | "generic-array", 280 | ] 281 | 282 | [[package]] 283 | name = "block-buffer" 284 | version = "0.10.2" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 287 | dependencies = [ 288 | "generic-array", 289 | ] 290 | 291 | [[package]] 292 | name = "blowfish" 293 | version = "0.8.0" 294 | source = "registry+https://github.com/rust-lang/crates.io-index" 295 | checksum = "fe3ff3fc1de48c1ac2e3341c4df38b0d1bfb8fdf04632a187c8b75aaa319a7ab" 296 | dependencies = [ 297 | "byteorder", 298 | "cipher", 299 | "opaque-debug", 300 | ] 301 | 302 | [[package]] 303 | name = "brotli" 304 | version = "3.3.4" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" 307 | dependencies = [ 308 | "alloc-no-stdlib", 309 | "alloc-stdlib", 310 | "brotli-decompressor", 311 | ] 312 | 313 | [[package]] 314 | name = "brotli-decompressor" 315 | version = "2.3.2" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" 318 | dependencies = [ 319 | "alloc-no-stdlib", 320 | "alloc-stdlib", 321 | ] 322 | 323 | [[package]] 324 | name = "buf_redux" 325 | version = "0.8.4" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" 328 | dependencies = [ 329 | "memchr", 330 | "safemem", 331 | ] 332 | 333 | [[package]] 334 | name = "bumpalo" 335 | version = "3.9.1" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 338 | 339 | [[package]] 340 | name = "byteorder" 341 | version = "1.4.3" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 344 | 345 | [[package]] 346 | name = "bytes" 347 | version = "0.4.12" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" 350 | dependencies = [ 351 | "byteorder", 352 | "iovec", 353 | ] 354 | 355 | [[package]] 356 | name = "bytes" 357 | version = "1.1.0" 358 | source = "registry+https://github.com/rust-lang/crates.io-index" 359 | checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" 360 | 361 | [[package]] 362 | name = "cap-fs-ext" 363 | version = "0.24.3" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "de96a353a1b625fae721c0274552533a75d4961e2f313d5a873076c964e9982e" 366 | dependencies = [ 367 | "cap-primitives", 368 | "cap-std", 369 | "io-lifetimes", 370 | "winapi", 371 | ] 372 | 373 | [[package]] 374 | name = "cap-primitives" 375 | version = "0.24.3" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "7217718088981caa36e35a01307daeeaad2f6e6e188bf4149d35029dad1c08a2" 378 | dependencies = [ 379 | "ambient-authority", 380 | "errno", 381 | "fs-set-times", 382 | "io-extras", 383 | "io-lifetimes", 384 | "ipnet", 385 | "maybe-owned", 386 | "rustix", 387 | "winapi", 388 | "winapi-util", 389 | "winx", 390 | ] 391 | 392 | [[package]] 393 | name = "cap-rand" 394 | version = "0.24.3" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "575e96a49058d34b2d75caa6ef677d35569add0fcb16cf7866d1a47a35649a87" 397 | dependencies = [ 398 | "ambient-authority", 399 | "rand 0.8.5", 400 | ] 401 | 402 | [[package]] 403 | name = "cap-std" 404 | version = "0.24.3" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | checksum = "5d684df5773e4af5c343c466f47151db7e7a4366daab609b4a6bb7a75aecf732" 407 | dependencies = [ 408 | "cap-primitives", 409 | "io-extras", 410 | "io-lifetimes", 411 | "ipnet", 412 | "rustix", 413 | ] 414 | 415 | [[package]] 416 | name = "cap-time-ext" 417 | version = "0.24.3" 418 | source = "registry+https://github.com/rust-lang/crates.io-index" 419 | checksum = "4ed053e759cc9bb1c2cbdb53d029c76c56820787a65619579b9a7147eaaf307b" 420 | dependencies = [ 421 | "cap-primitives", 422 | "once_cell", 423 | "rustix", 424 | "winx", 425 | ] 426 | 427 | [[package]] 428 | name = "cc" 429 | version = "1.0.73" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 432 | dependencies = [ 433 | "jobserver", 434 | ] 435 | 436 | [[package]] 437 | name = "cfg-if" 438 | version = "0.1.10" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 441 | 442 | [[package]] 443 | name = "cfg-if" 444 | version = "1.0.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 447 | 448 | [[package]] 449 | name = "chrono" 450 | version = "0.4.19" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" 453 | dependencies = [ 454 | "libc", 455 | "num-integer", 456 | "num-traits", 457 | "serde", 458 | "time 0.1.44", 459 | "winapi", 460 | ] 461 | 462 | [[package]] 463 | name = "chunked_transfer" 464 | version = "1.4.0" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" 467 | 468 | [[package]] 469 | name = "cipher" 470 | version = "0.3.0" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 473 | dependencies = [ 474 | "generic-array", 475 | ] 476 | 477 | [[package]] 478 | name = "clap" 479 | version = "2.34.0" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 482 | dependencies = [ 483 | "ansi_term", 484 | "atty", 485 | "bitflags", 486 | "strsim 0.8.0", 487 | "textwrap", 488 | "unicode-width", 489 | "vec_map", 490 | ] 491 | 492 | [[package]] 493 | name = "cloudevents-sdk" 494 | version = "0.5.0" 495 | source = "git+https://github.com/Mossaka/sdk-rust.git?branch=master#56aae43e138431b99a56d57cdfc45955dfa6570a" 496 | dependencies = [ 497 | "base64 0.12.3", 498 | "bitflags", 499 | "chrono", 500 | "delegate-attr", 501 | "hostname", 502 | "serde", 503 | "serde_json", 504 | "snafu", 505 | "url 2.2.2", 506 | "uuid", 507 | ] 508 | 509 | [[package]] 510 | name = "combine" 511 | version = "4.6.4" 512 | source = "registry+https://github.com/rust-lang/crates.io-index" 513 | checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" 514 | dependencies = [ 515 | "bytes 1.1.0", 516 | "futures-core", 517 | "memchr", 518 | "pin-project-lite", 519 | "tokio", 520 | "tokio-util 0.7.2", 521 | ] 522 | 523 | [[package]] 524 | name = "command-fds" 525 | version = "0.2.2" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "35cc819120a403d0eb3d0c404088c5a9f9b06066147ec69a21919fbc0833ef68" 528 | dependencies = [ 529 | "nix 0.22.3", 530 | "thiserror", 531 | ] 532 | 533 | [[package]] 534 | name = "containerd-shim" 535 | version = "0.3.0" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "2b7dc0083bae091806fe57ef508eada5a96244b41c6b8a555d1ef316f433b6de" 538 | dependencies = [ 539 | "command-fds", 540 | "containerd-shim-protos 0.2.0", 541 | "go-flag", 542 | "lazy_static", 543 | "libc", 544 | "log", 545 | "nix 0.23.1", 546 | "oci-spec", 547 | "prctl", 548 | "serde", 549 | "serde_derive", 550 | "serde_json", 551 | "signal-hook", 552 | "thiserror", 553 | "time 0.3.9", 554 | "uuid", 555 | ] 556 | 557 | [[package]] 558 | name = "containerd-shim-aspdotnet-v1" 559 | version = "0.1.0" 560 | dependencies = [ 561 | "anyhow", 562 | "chrono", 563 | "containerd-shim", 564 | "containerd-shim-wasmtime-v1", 565 | "log", 566 | "wasmtime", 567 | "wasmtime-wasi", 568 | ] 569 | 570 | [[package]] 571 | name = "containerd-shim-cehostshim-v1" 572 | version = "0.1.0" 573 | dependencies = [ 574 | "anyhow", 575 | "chrono", 576 | "cloudevents-sdk", 577 | "containerd-shim", 578 | "containerd-shim-wasmtime-v1", 579 | "log", 580 | "rouille", 581 | "serde_json", 582 | "uuid", 583 | "wasmtime", 584 | "wasmtime-wasi", 585 | "wit-bindgen-wasmtime", 586 | ] 587 | 588 | [[package]] 589 | name = "containerd-shim-protos" 590 | version = "0.1.2" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "4bf4d73b6dedc8192061deeea9ba08e74393a9fd9bcef0ef31d969b191de3eb7" 593 | dependencies = [ 594 | "protobuf", 595 | "ttrpc 0.5.3", 596 | ] 597 | 598 | [[package]] 599 | name = "containerd-shim-protos" 600 | version = "0.2.0" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "077ec778a0835d9d85502e8535362130187759b69eddabe2bdb3a68ffb575bd0" 603 | dependencies = [ 604 | "protobuf", 605 | "ttrpc 0.6.1", 606 | ] 607 | 608 | [[package]] 609 | name = "containerd-shim-sat-v1" 610 | version = "0.1.0" 611 | dependencies = [ 612 | "anyhow", 613 | "chrono", 614 | "containerd-shim", 615 | "containerd-shim-wasmtime-v1", 616 | "log", 617 | "wasmtime", 618 | "wasmtime-wasi", 619 | ] 620 | 621 | [[package]] 622 | name = "containerd-shim-spin-v1" 623 | version = "0.1.0" 624 | dependencies = [ 625 | "chrono", 626 | "containerd-shim", 627 | "containerd-shim-wasmtime-v1", 628 | "log", 629 | "spin-engine", 630 | "spin-http-engine", 631 | "spin-loader", 632 | "spin-manifest", 633 | "spin-trigger", 634 | "tokio", 635 | "wasmtime", 636 | ] 637 | 638 | [[package]] 639 | name = "containerd-shim-wasmtime-v1" 640 | version = "0.1.0" 641 | source = "git+https://github.com/Mossaka/runwasi?branch=jiazho/precompile#3ecf05a8206a9b46049d5d2f944a9e36f44bdfb7" 642 | dependencies = [ 643 | "anyhow", 644 | "cap-std", 645 | "chrono", 646 | "command-fds", 647 | "containerd-shim", 648 | "containerd-shim-protos 0.1.2", 649 | "log", 650 | "nix 0.23.1", 651 | "oci-spec", 652 | "protobuf", 653 | "serde", 654 | "serde_json", 655 | "thiserror", 656 | "ttrpc 0.6.1", 657 | "wasi-common", 658 | "wasmtime", 659 | "wasmtime-wasi", 660 | ] 661 | 662 | [[package]] 663 | name = "core-foundation" 664 | version = "0.9.3" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 667 | dependencies = [ 668 | "core-foundation-sys", 669 | "libc", 670 | ] 671 | 672 | [[package]] 673 | name = "core-foundation-sys" 674 | version = "0.8.3" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 677 | 678 | [[package]] 679 | name = "cpp_demangle" 680 | version = "0.3.5" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" 683 | dependencies = [ 684 | "cfg-if 1.0.0", 685 | ] 686 | 687 | [[package]] 688 | name = "cpufeatures" 689 | version = "0.2.2" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" 692 | dependencies = [ 693 | "libc", 694 | ] 695 | 696 | [[package]] 697 | name = "cranelift-bforest" 698 | version = "0.81.2" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "0eba0f73ab0da95f5d3bd5161da14edc586a88aeae1d09e4a0924f7a141a0093" 701 | dependencies = [ 702 | "cranelift-entity", 703 | ] 704 | 705 | [[package]] 706 | name = "cranelift-codegen" 707 | version = "0.81.2" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "e9cff8758662518d743460f32c3ca6f32d726070af612c19ba92d01ea727e6d9" 710 | dependencies = [ 711 | "cranelift-bforest", 712 | "cranelift-codegen-meta", 713 | "cranelift-codegen-shared", 714 | "cranelift-entity", 715 | "gimli", 716 | "log", 717 | "regalloc", 718 | "smallvec", 719 | "target-lexicon", 720 | ] 721 | 722 | [[package]] 723 | name = "cranelift-codegen-meta" 724 | version = "0.81.2" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "bfc82fef9d470dd617c4d2537d8f4146d82526bb3bc3ef35b599a3978dad8c81" 727 | dependencies = [ 728 | "cranelift-codegen-shared", 729 | ] 730 | 731 | [[package]] 732 | name = "cranelift-codegen-shared" 733 | version = "0.81.2" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "a06f531b6173eb2fd92d9a9b2a0dbb2450079f913040bdc323ec43ec752b7e44" 736 | 737 | [[package]] 738 | name = "cranelift-entity" 739 | version = "0.81.2" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "d84f8e8a408071d67f479a00c6d3da965b1f9b4b240b7e7e27edb1a34401b3cd" 742 | dependencies = [ 743 | "serde", 744 | ] 745 | 746 | [[package]] 747 | name = "cranelift-frontend" 748 | version = "0.81.2" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "72cc22592c10f1fa6664a55e34ec52593125a94176856d3ec2f7af5664374da1" 751 | dependencies = [ 752 | "cranelift-codegen", 753 | "log", 754 | "smallvec", 755 | "target-lexicon", 756 | ] 757 | 758 | [[package]] 759 | name = "cranelift-native" 760 | version = "0.81.2" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "c3da723ebbee69f348feb49acc9f6f5b7ad668c04a145abbc7a75b669f9b0afd" 763 | dependencies = [ 764 | "cranelift-codegen", 765 | "libc", 766 | "target-lexicon", 767 | ] 768 | 769 | [[package]] 770 | name = "cranelift-wasm" 771 | version = "0.81.2" 772 | source = "registry+https://github.com/rust-lang/crates.io-index" 773 | checksum = "642c30e1600295e9c58fc349376187831dce1df6822ece7e8ab880010d6e4be2" 774 | dependencies = [ 775 | "cranelift-codegen", 776 | "cranelift-entity", 777 | "cranelift-frontend", 778 | "itertools", 779 | "log", 780 | "smallvec", 781 | "wasmparser", 782 | "wasmtime-types", 783 | ] 784 | 785 | [[package]] 786 | name = "crc32fast" 787 | version = "1.3.2" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 790 | dependencies = [ 791 | "cfg-if 1.0.0", 792 | ] 793 | 794 | [[package]] 795 | name = "crossbeam-channel" 796 | version = "0.5.4" 797 | source = "registry+https://github.com/rust-lang/crates.io-index" 798 | checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" 799 | dependencies = [ 800 | "cfg-if 1.0.0", 801 | "crossbeam-utils", 802 | ] 803 | 804 | [[package]] 805 | name = "crossbeam-deque" 806 | version = "0.8.1" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" 809 | dependencies = [ 810 | "cfg-if 1.0.0", 811 | "crossbeam-epoch", 812 | "crossbeam-utils", 813 | ] 814 | 815 | [[package]] 816 | name = "crossbeam-epoch" 817 | version = "0.9.8" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" 820 | dependencies = [ 821 | "autocfg", 822 | "cfg-if 1.0.0", 823 | "crossbeam-utils", 824 | "lazy_static", 825 | "memoffset", 826 | "scopeguard", 827 | ] 828 | 829 | [[package]] 830 | name = "crossbeam-utils" 831 | version = "0.8.8" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" 834 | dependencies = [ 835 | "cfg-if 1.0.0", 836 | "lazy_static", 837 | ] 838 | 839 | [[package]] 840 | name = "crypto-common" 841 | version = "0.1.3" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" 844 | dependencies = [ 845 | "generic-array", 846 | "typenum", 847 | ] 848 | 849 | [[package]] 850 | name = "ctrlc" 851 | version = "3.2.2" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "b37feaa84e6861e00a1f5e5aa8da3ee56d605c9992d33e082786754828e20865" 854 | dependencies = [ 855 | "nix 0.24.1", 856 | "winapi", 857 | ] 858 | 859 | [[package]] 860 | name = "curve25519-dalek" 861 | version = "3.2.1" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 864 | dependencies = [ 865 | "byteorder", 866 | "digest 0.9.0", 867 | "rand_core 0.5.1", 868 | "subtle", 869 | "zeroize", 870 | ] 871 | 872 | [[package]] 873 | name = "darling" 874 | version = "0.14.1" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" 877 | dependencies = [ 878 | "darling_core", 879 | "darling_macro", 880 | ] 881 | 882 | [[package]] 883 | name = "darling_core" 884 | version = "0.14.1" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" 887 | dependencies = [ 888 | "fnv", 889 | "ident_case", 890 | "proc-macro2", 891 | "quote", 892 | "strsim 0.10.0", 893 | "syn", 894 | ] 895 | 896 | [[package]] 897 | name = "darling_macro" 898 | version = "0.14.1" 899 | source = "registry+https://github.com/rust-lang/crates.io-index" 900 | checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" 901 | dependencies = [ 902 | "darling_core", 903 | "quote", 904 | "syn", 905 | ] 906 | 907 | [[package]] 908 | name = "data-encoding" 909 | version = "2.3.2" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" 912 | 913 | [[package]] 914 | name = "deflate" 915 | version = "0.9.1" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "5f95bf05dffba6e6cce8dfbb30def788154949ccd9aed761b472119c21e01c70" 918 | dependencies = [ 919 | "adler32", 920 | "gzip-header", 921 | ] 922 | 923 | [[package]] 924 | name = "delegate-attr" 925 | version = "0.2.9" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "ee7e7ea0dba407429d816e8e38dda1a467cd74737722f2ccc8eae60429a1a3ab" 928 | dependencies = [ 929 | "proc-macro2", 930 | "quote", 931 | "syn", 932 | ] 933 | 934 | [[package]] 935 | name = "derive_builder" 936 | version = "0.11.2" 937 | source = "registry+https://github.com/rust-lang/crates.io-index" 938 | checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" 939 | dependencies = [ 940 | "derive_builder_macro", 941 | ] 942 | 943 | [[package]] 944 | name = "derive_builder_core" 945 | version = "0.11.2" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" 948 | dependencies = [ 949 | "darling", 950 | "proc-macro2", 951 | "quote", 952 | "syn", 953 | ] 954 | 955 | [[package]] 956 | name = "derive_builder_macro" 957 | version = "0.11.2" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" 960 | dependencies = [ 961 | "derive_builder_core", 962 | "syn", 963 | ] 964 | 965 | [[package]] 966 | name = "digest" 967 | version = "0.9.0" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 970 | dependencies = [ 971 | "generic-array", 972 | ] 973 | 974 | [[package]] 975 | name = "digest" 976 | version = "0.10.3" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 979 | dependencies = [ 980 | "block-buffer 0.10.2", 981 | "crypto-common", 982 | ] 983 | 984 | [[package]] 985 | name = "directories-next" 986 | version = "2.0.0" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" 989 | dependencies = [ 990 | "cfg-if 1.0.0", 991 | "dirs-sys-next", 992 | ] 993 | 994 | [[package]] 995 | name = "dirs" 996 | version = "4.0.0" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" 999 | dependencies = [ 1000 | "dirs-sys", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "dirs-next" 1005 | version = "2.0.0" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" 1008 | dependencies = [ 1009 | "cfg-if 1.0.0", 1010 | "dirs-sys-next", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "dirs-sys" 1015 | version = "0.3.7" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 1018 | dependencies = [ 1019 | "libc", 1020 | "redox_users", 1021 | "winapi", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "dirs-sys-next" 1026 | version = "0.1.2" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" 1029 | dependencies = [ 1030 | "libc", 1031 | "redox_users", 1032 | "winapi", 1033 | ] 1034 | 1035 | [[package]] 1036 | name = "doc-comment" 1037 | version = "0.3.3" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 1040 | 1041 | [[package]] 1042 | name = "docker_credential" 1043 | version = "1.0.1" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | checksum = "a40af8b38f4a4e72f314a29dfe3ce37a530585e85bc9acfd8b01faccaadfc130" 1046 | dependencies = [ 1047 | "base64 0.10.1", 1048 | "serde", 1049 | "serde_json", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "dtoa" 1054 | version = "0.4.8" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" 1057 | 1058 | [[package]] 1059 | name = "ed25519" 1060 | version = "1.5.2" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" 1063 | dependencies = [ 1064 | "signature", 1065 | ] 1066 | 1067 | [[package]] 1068 | name = "ed25519-dalek" 1069 | version = "1.0.1" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" 1072 | dependencies = [ 1073 | "curve25519-dalek", 1074 | "ed25519", 1075 | "rand 0.7.3", 1076 | "serde", 1077 | "sha2 0.9.9", 1078 | "zeroize", 1079 | ] 1080 | 1081 | [[package]] 1082 | name = "either" 1083 | version = "1.6.1" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 1086 | 1087 | [[package]] 1088 | name = "encoding_rs" 1089 | version = "0.8.31" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" 1092 | dependencies = [ 1093 | "cfg-if 1.0.0", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "env-file-reader" 1098 | version = "0.2.0" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "d00bb0c3f782b0967b28b4fd608ad3ce331817bdd120bbb193b3958a7a4a87b1" 1101 | dependencies = [ 1102 | "regex", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "env_logger" 1107 | version = "0.9.0" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" 1110 | dependencies = [ 1111 | "atty", 1112 | "humantime", 1113 | "log", 1114 | "regex", 1115 | "termcolor", 1116 | ] 1117 | 1118 | [[package]] 1119 | name = "errno" 1120 | version = "0.2.8" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" 1123 | dependencies = [ 1124 | "errno-dragonfly", 1125 | "libc", 1126 | "winapi", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "errno-dragonfly" 1131 | version = "0.1.2" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" 1134 | dependencies = [ 1135 | "cc", 1136 | "libc", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "fallible-iterator" 1141 | version = "0.2.0" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" 1144 | 1145 | [[package]] 1146 | name = "fastrand" 1147 | version = "1.7.0" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" 1150 | dependencies = [ 1151 | "instant", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "file-per-thread-logger" 1156 | version = "0.1.5" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "21e16290574b39ee41c71aeb90ae960c504ebaf1e2a1c87bd52aa56ed6e1a02f" 1159 | dependencies = [ 1160 | "env_logger", 1161 | "log", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "filetime" 1166 | version = "0.2.16" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" 1169 | dependencies = [ 1170 | "cfg-if 1.0.0", 1171 | "libc", 1172 | "redox_syscall", 1173 | "winapi", 1174 | ] 1175 | 1176 | [[package]] 1177 | name = "flate2" 1178 | version = "1.0.23" 1179 | source = "registry+https://github.com/rust-lang/crates.io-index" 1180 | checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" 1181 | dependencies = [ 1182 | "cfg-if 1.0.0", 1183 | "crc32fast", 1184 | "libc", 1185 | "miniz_oxide", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "fnv" 1190 | version = "1.0.7" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1193 | 1194 | [[package]] 1195 | name = "foreign-types" 1196 | version = "0.3.2" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1199 | dependencies = [ 1200 | "foreign-types-shared", 1201 | ] 1202 | 1203 | [[package]] 1204 | name = "foreign-types-shared" 1205 | version = "0.1.1" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1208 | 1209 | [[package]] 1210 | name = "form_urlencoded" 1211 | version = "1.0.1" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 1214 | dependencies = [ 1215 | "matches", 1216 | "percent-encoding 2.1.0", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "fs-set-times" 1221 | version = "0.15.0" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "7df62ee66ee2d532ea8d567b5a3f0d03ecd64636b98bad5be1e93dcc918b92aa" 1224 | dependencies = [ 1225 | "io-lifetimes", 1226 | "rustix", 1227 | "winapi", 1228 | ] 1229 | 1230 | [[package]] 1231 | name = "fs2" 1232 | version = "0.4.3" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" 1235 | dependencies = [ 1236 | "libc", 1237 | "winapi", 1238 | ] 1239 | 1240 | [[package]] 1241 | name = "fs_extra" 1242 | version = "1.2.0" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" 1245 | 1246 | [[package]] 1247 | name = "futures" 1248 | version = "0.3.21" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" 1251 | dependencies = [ 1252 | "futures-channel", 1253 | "futures-core", 1254 | "futures-executor", 1255 | "futures-io", 1256 | "futures-sink", 1257 | "futures-task", 1258 | "futures-util", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "futures-channel" 1263 | version = "0.3.21" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 1266 | dependencies = [ 1267 | "futures-core", 1268 | "futures-sink", 1269 | ] 1270 | 1271 | [[package]] 1272 | name = "futures-core" 1273 | version = "0.3.21" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 1276 | 1277 | [[package]] 1278 | name = "futures-executor" 1279 | version = "0.3.21" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" 1282 | dependencies = [ 1283 | "futures-core", 1284 | "futures-task", 1285 | "futures-util", 1286 | ] 1287 | 1288 | [[package]] 1289 | name = "futures-io" 1290 | version = "0.3.21" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 1293 | 1294 | [[package]] 1295 | name = "futures-macro" 1296 | version = "0.3.21" 1297 | source = "registry+https://github.com/rust-lang/crates.io-index" 1298 | checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" 1299 | dependencies = [ 1300 | "proc-macro2", 1301 | "quote", 1302 | "syn", 1303 | ] 1304 | 1305 | [[package]] 1306 | name = "futures-sink" 1307 | version = "0.3.21" 1308 | source = "registry+https://github.com/rust-lang/crates.io-index" 1309 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 1310 | 1311 | [[package]] 1312 | name = "futures-task" 1313 | version = "0.3.21" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 1316 | 1317 | [[package]] 1318 | name = "futures-util" 1319 | version = "0.3.21" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 1322 | dependencies = [ 1323 | "futures-channel", 1324 | "futures-core", 1325 | "futures-io", 1326 | "futures-macro", 1327 | "futures-sink", 1328 | "futures-task", 1329 | "memchr", 1330 | "pin-project-lite", 1331 | "pin-utils", 1332 | "slab", 1333 | ] 1334 | 1335 | [[package]] 1336 | name = "fxhash" 1337 | version = "0.2.1" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 1340 | dependencies = [ 1341 | "byteorder", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "generic-array" 1346 | version = "0.14.5" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 1349 | dependencies = [ 1350 | "typenum", 1351 | "version_check 0.9.4", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "getrandom" 1356 | version = "0.1.16" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 1359 | dependencies = [ 1360 | "cfg-if 1.0.0", 1361 | "libc", 1362 | "wasi 0.9.0+wasi-snapshot-preview1", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "getrandom" 1367 | version = "0.2.6" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" 1370 | dependencies = [ 1371 | "cfg-if 1.0.0", 1372 | "js-sys", 1373 | "libc", 1374 | "wasi 0.10.0+wasi-snapshot-preview1", 1375 | "wasm-bindgen", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "getset" 1380 | version = "0.1.2" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" 1383 | dependencies = [ 1384 | "proc-macro-error", 1385 | "proc-macro2", 1386 | "quote", 1387 | "syn", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "gimli" 1392 | version = "0.26.1" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" 1395 | dependencies = [ 1396 | "fallible-iterator", 1397 | "indexmap", 1398 | "stable_deref_trait", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "glob" 1403 | version = "0.3.0" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 1406 | 1407 | [[package]] 1408 | name = "go-flag" 1409 | version = "0.1.0" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "6b4a40c9ca507513f573aabaf6a8558173a1ac9aa1363d8de30c7f89b34f8d2b" 1412 | dependencies = [ 1413 | "cfg-if 0.1.10", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "gzip-header" 1418 | version = "0.3.0" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "0131feb3d3bb2a5a238d8a4d09f6353b7ebfdc52e77bccbf4ea6eaa751dde639" 1421 | dependencies = [ 1422 | "crc32fast", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "h2" 1427 | version = "0.3.13" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" 1430 | dependencies = [ 1431 | "bytes 1.1.0", 1432 | "fnv", 1433 | "futures-core", 1434 | "futures-sink", 1435 | "futures-util", 1436 | "http 0.2.7", 1437 | "indexmap", 1438 | "slab", 1439 | "tokio", 1440 | "tokio-util 0.7.2", 1441 | "tracing", 1442 | ] 1443 | 1444 | [[package]] 1445 | name = "half" 1446 | version = "1.8.2" 1447 | source = "registry+https://github.com/rust-lang/crates.io-index" 1448 | checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" 1449 | 1450 | [[package]] 1451 | name = "hashbrown" 1452 | version = "0.9.1" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" 1455 | 1456 | [[package]] 1457 | name = "hashbrown" 1458 | version = "0.11.2" 1459 | source = "registry+https://github.com/rust-lang/crates.io-index" 1460 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 1461 | dependencies = [ 1462 | "ahash", 1463 | ] 1464 | 1465 | [[package]] 1466 | name = "headers" 1467 | version = "0.3.7" 1468 | source = "registry+https://github.com/rust-lang/crates.io-index" 1469 | checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" 1470 | dependencies = [ 1471 | "base64 0.13.0", 1472 | "bitflags", 1473 | "bytes 1.1.0", 1474 | "headers-core", 1475 | "http 0.2.7", 1476 | "httpdate", 1477 | "mime", 1478 | "sha-1 0.10.0", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "headers-core" 1483 | version = "0.2.0" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" 1486 | dependencies = [ 1487 | "http 0.2.7", 1488 | ] 1489 | 1490 | [[package]] 1491 | name = "heck" 1492 | version = "0.3.3" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 1495 | dependencies = [ 1496 | "unicode-segmentation", 1497 | ] 1498 | 1499 | [[package]] 1500 | name = "hermit-abi" 1501 | version = "0.1.19" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1504 | dependencies = [ 1505 | "libc", 1506 | ] 1507 | 1508 | [[package]] 1509 | name = "hermit-abi" 1510 | version = "0.2.0" 1511 | source = "registry+https://github.com/rust-lang/crates.io-index" 1512 | checksum = "1ab7905ea95c6d9af62940f9d7dd9596d54c334ae2c15300c482051292d5637f" 1513 | dependencies = [ 1514 | "libc", 1515 | ] 1516 | 1517 | [[package]] 1518 | name = "hostname" 1519 | version = "0.3.1" 1520 | source = "registry+https://github.com/rust-lang/crates.io-index" 1521 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 1522 | dependencies = [ 1523 | "libc", 1524 | "match_cfg", 1525 | "winapi", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "http" 1530 | version = "0.1.21" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" 1533 | dependencies = [ 1534 | "bytes 0.4.12", 1535 | "fnv", 1536 | "itoa 0.4.8", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "http" 1541 | version = "0.2.7" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb" 1544 | dependencies = [ 1545 | "bytes 1.1.0", 1546 | "fnv", 1547 | "itoa 1.0.2", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "http-body" 1552 | version = "0.4.4" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" 1555 | dependencies = [ 1556 | "bytes 1.1.0", 1557 | "http 0.2.7", 1558 | "pin-project-lite", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "httparse" 1563 | version = "1.7.1" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" 1566 | 1567 | [[package]] 1568 | name = "httpdate" 1569 | version = "1.0.2" 1570 | source = "registry+https://github.com/rust-lang/crates.io-index" 1571 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 1572 | 1573 | [[package]] 1574 | name = "humantime" 1575 | version = "2.1.0" 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" 1577 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1578 | 1579 | [[package]] 1580 | name = "hyper" 1581 | version = "0.14.18" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" 1584 | dependencies = [ 1585 | "bytes 1.1.0", 1586 | "futures-channel", 1587 | "futures-core", 1588 | "futures-util", 1589 | "h2", 1590 | "http 0.2.7", 1591 | "http-body", 1592 | "httparse", 1593 | "httpdate", 1594 | "itoa 1.0.2", 1595 | "pin-project-lite", 1596 | "socket2", 1597 | "tokio", 1598 | "tower-service", 1599 | "tracing", 1600 | "want", 1601 | ] 1602 | 1603 | [[package]] 1604 | name = "hyper-rustls" 1605 | version = "0.23.0" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" 1608 | dependencies = [ 1609 | "http 0.2.7", 1610 | "hyper", 1611 | "log", 1612 | "rustls 0.20.5", 1613 | "rustls-native-certs", 1614 | "tokio", 1615 | "tokio-rustls 0.23.4", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "hyper-tls" 1620 | version = "0.5.0" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 1623 | dependencies = [ 1624 | "bytes 1.1.0", 1625 | "hyper", 1626 | "native-tls", 1627 | "tokio", 1628 | "tokio-native-tls", 1629 | ] 1630 | 1631 | [[package]] 1632 | name = "hyperx" 1633 | version = "0.13.2" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | checksum = "e4a94cbc2c6f63028e5736ca4e811ae36d3990059c384cbe68298c66728a9776" 1636 | dependencies = [ 1637 | "base64 0.10.1", 1638 | "bytes 0.4.12", 1639 | "http 0.1.21", 1640 | "httparse", 1641 | "language-tags", 1642 | "log", 1643 | "mime", 1644 | "percent-encoding 1.0.1", 1645 | "time 0.1.44", 1646 | "unicase 2.6.0", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "id-arena" 1651 | version = "2.2.1" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" 1654 | 1655 | [[package]] 1656 | name = "ident_case" 1657 | version = "1.0.1" 1658 | source = "registry+https://github.com/rust-lang/crates.io-index" 1659 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1660 | 1661 | [[package]] 1662 | name = "idna" 1663 | version = "0.1.5" 1664 | source = "registry+https://github.com/rust-lang/crates.io-index" 1665 | checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" 1666 | dependencies = [ 1667 | "matches", 1668 | "unicode-bidi", 1669 | "unicode-normalization", 1670 | ] 1671 | 1672 | [[package]] 1673 | name = "idna" 1674 | version = "0.2.3" 1675 | source = "registry+https://github.com/rust-lang/crates.io-index" 1676 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 1677 | dependencies = [ 1678 | "matches", 1679 | "unicode-bidi", 1680 | "unicode-normalization", 1681 | ] 1682 | 1683 | [[package]] 1684 | name = "if_chain" 1685 | version = "1.0.2" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" 1688 | 1689 | [[package]] 1690 | name = "indexmap" 1691 | version = "1.6.2" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" 1694 | dependencies = [ 1695 | "autocfg", 1696 | "hashbrown 0.9.1", 1697 | "serde", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "instant" 1702 | version = "0.1.12" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1705 | dependencies = [ 1706 | "cfg-if 1.0.0", 1707 | ] 1708 | 1709 | [[package]] 1710 | name = "io-extras" 1711 | version = "0.13.2" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "d0c937cc9891c12eaa8c63ad347e4a288364b1328b924886970b47a14ab8f8f8" 1714 | dependencies = [ 1715 | "io-lifetimes", 1716 | "winapi", 1717 | ] 1718 | 1719 | [[package]] 1720 | name = "io-lifetimes" 1721 | version = "0.5.3" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6" 1724 | dependencies = [ 1725 | "libc", 1726 | "winapi", 1727 | ] 1728 | 1729 | [[package]] 1730 | name = "iovec" 1731 | version = "0.1.4" 1732 | source = "registry+https://github.com/rust-lang/crates.io-index" 1733 | checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 1734 | dependencies = [ 1735 | "libc", 1736 | ] 1737 | 1738 | [[package]] 1739 | name = "ipnet" 1740 | version = "2.5.0" 1741 | source = "registry+https://github.com/rust-lang/crates.io-index" 1742 | checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" 1743 | 1744 | [[package]] 1745 | name = "is-terminal" 1746 | version = "0.1.0" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "7c89a757e762896bdbdfadf2860d0f8b0cea5e363d8cf3e7bdfeb63d1d976352" 1749 | dependencies = [ 1750 | "hermit-abi 0.2.0", 1751 | "io-lifetimes", 1752 | "rustix", 1753 | "winapi", 1754 | ] 1755 | 1756 | [[package]] 1757 | name = "itertools" 1758 | version = "0.10.3" 1759 | source = "registry+https://github.com/rust-lang/crates.io-index" 1760 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 1761 | dependencies = [ 1762 | "either", 1763 | ] 1764 | 1765 | [[package]] 1766 | name = "itoa" 1767 | version = "0.4.8" 1768 | source = "registry+https://github.com/rust-lang/crates.io-index" 1769 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 1770 | 1771 | [[package]] 1772 | name = "itoa" 1773 | version = "1.0.2" 1774 | source = "registry+https://github.com/rust-lang/crates.io-index" 1775 | checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" 1776 | 1777 | [[package]] 1778 | name = "jobserver" 1779 | version = "0.1.24" 1780 | source = "registry+https://github.com/rust-lang/crates.io-index" 1781 | checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" 1782 | dependencies = [ 1783 | "libc", 1784 | ] 1785 | 1786 | [[package]] 1787 | name = "js-sys" 1788 | version = "0.3.57" 1789 | source = "registry+https://github.com/rust-lang/crates.io-index" 1790 | checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" 1791 | dependencies = [ 1792 | "wasm-bindgen", 1793 | ] 1794 | 1795 | [[package]] 1796 | name = "jsonwebtoken" 1797 | version = "8.1.0" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "cc9051c17f81bae79440afa041b3a278e1de71bfb96d32454b477fd4703ccb6f" 1800 | dependencies = [ 1801 | "base64 0.13.0", 1802 | "pem", 1803 | "ring", 1804 | "serde", 1805 | "serde_json", 1806 | "simple_asn1", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "language-tags" 1811 | version = "0.2.2" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" 1814 | 1815 | [[package]] 1816 | name = "lazy_static" 1817 | version = "1.4.0" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1820 | 1821 | [[package]] 1822 | name = "leb128" 1823 | version = "0.2.5" 1824 | source = "registry+https://github.com/rust-lang/crates.io-index" 1825 | checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" 1826 | 1827 | [[package]] 1828 | name = "libc" 1829 | version = "0.2.126" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 1832 | 1833 | [[package]] 1834 | name = "linux-raw-sys" 1835 | version = "0.0.42" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" 1838 | 1839 | [[package]] 1840 | name = "lock_api" 1841 | version = "0.4.7" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 1844 | dependencies = [ 1845 | "autocfg", 1846 | "scopeguard", 1847 | ] 1848 | 1849 | [[package]] 1850 | name = "log" 1851 | version = "0.4.17" 1852 | source = "registry+https://github.com/rust-lang/crates.io-index" 1853 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1854 | dependencies = [ 1855 | "cfg-if 1.0.0", 1856 | ] 1857 | 1858 | [[package]] 1859 | name = "lru" 1860 | version = "0.7.5" 1861 | source = "registry+https://github.com/rust-lang/crates.io-index" 1862 | checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" 1863 | dependencies = [ 1864 | "hashbrown 0.11.2", 1865 | ] 1866 | 1867 | [[package]] 1868 | name = "mach" 1869 | version = "0.3.2" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" 1872 | dependencies = [ 1873 | "libc", 1874 | ] 1875 | 1876 | [[package]] 1877 | name = "match_cfg" 1878 | version = "0.1.0" 1879 | source = "registry+https://github.com/rust-lang/crates.io-index" 1880 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1881 | 1882 | [[package]] 1883 | name = "matchers" 1884 | version = "0.0.1" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" 1887 | dependencies = [ 1888 | "regex-automata", 1889 | ] 1890 | 1891 | [[package]] 1892 | name = "matchers" 1893 | version = "0.1.0" 1894 | source = "registry+https://github.com/rust-lang/crates.io-index" 1895 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1896 | dependencies = [ 1897 | "regex-automata", 1898 | ] 1899 | 1900 | [[package]] 1901 | name = "matches" 1902 | version = "0.1.9" 1903 | source = "registry+https://github.com/rust-lang/crates.io-index" 1904 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 1905 | 1906 | [[package]] 1907 | name = "maybe-owned" 1908 | version = "0.3.4" 1909 | source = "registry+https://github.com/rust-lang/crates.io-index" 1910 | checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" 1911 | 1912 | [[package]] 1913 | name = "memchr" 1914 | version = "2.5.0" 1915 | source = "registry+https://github.com/rust-lang/crates.io-index" 1916 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1917 | 1918 | [[package]] 1919 | name = "memoffset" 1920 | version = "0.6.5" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1923 | dependencies = [ 1924 | "autocfg", 1925 | ] 1926 | 1927 | [[package]] 1928 | name = "mime" 1929 | version = "0.3.16" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1932 | 1933 | [[package]] 1934 | name = "mime_guess" 1935 | version = "2.0.4" 1936 | source = "registry+https://github.com/rust-lang/crates.io-index" 1937 | checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" 1938 | dependencies = [ 1939 | "mime", 1940 | "unicase 2.6.0", 1941 | ] 1942 | 1943 | [[package]] 1944 | name = "miniz_oxide" 1945 | version = "0.5.1" 1946 | source = "registry+https://github.com/rust-lang/crates.io-index" 1947 | checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" 1948 | dependencies = [ 1949 | "adler", 1950 | ] 1951 | 1952 | [[package]] 1953 | name = "mio" 1954 | version = "0.8.3" 1955 | source = "registry+https://github.com/rust-lang/crates.io-index" 1956 | checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" 1957 | dependencies = [ 1958 | "libc", 1959 | "log", 1960 | "wasi 0.11.0+wasi-snapshot-preview1", 1961 | "windows-sys", 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "more-asserts" 1966 | version = "0.2.2" 1967 | source = "registry+https://github.com/rust-lang/crates.io-index" 1968 | checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" 1969 | 1970 | [[package]] 1971 | name = "multipart" 1972 | version = "0.18.0" 1973 | source = "registry+https://github.com/rust-lang/crates.io-index" 1974 | checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" 1975 | dependencies = [ 1976 | "buf_redux", 1977 | "httparse", 1978 | "log", 1979 | "mime", 1980 | "mime_guess", 1981 | "quick-error", 1982 | "rand 0.8.5", 1983 | "safemem", 1984 | "tempfile", 1985 | "twoway", 1986 | ] 1987 | 1988 | [[package]] 1989 | name = "native-tls" 1990 | version = "0.2.10" 1991 | source = "registry+https://github.com/rust-lang/crates.io-index" 1992 | checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" 1993 | dependencies = [ 1994 | "lazy_static", 1995 | "libc", 1996 | "log", 1997 | "openssl", 1998 | "openssl-probe", 1999 | "openssl-sys", 2000 | "schannel", 2001 | "security-framework", 2002 | "security-framework-sys", 2003 | "tempfile", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "nix" 2008 | version = "0.22.3" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 2011 | dependencies = [ 2012 | "bitflags", 2013 | "cc", 2014 | "cfg-if 1.0.0", 2015 | "libc", 2016 | "memoffset", 2017 | ] 2018 | 2019 | [[package]] 2020 | name = "nix" 2021 | version = "0.23.1" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" 2024 | dependencies = [ 2025 | "bitflags", 2026 | "cc", 2027 | "cfg-if 1.0.0", 2028 | "libc", 2029 | "memoffset", 2030 | ] 2031 | 2032 | [[package]] 2033 | name = "nix" 2034 | version = "0.24.1" 2035 | source = "registry+https://github.com/rust-lang/crates.io-index" 2036 | checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" 2037 | dependencies = [ 2038 | "bitflags", 2039 | "cfg-if 1.0.0", 2040 | "libc", 2041 | "memoffset", 2042 | ] 2043 | 2044 | [[package]] 2045 | name = "num" 2046 | version = "0.3.1" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f" 2049 | dependencies = [ 2050 | "num-bigint 0.3.3", 2051 | "num-complex", 2052 | "num-integer", 2053 | "num-iter", 2054 | "num-rational", 2055 | "num-traits", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "num-bigint" 2060 | version = "0.3.3" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" 2063 | dependencies = [ 2064 | "autocfg", 2065 | "num-integer", 2066 | "num-traits", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "num-bigint" 2071 | version = "0.4.3" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 2074 | dependencies = [ 2075 | "autocfg", 2076 | "num-integer", 2077 | "num-traits", 2078 | ] 2079 | 2080 | [[package]] 2081 | name = "num-complex" 2082 | version = "0.3.1" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" 2085 | dependencies = [ 2086 | "num-traits", 2087 | ] 2088 | 2089 | [[package]] 2090 | name = "num-integer" 2091 | version = "0.1.45" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 2094 | dependencies = [ 2095 | "autocfg", 2096 | "num-traits", 2097 | ] 2098 | 2099 | [[package]] 2100 | name = "num-iter" 2101 | version = "0.1.43" 2102 | source = "registry+https://github.com/rust-lang/crates.io-index" 2103 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" 2104 | dependencies = [ 2105 | "autocfg", 2106 | "num-integer", 2107 | "num-traits", 2108 | ] 2109 | 2110 | [[package]] 2111 | name = "num-rational" 2112 | version = "0.3.2" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" 2115 | dependencies = [ 2116 | "autocfg", 2117 | "num-bigint 0.3.3", 2118 | "num-integer", 2119 | "num-traits", 2120 | ] 2121 | 2122 | [[package]] 2123 | name = "num-traits" 2124 | version = "0.2.15" 2125 | source = "registry+https://github.com/rust-lang/crates.io-index" 2126 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 2127 | dependencies = [ 2128 | "autocfg", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "num_cpus" 2133 | version = "1.13.1" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 2136 | dependencies = [ 2137 | "hermit-abi 0.1.19", 2138 | "libc", 2139 | ] 2140 | 2141 | [[package]] 2142 | name = "num_threads" 2143 | version = "0.1.6" 2144 | source = "registry+https://github.com/rust-lang/crates.io-index" 2145 | checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" 2146 | dependencies = [ 2147 | "libc", 2148 | ] 2149 | 2150 | [[package]] 2151 | name = "oauth2" 2152 | version = "4.2.0" 2153 | source = "registry+https://github.com/rust-lang/crates.io-index" 2154 | checksum = "c3bd7d544f02ae0fa9e06137962703d043870d7ad6e6d44786d6a5f20679b2c9" 2155 | dependencies = [ 2156 | "base64 0.13.0", 2157 | "chrono", 2158 | "getrandom 0.2.6", 2159 | "http 0.2.7", 2160 | "rand 0.8.5", 2161 | "reqwest", 2162 | "serde", 2163 | "serde_json", 2164 | "serde_path_to_error", 2165 | "sha2 0.10.2", 2166 | "thiserror", 2167 | "url 2.2.2", 2168 | ] 2169 | 2170 | [[package]] 2171 | name = "object" 2172 | version = "0.27.1" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" 2175 | dependencies = [ 2176 | "crc32fast", 2177 | "indexmap", 2178 | "memchr", 2179 | ] 2180 | 2181 | [[package]] 2182 | name = "object" 2183 | version = "0.28.4" 2184 | source = "registry+https://github.com/rust-lang/crates.io-index" 2185 | checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" 2186 | dependencies = [ 2187 | "memchr", 2188 | ] 2189 | 2190 | [[package]] 2191 | name = "oci-distribution" 2192 | version = "0.6.0" 2193 | source = "registry+https://github.com/rust-lang/crates.io-index" 2194 | checksum = "d28926bb291150df3e09d0962836b03e9c20fb21d8a172023c5e42650ff16647" 2195 | dependencies = [ 2196 | "anyhow", 2197 | "futures-util", 2198 | "hyperx", 2199 | "lazy_static", 2200 | "regex", 2201 | "reqwest", 2202 | "serde", 2203 | "serde_json", 2204 | "sha2 0.9.9", 2205 | "tokio", 2206 | "tracing", 2207 | "www-authenticate", 2208 | ] 2209 | 2210 | [[package]] 2211 | name = "oci-spec" 2212 | version = "0.5.6" 2213 | source = "registry+https://github.com/rust-lang/crates.io-index" 2214 | checksum = "a5d2738736e7f62e63f478041e7b29ab7c59ffdac2bdd2dd42a96ad72da83a49" 2215 | dependencies = [ 2216 | "derive_builder", 2217 | "getset", 2218 | "serde", 2219 | "serde_json", 2220 | "thiserror", 2221 | ] 2222 | 2223 | [[package]] 2224 | name = "once_cell" 2225 | version = "1.10.0" 2226 | source = "registry+https://github.com/rust-lang/crates.io-index" 2227 | checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" 2228 | 2229 | [[package]] 2230 | name = "opaque-debug" 2231 | version = "0.3.0" 2232 | source = "registry+https://github.com/rust-lang/crates.io-index" 2233 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 2234 | 2235 | [[package]] 2236 | name = "openid" 2237 | version = "0.9.4" 2238 | source = "registry+https://github.com/rust-lang/crates.io-index" 2239 | checksum = "874cd75d55a8371aa3abae9d6dc69e1f8c113e7169a7ddfe9d397c042edea732" 2240 | dependencies = [ 2241 | "base64 0.13.0", 2242 | "biscuit", 2243 | "chrono", 2244 | "lazy_static", 2245 | "reqwest", 2246 | "serde", 2247 | "serde_json", 2248 | "thiserror", 2249 | "url 2.2.2", 2250 | "validator", 2251 | ] 2252 | 2253 | [[package]] 2254 | name = "openssl" 2255 | version = "0.10.40" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e" 2258 | dependencies = [ 2259 | "bitflags", 2260 | "cfg-if 1.0.0", 2261 | "foreign-types", 2262 | "libc", 2263 | "once_cell", 2264 | "openssl-macros", 2265 | "openssl-sys", 2266 | ] 2267 | 2268 | [[package]] 2269 | name = "openssl-macros" 2270 | version = "0.1.0" 2271 | source = "registry+https://github.com/rust-lang/crates.io-index" 2272 | checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" 2273 | dependencies = [ 2274 | "proc-macro2", 2275 | "quote", 2276 | "syn", 2277 | ] 2278 | 2279 | [[package]] 2280 | name = "openssl-probe" 2281 | version = "0.1.5" 2282 | source = "registry+https://github.com/rust-lang/crates.io-index" 2283 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 2284 | 2285 | [[package]] 2286 | name = "openssl-sys" 2287 | version = "0.9.73" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0" 2290 | dependencies = [ 2291 | "autocfg", 2292 | "cc", 2293 | "libc", 2294 | "pkg-config", 2295 | "vcpkg", 2296 | ] 2297 | 2298 | [[package]] 2299 | name = "outbound-redis" 2300 | version = "0.2.0" 2301 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 2302 | dependencies = [ 2303 | "anyhow", 2304 | "redis", 2305 | "spin-engine", 2306 | "spin-manifest", 2307 | "wit-bindgen-wasmtime", 2308 | ] 2309 | 2310 | [[package]] 2311 | name = "parking_lot" 2312 | version = "0.11.2" 2313 | source = "registry+https://github.com/rust-lang/crates.io-index" 2314 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 2315 | dependencies = [ 2316 | "instant", 2317 | "lock_api", 2318 | "parking_lot_core 0.8.5", 2319 | ] 2320 | 2321 | [[package]] 2322 | name = "parking_lot" 2323 | version = "0.12.0" 2324 | source = "registry+https://github.com/rust-lang/crates.io-index" 2325 | checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" 2326 | dependencies = [ 2327 | "lock_api", 2328 | "parking_lot_core 0.9.3", 2329 | ] 2330 | 2331 | [[package]] 2332 | name = "parking_lot_core" 2333 | version = "0.8.5" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 2336 | dependencies = [ 2337 | "cfg-if 1.0.0", 2338 | "instant", 2339 | "libc", 2340 | "redox_syscall", 2341 | "smallvec", 2342 | "winapi", 2343 | ] 2344 | 2345 | [[package]] 2346 | name = "parking_lot_core" 2347 | version = "0.9.3" 2348 | source = "registry+https://github.com/rust-lang/crates.io-index" 2349 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 2350 | dependencies = [ 2351 | "cfg-if 1.0.0", 2352 | "libc", 2353 | "redox_syscall", 2354 | "smallvec", 2355 | "windows-sys", 2356 | ] 2357 | 2358 | [[package]] 2359 | name = "paste" 2360 | version = "1.0.7" 2361 | source = "registry+https://github.com/rust-lang/crates.io-index" 2362 | checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" 2363 | 2364 | [[package]] 2365 | name = "path-absolutize" 2366 | version = "3.0.13" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "d3de4b40bd9736640f14c438304c09538159802388febb02c8abaae0846c1f13" 2369 | dependencies = [ 2370 | "path-dedot", 2371 | ] 2372 | 2373 | [[package]] 2374 | name = "path-dedot" 2375 | version = "3.0.17" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "d611d5291372b3738a34ebf0d1f849e58b1dcc1101032f76a346eaa1f8ddbb5b" 2378 | dependencies = [ 2379 | "once_cell", 2380 | ] 2381 | 2382 | [[package]] 2383 | name = "pem" 2384 | version = "1.0.2" 2385 | source = "registry+https://github.com/rust-lang/crates.io-index" 2386 | checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" 2387 | dependencies = [ 2388 | "base64 0.13.0", 2389 | ] 2390 | 2391 | [[package]] 2392 | name = "percent-encoding" 2393 | version = "1.0.1" 2394 | source = "registry+https://github.com/rust-lang/crates.io-index" 2395 | checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 2396 | 2397 | [[package]] 2398 | name = "percent-encoding" 2399 | version = "2.1.0" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 2402 | 2403 | [[package]] 2404 | name = "pin-project" 2405 | version = "1.0.10" 2406 | source = "registry+https://github.com/rust-lang/crates.io-index" 2407 | checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" 2408 | dependencies = [ 2409 | "pin-project-internal", 2410 | ] 2411 | 2412 | [[package]] 2413 | name = "pin-project-internal" 2414 | version = "1.0.10" 2415 | source = "registry+https://github.com/rust-lang/crates.io-index" 2416 | checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" 2417 | dependencies = [ 2418 | "proc-macro2", 2419 | "quote", 2420 | "syn", 2421 | ] 2422 | 2423 | [[package]] 2424 | name = "pin-project-lite" 2425 | version = "0.2.9" 2426 | source = "registry+https://github.com/rust-lang/crates.io-index" 2427 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 2428 | 2429 | [[package]] 2430 | name = "pin-utils" 2431 | version = "0.1.0" 2432 | source = "registry+https://github.com/rust-lang/crates.io-index" 2433 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2434 | 2435 | [[package]] 2436 | name = "pkg-config" 2437 | version = "0.3.25" 2438 | source = "registry+https://github.com/rust-lang/crates.io-index" 2439 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 2440 | 2441 | [[package]] 2442 | name = "ppv-lite86" 2443 | version = "0.2.16" 2444 | source = "registry+https://github.com/rust-lang/crates.io-index" 2445 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 2446 | 2447 | [[package]] 2448 | name = "prctl" 2449 | version = "1.0.0" 2450 | source = "registry+https://github.com/rust-lang/crates.io-index" 2451 | checksum = "059a34f111a9dee2ce1ac2826a68b24601c4298cfeb1a587c3cb493d5ab46f52" 2452 | dependencies = [ 2453 | "libc", 2454 | "nix 0.24.1", 2455 | ] 2456 | 2457 | [[package]] 2458 | name = "proc-macro-error" 2459 | version = "1.0.4" 2460 | source = "registry+https://github.com/rust-lang/crates.io-index" 2461 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2462 | dependencies = [ 2463 | "proc-macro-error-attr", 2464 | "proc-macro2", 2465 | "quote", 2466 | "syn", 2467 | "version_check 0.9.4", 2468 | ] 2469 | 2470 | [[package]] 2471 | name = "proc-macro-error-attr" 2472 | version = "1.0.4" 2473 | source = "registry+https://github.com/rust-lang/crates.io-index" 2474 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2475 | dependencies = [ 2476 | "proc-macro2", 2477 | "quote", 2478 | "version_check 0.9.4", 2479 | ] 2480 | 2481 | [[package]] 2482 | name = "proc-macro2" 2483 | version = "1.0.39" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" 2486 | dependencies = [ 2487 | "unicode-ident", 2488 | ] 2489 | 2490 | [[package]] 2491 | name = "protobuf" 2492 | version = "2.27.1" 2493 | source = "registry+https://github.com/rust-lang/crates.io-index" 2494 | checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96" 2495 | 2496 | [[package]] 2497 | name = "protobuf-codegen" 2498 | version = "2.27.1" 2499 | source = "registry+https://github.com/rust-lang/crates.io-index" 2500 | checksum = "aec1632b7c8f2e620343439a7dfd1f3c47b18906c4be58982079911482b5d707" 2501 | dependencies = [ 2502 | "protobuf", 2503 | ] 2504 | 2505 | [[package]] 2506 | name = "protobuf-codegen-pure" 2507 | version = "2.27.1" 2508 | source = "registry+https://github.com/rust-lang/crates.io-index" 2509 | checksum = "9f8122fdb18e55190c796b088a16bdb70cd7acdcd48f7a8b796b58c62e532cc6" 2510 | dependencies = [ 2511 | "protobuf", 2512 | "protobuf-codegen", 2513 | ] 2514 | 2515 | [[package]] 2516 | name = "psm" 2517 | version = "0.1.18" 2518 | source = "registry+https://github.com/rust-lang/crates.io-index" 2519 | checksum = "871372391786ccec00d3c5d3d6608905b3d4db263639cfe075d3b60a736d115a" 2520 | dependencies = [ 2521 | "cc", 2522 | ] 2523 | 2524 | [[package]] 2525 | name = "pulldown-cmark" 2526 | version = "0.8.0" 2527 | source = "registry+https://github.com/rust-lang/crates.io-index" 2528 | checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" 2529 | dependencies = [ 2530 | "bitflags", 2531 | "memchr", 2532 | "unicase 2.6.0", 2533 | ] 2534 | 2535 | [[package]] 2536 | name = "quick-error" 2537 | version = "1.2.3" 2538 | source = "registry+https://github.com/rust-lang/crates.io-index" 2539 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2540 | 2541 | [[package]] 2542 | name = "quickcheck" 2543 | version = "1.0.3" 2544 | source = "registry+https://github.com/rust-lang/crates.io-index" 2545 | checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" 2546 | dependencies = [ 2547 | "rand 0.8.5", 2548 | ] 2549 | 2550 | [[package]] 2551 | name = "quote" 2552 | version = "1.0.18" 2553 | source = "registry+https://github.com/rust-lang/crates.io-index" 2554 | checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" 2555 | dependencies = [ 2556 | "proc-macro2", 2557 | ] 2558 | 2559 | [[package]] 2560 | name = "rand" 2561 | version = "0.7.3" 2562 | source = "registry+https://github.com/rust-lang/crates.io-index" 2563 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 2564 | dependencies = [ 2565 | "getrandom 0.1.16", 2566 | "libc", 2567 | "rand_chacha 0.2.2", 2568 | "rand_core 0.5.1", 2569 | "rand_hc", 2570 | ] 2571 | 2572 | [[package]] 2573 | name = "rand" 2574 | version = "0.8.5" 2575 | source = "registry+https://github.com/rust-lang/crates.io-index" 2576 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2577 | dependencies = [ 2578 | "libc", 2579 | "rand_chacha 0.3.1", 2580 | "rand_core 0.6.3", 2581 | ] 2582 | 2583 | [[package]] 2584 | name = "rand_chacha" 2585 | version = "0.2.2" 2586 | source = "registry+https://github.com/rust-lang/crates.io-index" 2587 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 2588 | dependencies = [ 2589 | "ppv-lite86", 2590 | "rand_core 0.5.1", 2591 | ] 2592 | 2593 | [[package]] 2594 | name = "rand_chacha" 2595 | version = "0.3.1" 2596 | source = "registry+https://github.com/rust-lang/crates.io-index" 2597 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2598 | dependencies = [ 2599 | "ppv-lite86", 2600 | "rand_core 0.6.3", 2601 | ] 2602 | 2603 | [[package]] 2604 | name = "rand_core" 2605 | version = "0.5.1" 2606 | source = "registry+https://github.com/rust-lang/crates.io-index" 2607 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 2608 | dependencies = [ 2609 | "getrandom 0.1.16", 2610 | ] 2611 | 2612 | [[package]] 2613 | name = "rand_core" 2614 | version = "0.6.3" 2615 | source = "registry+https://github.com/rust-lang/crates.io-index" 2616 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 2617 | dependencies = [ 2618 | "getrandom 0.2.6", 2619 | ] 2620 | 2621 | [[package]] 2622 | name = "rand_hc" 2623 | version = "0.2.0" 2624 | source = "registry+https://github.com/rust-lang/crates.io-index" 2625 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 2626 | dependencies = [ 2627 | "rand_core 0.5.1", 2628 | ] 2629 | 2630 | [[package]] 2631 | name = "rayon" 2632 | version = "1.5.3" 2633 | source = "registry+https://github.com/rust-lang/crates.io-index" 2634 | checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" 2635 | dependencies = [ 2636 | "autocfg", 2637 | "crossbeam-deque", 2638 | "either", 2639 | "rayon-core", 2640 | ] 2641 | 2642 | [[package]] 2643 | name = "rayon-core" 2644 | version = "1.9.3" 2645 | source = "registry+https://github.com/rust-lang/crates.io-index" 2646 | checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" 2647 | dependencies = [ 2648 | "crossbeam-channel", 2649 | "crossbeam-deque", 2650 | "crossbeam-utils", 2651 | "num_cpus", 2652 | ] 2653 | 2654 | [[package]] 2655 | name = "redis" 2656 | version = "0.21.5" 2657 | source = "registry+https://github.com/rust-lang/crates.io-index" 2658 | checksum = "1a80b5f38d7f5a020856a0e16e40a9cfabf88ae8f0e4c2dcd8a3114c1e470852" 2659 | dependencies = [ 2660 | "async-trait", 2661 | "bytes 1.1.0", 2662 | "combine", 2663 | "dtoa", 2664 | "futures-util", 2665 | "itoa 0.4.8", 2666 | "percent-encoding 2.1.0", 2667 | "pin-project-lite", 2668 | "sha1", 2669 | "tokio", 2670 | "tokio-util 0.6.10", 2671 | "url 2.2.2", 2672 | ] 2673 | 2674 | [[package]] 2675 | name = "redox_syscall" 2676 | version = "0.2.13" 2677 | source = "registry+https://github.com/rust-lang/crates.io-index" 2678 | checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" 2679 | dependencies = [ 2680 | "bitflags", 2681 | ] 2682 | 2683 | [[package]] 2684 | name = "redox_users" 2685 | version = "0.4.3" 2686 | source = "registry+https://github.com/rust-lang/crates.io-index" 2687 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 2688 | dependencies = [ 2689 | "getrandom 0.2.6", 2690 | "redox_syscall", 2691 | "thiserror", 2692 | ] 2693 | 2694 | [[package]] 2695 | name = "regalloc" 2696 | version = "0.0.34" 2697 | source = "registry+https://github.com/rust-lang/crates.io-index" 2698 | checksum = "62446b1d3ebf980bdc68837700af1d77b37bc430e524bf95319c6eada2a4cc02" 2699 | dependencies = [ 2700 | "log", 2701 | "rustc-hash", 2702 | "smallvec", 2703 | ] 2704 | 2705 | [[package]] 2706 | name = "regex" 2707 | version = "1.5.5" 2708 | source = "registry+https://github.com/rust-lang/crates.io-index" 2709 | checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" 2710 | dependencies = [ 2711 | "aho-corasick", 2712 | "memchr", 2713 | "regex-syntax", 2714 | ] 2715 | 2716 | [[package]] 2717 | name = "regex-automata" 2718 | version = "0.1.10" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2721 | dependencies = [ 2722 | "regex-syntax", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "regex-syntax" 2727 | version = "0.6.25" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" 2730 | 2731 | [[package]] 2732 | name = "region" 2733 | version = "2.2.0" 2734 | source = "registry+https://github.com/rust-lang/crates.io-index" 2735 | checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" 2736 | dependencies = [ 2737 | "bitflags", 2738 | "libc", 2739 | "mach", 2740 | "winapi", 2741 | ] 2742 | 2743 | [[package]] 2744 | name = "remove_dir_all" 2745 | version = "0.5.3" 2746 | source = "registry+https://github.com/rust-lang/crates.io-index" 2747 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 2748 | dependencies = [ 2749 | "winapi", 2750 | ] 2751 | 2752 | [[package]] 2753 | name = "reqwest" 2754 | version = "0.11.10" 2755 | source = "registry+https://github.com/rust-lang/crates.io-index" 2756 | checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" 2757 | dependencies = [ 2758 | "base64 0.13.0", 2759 | "bytes 1.1.0", 2760 | "encoding_rs", 2761 | "futures-core", 2762 | "futures-util", 2763 | "h2", 2764 | "http 0.2.7", 2765 | "http-body", 2766 | "hyper", 2767 | "hyper-rustls", 2768 | "hyper-tls", 2769 | "ipnet", 2770 | "js-sys", 2771 | "lazy_static", 2772 | "log", 2773 | "mime", 2774 | "native-tls", 2775 | "percent-encoding 2.1.0", 2776 | "pin-project-lite", 2777 | "rustls 0.20.5", 2778 | "rustls-pemfile 0.3.0", 2779 | "serde", 2780 | "serde_json", 2781 | "serde_urlencoded", 2782 | "tokio", 2783 | "tokio-native-tls", 2784 | "tokio-rustls 0.23.4", 2785 | "tokio-util 0.6.10", 2786 | "url 2.2.2", 2787 | "wasm-bindgen", 2788 | "wasm-bindgen-futures", 2789 | "web-sys", 2790 | "webpki-roots", 2791 | "winreg", 2792 | ] 2793 | 2794 | [[package]] 2795 | name = "ring" 2796 | version = "0.16.20" 2797 | source = "registry+https://github.com/rust-lang/crates.io-index" 2798 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 2799 | dependencies = [ 2800 | "cc", 2801 | "libc", 2802 | "once_cell", 2803 | "spin", 2804 | "untrusted", 2805 | "web-sys", 2806 | "winapi", 2807 | ] 2808 | 2809 | [[package]] 2810 | name = "rouille" 2811 | version = "3.5.0" 2812 | source = "registry+https://github.com/rust-lang/crates.io-index" 2813 | checksum = "18b2380c42510ef4a28b5f228a174c801e0dec590103e215e60812e2e2f34d05" 2814 | dependencies = [ 2815 | "base64 0.13.0", 2816 | "brotli", 2817 | "chrono", 2818 | "deflate", 2819 | "filetime", 2820 | "multipart", 2821 | "num_cpus", 2822 | "percent-encoding 2.1.0", 2823 | "rand 0.8.5", 2824 | "serde", 2825 | "serde_derive", 2826 | "serde_json", 2827 | "sha1", 2828 | "threadpool", 2829 | "time 0.3.9", 2830 | "tiny_http", 2831 | "url 2.2.2", 2832 | ] 2833 | 2834 | [[package]] 2835 | name = "rustc-demangle" 2836 | version = "0.1.21" 2837 | source = "registry+https://github.com/rust-lang/crates.io-index" 2838 | checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" 2839 | 2840 | [[package]] 2841 | name = "rustc-hash" 2842 | version = "1.1.0" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2845 | 2846 | [[package]] 2847 | name = "rustix" 2848 | version = "0.33.7" 2849 | source = "registry+https://github.com/rust-lang/crates.io-index" 2850 | checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0" 2851 | dependencies = [ 2852 | "bitflags", 2853 | "errno", 2854 | "io-lifetimes", 2855 | "itoa 1.0.2", 2856 | "libc", 2857 | "linux-raw-sys", 2858 | "once_cell", 2859 | "winapi", 2860 | ] 2861 | 2862 | [[package]] 2863 | name = "rustls" 2864 | version = "0.19.1" 2865 | source = "registry+https://github.com/rust-lang/crates.io-index" 2866 | checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" 2867 | dependencies = [ 2868 | "base64 0.13.0", 2869 | "log", 2870 | "ring", 2871 | "sct 0.6.1", 2872 | "webpki 0.21.4", 2873 | ] 2874 | 2875 | [[package]] 2876 | name = "rustls" 2877 | version = "0.20.5" 2878 | source = "registry+https://github.com/rust-lang/crates.io-index" 2879 | checksum = "a024a432ae760ab3bff924ad91ce1cfa52cb57ed16e1ef32d0d249cfee1a6c13" 2880 | dependencies = [ 2881 | "log", 2882 | "ring", 2883 | "sct 0.7.0", 2884 | "webpki 0.22.0", 2885 | ] 2886 | 2887 | [[package]] 2888 | name = "rustls-native-certs" 2889 | version = "0.6.2" 2890 | source = "registry+https://github.com/rust-lang/crates.io-index" 2891 | checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" 2892 | dependencies = [ 2893 | "openssl-probe", 2894 | "rustls-pemfile 1.0.0", 2895 | "schannel", 2896 | "security-framework", 2897 | ] 2898 | 2899 | [[package]] 2900 | name = "rustls-pemfile" 2901 | version = "0.3.0" 2902 | source = "registry+https://github.com/rust-lang/crates.io-index" 2903 | checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" 2904 | dependencies = [ 2905 | "base64 0.13.0", 2906 | ] 2907 | 2908 | [[package]] 2909 | name = "rustls-pemfile" 2910 | version = "1.0.0" 2911 | source = "registry+https://github.com/rust-lang/crates.io-index" 2912 | checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" 2913 | dependencies = [ 2914 | "base64 0.13.0", 2915 | ] 2916 | 2917 | [[package]] 2918 | name = "ryu" 2919 | version = "1.0.10" 2920 | source = "registry+https://github.com/rust-lang/crates.io-index" 2921 | checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" 2922 | 2923 | [[package]] 2924 | name = "safemem" 2925 | version = "0.3.3" 2926 | source = "registry+https://github.com/rust-lang/crates.io-index" 2927 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 2928 | 2929 | [[package]] 2930 | name = "same-file" 2931 | version = "1.0.6" 2932 | source = "registry+https://github.com/rust-lang/crates.io-index" 2933 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2934 | dependencies = [ 2935 | "winapi-util", 2936 | ] 2937 | 2938 | [[package]] 2939 | name = "sanitize-filename" 2940 | version = "0.3.0" 2941 | source = "registry+https://github.com/rust-lang/crates.io-index" 2942 | checksum = "bf18934a12018228c5b55a6dae9df5d0641e3566b3630cb46cc55564068e7c2f" 2943 | dependencies = [ 2944 | "lazy_static", 2945 | "regex", 2946 | ] 2947 | 2948 | [[package]] 2949 | name = "schannel" 2950 | version = "0.1.19" 2951 | source = "registry+https://github.com/rust-lang/crates.io-index" 2952 | checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" 2953 | dependencies = [ 2954 | "lazy_static", 2955 | "winapi", 2956 | ] 2957 | 2958 | [[package]] 2959 | name = "scoped-tls" 2960 | version = "1.0.0" 2961 | source = "registry+https://github.com/rust-lang/crates.io-index" 2962 | checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" 2963 | 2964 | [[package]] 2965 | name = "scopeguard" 2966 | version = "1.1.0" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2969 | 2970 | [[package]] 2971 | name = "sct" 2972 | version = "0.6.1" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" 2975 | dependencies = [ 2976 | "ring", 2977 | "untrusted", 2978 | ] 2979 | 2980 | [[package]] 2981 | name = "sct" 2982 | version = "0.7.0" 2983 | source = "registry+https://github.com/rust-lang/crates.io-index" 2984 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" 2985 | dependencies = [ 2986 | "ring", 2987 | "untrusted", 2988 | ] 2989 | 2990 | [[package]] 2991 | name = "security-framework" 2992 | version = "2.6.1" 2993 | source = "registry+https://github.com/rust-lang/crates.io-index" 2994 | checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" 2995 | dependencies = [ 2996 | "bitflags", 2997 | "core-foundation", 2998 | "core-foundation-sys", 2999 | "libc", 3000 | "security-framework-sys", 3001 | ] 3002 | 3003 | [[package]] 3004 | name = "security-framework-sys" 3005 | version = "2.6.1" 3006 | source = "registry+https://github.com/rust-lang/crates.io-index" 3007 | checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" 3008 | dependencies = [ 3009 | "core-foundation-sys", 3010 | "libc", 3011 | ] 3012 | 3013 | [[package]] 3014 | name = "semver" 3015 | version = "1.0.9" 3016 | source = "registry+https://github.com/rust-lang/crates.io-index" 3017 | checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" 3018 | dependencies = [ 3019 | "serde", 3020 | ] 3021 | 3022 | [[package]] 3023 | name = "serde" 3024 | version = "1.0.137" 3025 | source = "registry+https://github.com/rust-lang/crates.io-index" 3026 | checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" 3027 | dependencies = [ 3028 | "serde_derive", 3029 | ] 3030 | 3031 | [[package]] 3032 | name = "serde_cbor" 3033 | version = "0.11.2" 3034 | source = "registry+https://github.com/rust-lang/crates.io-index" 3035 | checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" 3036 | dependencies = [ 3037 | "half", 3038 | "serde", 3039 | ] 3040 | 3041 | [[package]] 3042 | name = "serde_derive" 3043 | version = "1.0.137" 3044 | source = "registry+https://github.com/rust-lang/crates.io-index" 3045 | checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" 3046 | dependencies = [ 3047 | "proc-macro2", 3048 | "quote", 3049 | "syn", 3050 | ] 3051 | 3052 | [[package]] 3053 | name = "serde_json" 3054 | version = "1.0.81" 3055 | source = "registry+https://github.com/rust-lang/crates.io-index" 3056 | checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" 3057 | dependencies = [ 3058 | "indexmap", 3059 | "itoa 1.0.2", 3060 | "ryu", 3061 | "serde", 3062 | ] 3063 | 3064 | [[package]] 3065 | name = "serde_path_to_error" 3066 | version = "0.1.7" 3067 | source = "registry+https://github.com/rust-lang/crates.io-index" 3068 | checksum = "d7868ad3b8196a8a0aea99a8220b124278ee5320a55e4fde97794b6f85b1a377" 3069 | dependencies = [ 3070 | "serde", 3071 | ] 3072 | 3073 | [[package]] 3074 | name = "serde_urlencoded" 3075 | version = "0.7.1" 3076 | source = "registry+https://github.com/rust-lang/crates.io-index" 3077 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3078 | dependencies = [ 3079 | "form_urlencoded", 3080 | "itoa 1.0.2", 3081 | "ryu", 3082 | "serde", 3083 | ] 3084 | 3085 | [[package]] 3086 | name = "sha-1" 3087 | version = "0.9.8" 3088 | source = "registry+https://github.com/rust-lang/crates.io-index" 3089 | checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" 3090 | dependencies = [ 3091 | "block-buffer 0.9.0", 3092 | "cfg-if 1.0.0", 3093 | "cpufeatures", 3094 | "digest 0.9.0", 3095 | "opaque-debug", 3096 | ] 3097 | 3098 | [[package]] 3099 | name = "sha-1" 3100 | version = "0.10.0" 3101 | source = "registry+https://github.com/rust-lang/crates.io-index" 3102 | checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" 3103 | dependencies = [ 3104 | "cfg-if 1.0.0", 3105 | "cpufeatures", 3106 | "digest 0.10.3", 3107 | ] 3108 | 3109 | [[package]] 3110 | name = "sha1" 3111 | version = "0.6.1" 3112 | source = "registry+https://github.com/rust-lang/crates.io-index" 3113 | checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" 3114 | dependencies = [ 3115 | "sha1_smol", 3116 | ] 3117 | 3118 | [[package]] 3119 | name = "sha1_smol" 3120 | version = "1.0.0" 3121 | source = "registry+https://github.com/rust-lang/crates.io-index" 3122 | checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" 3123 | 3124 | [[package]] 3125 | name = "sha2" 3126 | version = "0.9.9" 3127 | source = "registry+https://github.com/rust-lang/crates.io-index" 3128 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 3129 | dependencies = [ 3130 | "block-buffer 0.9.0", 3131 | "cfg-if 1.0.0", 3132 | "cpufeatures", 3133 | "digest 0.9.0", 3134 | "opaque-debug", 3135 | ] 3136 | 3137 | [[package]] 3138 | name = "sha2" 3139 | version = "0.10.2" 3140 | source = "registry+https://github.com/rust-lang/crates.io-index" 3141 | checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" 3142 | dependencies = [ 3143 | "cfg-if 1.0.0", 3144 | "cpufeatures", 3145 | "digest 0.10.3", 3146 | ] 3147 | 3148 | [[package]] 3149 | name = "sharded-slab" 3150 | version = "0.1.4" 3151 | source = "registry+https://github.com/rust-lang/crates.io-index" 3152 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 3153 | dependencies = [ 3154 | "lazy_static", 3155 | ] 3156 | 3157 | [[package]] 3158 | name = "shellexpand" 3159 | version = "2.1.0" 3160 | source = "registry+https://github.com/rust-lang/crates.io-index" 3161 | checksum = "83bdb7831b2d85ddf4a7b148aa19d0587eddbe8671a436b7bd1182eaad0f2829" 3162 | dependencies = [ 3163 | "dirs-next", 3164 | ] 3165 | 3166 | [[package]] 3167 | name = "signal-hook" 3168 | version = "0.3.14" 3169 | source = "registry+https://github.com/rust-lang/crates.io-index" 3170 | checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" 3171 | dependencies = [ 3172 | "libc", 3173 | "signal-hook-registry", 3174 | ] 3175 | 3176 | [[package]] 3177 | name = "signal-hook-registry" 3178 | version = "1.4.0" 3179 | source = "registry+https://github.com/rust-lang/crates.io-index" 3180 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 3181 | dependencies = [ 3182 | "libc", 3183 | ] 3184 | 3185 | [[package]] 3186 | name = "signature" 3187 | version = "1.5.0" 3188 | source = "registry+https://github.com/rust-lang/crates.io-index" 3189 | checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" 3190 | 3191 | [[package]] 3192 | name = "simple_asn1" 3193 | version = "0.6.1" 3194 | source = "registry+https://github.com/rust-lang/crates.io-index" 3195 | checksum = "4a762b1c38b9b990c694b9c2f8abe3372ce6a9ceaae6bca39cfc46e054f45745" 3196 | dependencies = [ 3197 | "num-bigint 0.4.3", 3198 | "num-traits", 3199 | "thiserror", 3200 | "time 0.3.9", 3201 | ] 3202 | 3203 | [[package]] 3204 | name = "slab" 3205 | version = "0.4.6" 3206 | source = "registry+https://github.com/rust-lang/crates.io-index" 3207 | checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" 3208 | 3209 | [[package]] 3210 | name = "sled" 3211 | version = "0.34.7" 3212 | source = "registry+https://github.com/rust-lang/crates.io-index" 3213 | checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" 3214 | dependencies = [ 3215 | "crc32fast", 3216 | "crossbeam-epoch", 3217 | "crossbeam-utils", 3218 | "fs2", 3219 | "fxhash", 3220 | "libc", 3221 | "log", 3222 | "parking_lot 0.11.2", 3223 | ] 3224 | 3225 | [[package]] 3226 | name = "smallvec" 3227 | version = "1.8.0" 3228 | source = "registry+https://github.com/rust-lang/crates.io-index" 3229 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 3230 | 3231 | [[package]] 3232 | name = "snafu" 3233 | version = "0.6.10" 3234 | source = "registry+https://github.com/rust-lang/crates.io-index" 3235 | checksum = "eab12d3c261b2308b0d80c26fffb58d17eba81a4be97890101f416b478c79ca7" 3236 | dependencies = [ 3237 | "doc-comment", 3238 | "snafu-derive", 3239 | ] 3240 | 3241 | [[package]] 3242 | name = "snafu-derive" 3243 | version = "0.6.10" 3244 | source = "registry+https://github.com/rust-lang/crates.io-index" 3245 | checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" 3246 | dependencies = [ 3247 | "proc-macro2", 3248 | "quote", 3249 | "syn", 3250 | ] 3251 | 3252 | [[package]] 3253 | name = "socket2" 3254 | version = "0.4.4" 3255 | source = "registry+https://github.com/rust-lang/crates.io-index" 3256 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 3257 | dependencies = [ 3258 | "libc", 3259 | "winapi", 3260 | ] 3261 | 3262 | [[package]] 3263 | name = "spin" 3264 | version = "0.5.2" 3265 | source = "registry+https://github.com/rust-lang/crates.io-index" 3266 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 3267 | 3268 | [[package]] 3269 | name = "spin-config" 3270 | version = "0.2.0" 3271 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 3272 | dependencies = [ 3273 | "anyhow", 3274 | "serde", 3275 | "thiserror", 3276 | "wit-bindgen-wasmtime", 3277 | ] 3278 | 3279 | [[package]] 3280 | name = "spin-engine" 3281 | version = "0.2.0" 3282 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 3283 | dependencies = [ 3284 | "anyhow", 3285 | "bytes 1.1.0", 3286 | "cap-std", 3287 | "dirs", 3288 | "sanitize-filename", 3289 | "spin-config", 3290 | "spin-manifest", 3291 | "tempfile", 3292 | "tokio", 3293 | "tracing", 3294 | "tracing-futures", 3295 | "wasi-cap-std-sync", 3296 | "wasi-common", 3297 | "wasmtime", 3298 | "wasmtime-wasi", 3299 | ] 3300 | 3301 | [[package]] 3302 | name = "spin-http-engine" 3303 | version = "0.2.0" 3304 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 3305 | dependencies = [ 3306 | "anyhow", 3307 | "async-trait", 3308 | "atty", 3309 | "bytes 1.1.0", 3310 | "cap-std", 3311 | "ctrlc", 3312 | "futures", 3313 | "futures-util", 3314 | "http 0.2.7", 3315 | "hyper", 3316 | "hyper-rustls", 3317 | "indexmap", 3318 | "rustls-pemfile 0.3.0", 3319 | "serde", 3320 | "spin-engine", 3321 | "spin-manifest", 3322 | "spin-trigger", 3323 | "tls-listener", 3324 | "tokio", 3325 | "tokio-rustls 0.23.4", 3326 | "tracing", 3327 | "tracing-futures", 3328 | "tracing-subscriber 0.3.11", 3329 | "url 2.2.2", 3330 | "wagi", 3331 | "wasi-cap-std-sync", 3332 | "wasi-common", 3333 | "wasmtime", 3334 | "wasmtime-wasi", 3335 | "wit-bindgen-wasmtime", 3336 | ] 3337 | 3338 | [[package]] 3339 | name = "spin-loader" 3340 | version = "0.2.0" 3341 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 3342 | dependencies = [ 3343 | "anyhow", 3344 | "async-trait", 3345 | "bindle", 3346 | "bytes 1.1.0", 3347 | "dirs", 3348 | "fs_extra", 3349 | "futures", 3350 | "glob", 3351 | "itertools", 3352 | "lazy_static", 3353 | "path-absolutize", 3354 | "regex", 3355 | "reqwest", 3356 | "serde", 3357 | "sha2 0.10.2", 3358 | "spin-config", 3359 | "spin-manifest", 3360 | "tempfile", 3361 | "tokio", 3362 | "tokio-util 0.6.10", 3363 | "toml", 3364 | "tracing", 3365 | "tracing-futures", 3366 | "tracing-subscriber 0.3.11", 3367 | "walkdir", 3368 | ] 3369 | 3370 | [[package]] 3371 | name = "spin-manifest" 3372 | version = "0.2.0" 3373 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 3374 | dependencies = [ 3375 | "anyhow", 3376 | "indexmap", 3377 | "serde", 3378 | "spin-config", 3379 | "thiserror", 3380 | ] 3381 | 3382 | [[package]] 3383 | name = "spin-trigger" 3384 | version = "0.2.0" 3385 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 3386 | dependencies = [ 3387 | "anyhow", 3388 | "async-trait", 3389 | "outbound-redis", 3390 | "spin-engine", 3391 | "spin-manifest", 3392 | "wasi-outbound-http", 3393 | "wasmtime", 3394 | ] 3395 | 3396 | [[package]] 3397 | name = "stable_deref_trait" 3398 | version = "1.2.0" 3399 | source = "registry+https://github.com/rust-lang/crates.io-index" 3400 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 3401 | 3402 | [[package]] 3403 | name = "strsim" 3404 | version = "0.8.0" 3405 | source = "registry+https://github.com/rust-lang/crates.io-index" 3406 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 3407 | 3408 | [[package]] 3409 | name = "strsim" 3410 | version = "0.10.0" 3411 | source = "registry+https://github.com/rust-lang/crates.io-index" 3412 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 3413 | 3414 | [[package]] 3415 | name = "subtle" 3416 | version = "2.4.1" 3417 | source = "registry+https://github.com/rust-lang/crates.io-index" 3418 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 3419 | 3420 | [[package]] 3421 | name = "syn" 3422 | version = "1.0.95" 3423 | source = "registry+https://github.com/rust-lang/crates.io-index" 3424 | checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" 3425 | dependencies = [ 3426 | "proc-macro2", 3427 | "quote", 3428 | "unicode-ident", 3429 | ] 3430 | 3431 | [[package]] 3432 | name = "synstructure" 3433 | version = "0.12.6" 3434 | source = "registry+https://github.com/rust-lang/crates.io-index" 3435 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 3436 | dependencies = [ 3437 | "proc-macro2", 3438 | "quote", 3439 | "syn", 3440 | "unicode-xid", 3441 | ] 3442 | 3443 | [[package]] 3444 | name = "system-interface" 3445 | version = "0.20.0" 3446 | source = "registry+https://github.com/rust-lang/crates.io-index" 3447 | checksum = "1e09bb3fb4e02ec4b87e182ea9718fadbc0fa3e50085b40a9af9690572b67f9e" 3448 | dependencies = [ 3449 | "atty", 3450 | "bitflags", 3451 | "cap-fs-ext", 3452 | "cap-std", 3453 | "io-lifetimes", 3454 | "rustix", 3455 | "winapi", 3456 | "winx", 3457 | ] 3458 | 3459 | [[package]] 3460 | name = "target-lexicon" 3461 | version = "0.12.3" 3462 | source = "registry+https://github.com/rust-lang/crates.io-index" 3463 | checksum = "d7fa7e55043acb85fca6b3c01485a2eeb6b69c5d21002e273c79e465f43b7ac1" 3464 | 3465 | [[package]] 3466 | name = "tempfile" 3467 | version = "3.3.0" 3468 | source = "registry+https://github.com/rust-lang/crates.io-index" 3469 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" 3470 | dependencies = [ 3471 | "cfg-if 1.0.0", 3472 | "fastrand", 3473 | "libc", 3474 | "redox_syscall", 3475 | "remove_dir_all", 3476 | "winapi", 3477 | ] 3478 | 3479 | [[package]] 3480 | name = "termcolor" 3481 | version = "1.1.3" 3482 | source = "registry+https://github.com/rust-lang/crates.io-index" 3483 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 3484 | dependencies = [ 3485 | "winapi-util", 3486 | ] 3487 | 3488 | [[package]] 3489 | name = "textwrap" 3490 | version = "0.11.0" 3491 | source = "registry+https://github.com/rust-lang/crates.io-index" 3492 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 3493 | dependencies = [ 3494 | "unicode-width", 3495 | ] 3496 | 3497 | [[package]] 3498 | name = "thiserror" 3499 | version = "1.0.31" 3500 | source = "registry+https://github.com/rust-lang/crates.io-index" 3501 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 3502 | dependencies = [ 3503 | "thiserror-impl", 3504 | ] 3505 | 3506 | [[package]] 3507 | name = "thiserror-impl" 3508 | version = "1.0.31" 3509 | source = "registry+https://github.com/rust-lang/crates.io-index" 3510 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 3511 | dependencies = [ 3512 | "proc-macro2", 3513 | "quote", 3514 | "syn", 3515 | ] 3516 | 3517 | [[package]] 3518 | name = "thread_local" 3519 | version = "1.1.4" 3520 | source = "registry+https://github.com/rust-lang/crates.io-index" 3521 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 3522 | dependencies = [ 3523 | "once_cell", 3524 | ] 3525 | 3526 | [[package]] 3527 | name = "threadpool" 3528 | version = "1.8.1" 3529 | source = "registry+https://github.com/rust-lang/crates.io-index" 3530 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 3531 | dependencies = [ 3532 | "num_cpus", 3533 | ] 3534 | 3535 | [[package]] 3536 | name = "time" 3537 | version = "0.1.44" 3538 | source = "registry+https://github.com/rust-lang/crates.io-index" 3539 | checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" 3540 | dependencies = [ 3541 | "libc", 3542 | "wasi 0.10.0+wasi-snapshot-preview1", 3543 | "winapi", 3544 | ] 3545 | 3546 | [[package]] 3547 | name = "time" 3548 | version = "0.3.9" 3549 | source = "registry+https://github.com/rust-lang/crates.io-index" 3550 | checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" 3551 | dependencies = [ 3552 | "itoa 1.0.2", 3553 | "libc", 3554 | "num_threads", 3555 | "quickcheck", 3556 | "serde", 3557 | "time-macros", 3558 | ] 3559 | 3560 | [[package]] 3561 | name = "time-macros" 3562 | version = "0.2.4" 3563 | source = "registry+https://github.com/rust-lang/crates.io-index" 3564 | checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" 3565 | 3566 | [[package]] 3567 | name = "tiny_http" 3568 | version = "0.8.2" 3569 | source = "registry+https://github.com/rust-lang/crates.io-index" 3570 | checksum = "9ce51b50006056f590c9b7c3808c3bd70f0d1101666629713866c227d6e58d39" 3571 | dependencies = [ 3572 | "ascii", 3573 | "chrono", 3574 | "chunked_transfer", 3575 | "log", 3576 | "url 2.2.2", 3577 | ] 3578 | 3579 | [[package]] 3580 | name = "tinyvec" 3581 | version = "1.6.0" 3582 | source = "registry+https://github.com/rust-lang/crates.io-index" 3583 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 3584 | dependencies = [ 3585 | "tinyvec_macros", 3586 | ] 3587 | 3588 | [[package]] 3589 | name = "tinyvec_macros" 3590 | version = "0.1.0" 3591 | source = "registry+https://github.com/rust-lang/crates.io-index" 3592 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 3593 | 3594 | [[package]] 3595 | name = "tls-listener" 3596 | version = "0.4.3" 3597 | source = "registry+https://github.com/rust-lang/crates.io-index" 3598 | checksum = "6e8a215badde081a06ee0a7fbc9c9f0d580c022fbdc547065f62103aef71e178" 3599 | dependencies = [ 3600 | "futures-util", 3601 | "hyper", 3602 | "pin-project-lite", 3603 | "thiserror", 3604 | "tokio", 3605 | "tokio-rustls 0.23.4", 3606 | ] 3607 | 3608 | [[package]] 3609 | name = "tokio" 3610 | version = "1.18.2" 3611 | source = "registry+https://github.com/rust-lang/crates.io-index" 3612 | checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395" 3613 | dependencies = [ 3614 | "bytes 1.1.0", 3615 | "libc", 3616 | "memchr", 3617 | "mio", 3618 | "num_cpus", 3619 | "once_cell", 3620 | "parking_lot 0.12.0", 3621 | "pin-project-lite", 3622 | "signal-hook-registry", 3623 | "socket2", 3624 | "tokio-macros", 3625 | "winapi", 3626 | ] 3627 | 3628 | [[package]] 3629 | name = "tokio-macros" 3630 | version = "1.7.0" 3631 | source = "registry+https://github.com/rust-lang/crates.io-index" 3632 | checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" 3633 | dependencies = [ 3634 | "proc-macro2", 3635 | "quote", 3636 | "syn", 3637 | ] 3638 | 3639 | [[package]] 3640 | name = "tokio-native-tls" 3641 | version = "0.3.0" 3642 | source = "registry+https://github.com/rust-lang/crates.io-index" 3643 | checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" 3644 | dependencies = [ 3645 | "native-tls", 3646 | "tokio", 3647 | ] 3648 | 3649 | [[package]] 3650 | name = "tokio-rustls" 3651 | version = "0.22.0" 3652 | source = "registry+https://github.com/rust-lang/crates.io-index" 3653 | checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" 3654 | dependencies = [ 3655 | "rustls 0.19.1", 3656 | "tokio", 3657 | "webpki 0.21.4", 3658 | ] 3659 | 3660 | [[package]] 3661 | name = "tokio-rustls" 3662 | version = "0.23.4" 3663 | source = "registry+https://github.com/rust-lang/crates.io-index" 3664 | checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" 3665 | dependencies = [ 3666 | "rustls 0.20.5", 3667 | "tokio", 3668 | "webpki 0.22.0", 3669 | ] 3670 | 3671 | [[package]] 3672 | name = "tokio-stream" 3673 | version = "0.1.8" 3674 | source = "registry+https://github.com/rust-lang/crates.io-index" 3675 | checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" 3676 | dependencies = [ 3677 | "futures-core", 3678 | "pin-project-lite", 3679 | "tokio", 3680 | ] 3681 | 3682 | [[package]] 3683 | name = "tokio-tar" 3684 | version = "0.3.0" 3685 | source = "registry+https://github.com/rust-lang/crates.io-index" 3686 | checksum = "a50188549787c32c1c3d9c8c71ad7e003ccf2f102489c5a96e385c84760477f4" 3687 | dependencies = [ 3688 | "filetime", 3689 | "futures-core", 3690 | "libc", 3691 | "redox_syscall", 3692 | "tokio", 3693 | "tokio-stream", 3694 | "xattr", 3695 | ] 3696 | 3697 | [[package]] 3698 | name = "tokio-tungstenite" 3699 | version = "0.15.0" 3700 | source = "registry+https://github.com/rust-lang/crates.io-index" 3701 | checksum = "511de3f85caf1c98983545490c3d09685fa8eb634e57eec22bb4db271f46cbd8" 3702 | dependencies = [ 3703 | "futures-util", 3704 | "log", 3705 | "pin-project", 3706 | "tokio", 3707 | "tungstenite", 3708 | ] 3709 | 3710 | [[package]] 3711 | name = "tokio-util" 3712 | version = "0.6.10" 3713 | source = "registry+https://github.com/rust-lang/crates.io-index" 3714 | checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" 3715 | dependencies = [ 3716 | "bytes 1.1.0", 3717 | "futures-core", 3718 | "futures-sink", 3719 | "log", 3720 | "pin-project-lite", 3721 | "tokio", 3722 | ] 3723 | 3724 | [[package]] 3725 | name = "tokio-util" 3726 | version = "0.7.2" 3727 | source = "registry+https://github.com/rust-lang/crates.io-index" 3728 | checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c" 3729 | dependencies = [ 3730 | "bytes 1.1.0", 3731 | "futures-core", 3732 | "futures-sink", 3733 | "pin-project-lite", 3734 | "tokio", 3735 | "tracing", 3736 | ] 3737 | 3738 | [[package]] 3739 | name = "toml" 3740 | version = "0.5.9" 3741 | source = "registry+https://github.com/rust-lang/crates.io-index" 3742 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 3743 | dependencies = [ 3744 | "serde", 3745 | ] 3746 | 3747 | [[package]] 3748 | name = "tower-service" 3749 | version = "0.3.1" 3750 | source = "registry+https://github.com/rust-lang/crates.io-index" 3751 | checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" 3752 | 3753 | [[package]] 3754 | name = "tracing" 3755 | version = "0.1.34" 3756 | source = "registry+https://github.com/rust-lang/crates.io-index" 3757 | checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" 3758 | dependencies = [ 3759 | "cfg-if 1.0.0", 3760 | "log", 3761 | "pin-project-lite", 3762 | "tracing-attributes", 3763 | "tracing-core", 3764 | ] 3765 | 3766 | [[package]] 3767 | name = "tracing-attributes" 3768 | version = "0.1.21" 3769 | source = "registry+https://github.com/rust-lang/crates.io-index" 3770 | checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" 3771 | dependencies = [ 3772 | "proc-macro2", 3773 | "quote", 3774 | "syn", 3775 | ] 3776 | 3777 | [[package]] 3778 | name = "tracing-core" 3779 | version = "0.1.26" 3780 | source = "registry+https://github.com/rust-lang/crates.io-index" 3781 | checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" 3782 | dependencies = [ 3783 | "lazy_static", 3784 | "valuable", 3785 | ] 3786 | 3787 | [[package]] 3788 | name = "tracing-futures" 3789 | version = "0.2.5" 3790 | source = "registry+https://github.com/rust-lang/crates.io-index" 3791 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 3792 | dependencies = [ 3793 | "pin-project", 3794 | "tracing", 3795 | ] 3796 | 3797 | [[package]] 3798 | name = "tracing-log" 3799 | version = "0.1.3" 3800 | source = "registry+https://github.com/rust-lang/crates.io-index" 3801 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" 3802 | dependencies = [ 3803 | "lazy_static", 3804 | "log", 3805 | "tracing-core", 3806 | ] 3807 | 3808 | [[package]] 3809 | name = "tracing-serde" 3810 | version = "0.1.3" 3811 | source = "registry+https://github.com/rust-lang/crates.io-index" 3812 | checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" 3813 | dependencies = [ 3814 | "serde", 3815 | "tracing-core", 3816 | ] 3817 | 3818 | [[package]] 3819 | name = "tracing-subscriber" 3820 | version = "0.2.25" 3821 | source = "registry+https://github.com/rust-lang/crates.io-index" 3822 | checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" 3823 | dependencies = [ 3824 | "ansi_term", 3825 | "chrono", 3826 | "lazy_static", 3827 | "matchers 0.0.1", 3828 | "regex", 3829 | "serde", 3830 | "serde_json", 3831 | "sharded-slab", 3832 | "smallvec", 3833 | "thread_local", 3834 | "tracing", 3835 | "tracing-core", 3836 | "tracing-log", 3837 | "tracing-serde", 3838 | ] 3839 | 3840 | [[package]] 3841 | name = "tracing-subscriber" 3842 | version = "0.3.11" 3843 | source = "registry+https://github.com/rust-lang/crates.io-index" 3844 | checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" 3845 | dependencies = [ 3846 | "ansi_term", 3847 | "lazy_static", 3848 | "matchers 0.1.0", 3849 | "regex", 3850 | "sharded-slab", 3851 | "smallvec", 3852 | "thread_local", 3853 | "tracing", 3854 | "tracing-core", 3855 | "tracing-log", 3856 | ] 3857 | 3858 | [[package]] 3859 | name = "try-lock" 3860 | version = "0.2.3" 3861 | source = "registry+https://github.com/rust-lang/crates.io-index" 3862 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" 3863 | 3864 | [[package]] 3865 | name = "ttrpc" 3866 | version = "0.5.3" 3867 | source = "registry+https://github.com/rust-lang/crates.io-index" 3868 | checksum = "c46d73bc2a74f2440921b6539afbed68064b48b2c4f194c637430d1c83d052ad" 3869 | dependencies = [ 3870 | "byteorder", 3871 | "libc", 3872 | "log", 3873 | "nix 0.23.1", 3874 | "protobuf", 3875 | "protobuf-codegen-pure", 3876 | "thiserror", 3877 | ] 3878 | 3879 | [[package]] 3880 | name = "ttrpc" 3881 | version = "0.6.1" 3882 | source = "registry+https://github.com/rust-lang/crates.io-index" 3883 | checksum = "2ecfff459a859c6ba6668ff72b34c2f1d94d9d58f7088414c2674ad0f31cc7d8" 3884 | dependencies = [ 3885 | "byteorder", 3886 | "libc", 3887 | "log", 3888 | "nix 0.23.1", 3889 | "protobuf", 3890 | "protobuf-codegen-pure", 3891 | "thiserror", 3892 | ] 3893 | 3894 | [[package]] 3895 | name = "tungstenite" 3896 | version = "0.14.0" 3897 | source = "registry+https://github.com/rust-lang/crates.io-index" 3898 | checksum = "a0b2d8558abd2e276b0a8df5c05a2ec762609344191e5fd23e292c910e9165b5" 3899 | dependencies = [ 3900 | "base64 0.13.0", 3901 | "byteorder", 3902 | "bytes 1.1.0", 3903 | "http 0.2.7", 3904 | "httparse", 3905 | "log", 3906 | "rand 0.8.5", 3907 | "sha-1 0.9.8", 3908 | "thiserror", 3909 | "url 2.2.2", 3910 | "utf-8", 3911 | ] 3912 | 3913 | [[package]] 3914 | name = "twoway" 3915 | version = "0.1.8" 3916 | source = "registry+https://github.com/rust-lang/crates.io-index" 3917 | checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" 3918 | dependencies = [ 3919 | "memchr", 3920 | ] 3921 | 3922 | [[package]] 3923 | name = "typenum" 3924 | version = "1.15.0" 3925 | source = "registry+https://github.com/rust-lang/crates.io-index" 3926 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 3927 | 3928 | [[package]] 3929 | name = "unicase" 3930 | version = "1.4.2" 3931 | source = "registry+https://github.com/rust-lang/crates.io-index" 3932 | checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 3933 | dependencies = [ 3934 | "version_check 0.1.5", 3935 | ] 3936 | 3937 | [[package]] 3938 | name = "unicase" 3939 | version = "2.6.0" 3940 | source = "registry+https://github.com/rust-lang/crates.io-index" 3941 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 3942 | dependencies = [ 3943 | "version_check 0.9.4", 3944 | ] 3945 | 3946 | [[package]] 3947 | name = "unicode-bidi" 3948 | version = "0.3.8" 3949 | source = "registry+https://github.com/rust-lang/crates.io-index" 3950 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 3951 | 3952 | [[package]] 3953 | name = "unicode-ident" 3954 | version = "1.0.0" 3955 | source = "registry+https://github.com/rust-lang/crates.io-index" 3956 | checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" 3957 | 3958 | [[package]] 3959 | name = "unicode-normalization" 3960 | version = "0.1.19" 3961 | source = "registry+https://github.com/rust-lang/crates.io-index" 3962 | checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" 3963 | dependencies = [ 3964 | "tinyvec", 3965 | ] 3966 | 3967 | [[package]] 3968 | name = "unicode-segmentation" 3969 | version = "1.9.0" 3970 | source = "registry+https://github.com/rust-lang/crates.io-index" 3971 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 3972 | 3973 | [[package]] 3974 | name = "unicode-width" 3975 | version = "0.1.9" 3976 | source = "registry+https://github.com/rust-lang/crates.io-index" 3977 | checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" 3978 | 3979 | [[package]] 3980 | name = "unicode-xid" 3981 | version = "0.2.3" 3982 | source = "registry+https://github.com/rust-lang/crates.io-index" 3983 | checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" 3984 | 3985 | [[package]] 3986 | name = "untrusted" 3987 | version = "0.7.1" 3988 | source = "registry+https://github.com/rust-lang/crates.io-index" 3989 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 3990 | 3991 | [[package]] 3992 | name = "url" 3993 | version = "1.7.2" 3994 | source = "registry+https://github.com/rust-lang/crates.io-index" 3995 | checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" 3996 | dependencies = [ 3997 | "idna 0.1.5", 3998 | "matches", 3999 | "percent-encoding 1.0.1", 4000 | ] 4001 | 4002 | [[package]] 4003 | name = "url" 4004 | version = "2.2.2" 4005 | source = "registry+https://github.com/rust-lang/crates.io-index" 4006 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 4007 | dependencies = [ 4008 | "form_urlencoded", 4009 | "idna 0.2.3", 4010 | "matches", 4011 | "percent-encoding 2.1.0", 4012 | "serde", 4013 | ] 4014 | 4015 | [[package]] 4016 | name = "url-escape" 4017 | version = "0.1.1" 4018 | source = "registry+https://github.com/rust-lang/crates.io-index" 4019 | checksum = "44e0ce4d1246d075ca5abec4b41d33e87a6054d08e2366b63205665e950db218" 4020 | dependencies = [ 4021 | "percent-encoding 2.1.0", 4022 | ] 4023 | 4024 | [[package]] 4025 | name = "utf-8" 4026 | version = "0.7.6" 4027 | source = "registry+https://github.com/rust-lang/crates.io-index" 4028 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 4029 | 4030 | [[package]] 4031 | name = "uuid" 4032 | version = "0.8.2" 4033 | source = "registry+https://github.com/rust-lang/crates.io-index" 4034 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" 4035 | dependencies = [ 4036 | "getrandom 0.2.6", 4037 | ] 4038 | 4039 | [[package]] 4040 | name = "validator" 4041 | version = "0.12.0" 4042 | source = "registry+https://github.com/rust-lang/crates.io-index" 4043 | checksum = "841d6937c33ec6039d8071bcf72933146b5bbe378d645d8fa59bdadabfc2a249" 4044 | dependencies = [ 4045 | "idna 0.2.3", 4046 | "lazy_static", 4047 | "regex", 4048 | "serde", 4049 | "serde_derive", 4050 | "serde_json", 4051 | "url 2.2.2", 4052 | "validator_derive", 4053 | "validator_types", 4054 | ] 4055 | 4056 | [[package]] 4057 | name = "validator_derive" 4058 | version = "0.12.0" 4059 | source = "registry+https://github.com/rust-lang/crates.io-index" 4060 | checksum = "4286b4497f270f59276a89ae0ad109d5f8f18c69b613e3fb22b61201aadb0c4d" 4061 | dependencies = [ 4062 | "if_chain", 4063 | "lazy_static", 4064 | "proc-macro-error", 4065 | "proc-macro2", 4066 | "quote", 4067 | "regex", 4068 | "syn", 4069 | "validator_types", 4070 | ] 4071 | 4072 | [[package]] 4073 | name = "validator_types" 4074 | version = "0.12.0" 4075 | source = "registry+https://github.com/rust-lang/crates.io-index" 4076 | checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a" 4077 | 4078 | [[package]] 4079 | name = "valuable" 4080 | version = "0.1.0" 4081 | source = "registry+https://github.com/rust-lang/crates.io-index" 4082 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 4083 | 4084 | [[package]] 4085 | name = "vcpkg" 4086 | version = "0.2.15" 4087 | source = "registry+https://github.com/rust-lang/crates.io-index" 4088 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 4089 | 4090 | [[package]] 4091 | name = "vec_map" 4092 | version = "0.8.2" 4093 | source = "registry+https://github.com/rust-lang/crates.io-index" 4094 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 4095 | 4096 | [[package]] 4097 | name = "version_check" 4098 | version = "0.1.5" 4099 | source = "registry+https://github.com/rust-lang/crates.io-index" 4100 | checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 4101 | 4102 | [[package]] 4103 | name = "version_check" 4104 | version = "0.9.4" 4105 | source = "registry+https://github.com/rust-lang/crates.io-index" 4106 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 4107 | 4108 | [[package]] 4109 | name = "wagi" 4110 | version = "0.8.1" 4111 | source = "git+https://github.com/deislabs/wagi?tag=v0.8.1#ff730bafb4fbc223be4a6281674e5ec4c3d46e87" 4112 | dependencies = [ 4113 | "anyhow", 4114 | "async-stream", 4115 | "async-trait", 4116 | "bindle", 4117 | "cap-std", 4118 | "chrono", 4119 | "clap", 4120 | "docker_credential", 4121 | "env-file-reader", 4122 | "futures", 4123 | "hyper", 4124 | "indexmap", 4125 | "oci-distribution", 4126 | "reqwest", 4127 | "serde", 4128 | "sha2 0.9.9", 4129 | "tempfile", 4130 | "tokio", 4131 | "tokio-rustls 0.22.0", 4132 | "toml", 4133 | "tracing", 4134 | "tracing-futures", 4135 | "tracing-subscriber 0.2.25", 4136 | "url 2.2.2", 4137 | "url-escape", 4138 | "wasi-cap-std-sync", 4139 | "wasi-common", 4140 | "wasi-experimental-http-wasmtime 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 4141 | "wasmtime", 4142 | "wasmtime-cache", 4143 | "wasmtime-wasi", 4144 | "wat", 4145 | ] 4146 | 4147 | [[package]] 4148 | name = "walkdir" 4149 | version = "2.3.2" 4150 | source = "registry+https://github.com/rust-lang/crates.io-index" 4151 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 4152 | dependencies = [ 4153 | "same-file", 4154 | "winapi", 4155 | "winapi-util", 4156 | ] 4157 | 4158 | [[package]] 4159 | name = "want" 4160 | version = "0.3.0" 4161 | source = "registry+https://github.com/rust-lang/crates.io-index" 4162 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 4163 | dependencies = [ 4164 | "log", 4165 | "try-lock", 4166 | ] 4167 | 4168 | [[package]] 4169 | name = "warp" 4170 | version = "0.3.2" 4171 | source = "registry+https://github.com/rust-lang/crates.io-index" 4172 | checksum = "3cef4e1e9114a4b7f1ac799f16ce71c14de5778500c5450ec6b7b920c55b587e" 4173 | dependencies = [ 4174 | "bytes 1.1.0", 4175 | "futures-channel", 4176 | "futures-util", 4177 | "headers", 4178 | "http 0.2.7", 4179 | "hyper", 4180 | "log", 4181 | "mime", 4182 | "mime_guess", 4183 | "multipart", 4184 | "percent-encoding 2.1.0", 4185 | "pin-project", 4186 | "scoped-tls", 4187 | "serde", 4188 | "serde_json", 4189 | "serde_urlencoded", 4190 | "tokio", 4191 | "tokio-rustls 0.22.0", 4192 | "tokio-stream", 4193 | "tokio-tungstenite", 4194 | "tokio-util 0.6.10", 4195 | "tower-service", 4196 | "tracing", 4197 | ] 4198 | 4199 | [[package]] 4200 | name = "wasi" 4201 | version = "0.9.0+wasi-snapshot-preview1" 4202 | source = "registry+https://github.com/rust-lang/crates.io-index" 4203 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 4204 | 4205 | [[package]] 4206 | name = "wasi" 4207 | version = "0.10.0+wasi-snapshot-preview1" 4208 | source = "registry+https://github.com/rust-lang/crates.io-index" 4209 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" 4210 | 4211 | [[package]] 4212 | name = "wasi" 4213 | version = "0.11.0+wasi-snapshot-preview1" 4214 | source = "registry+https://github.com/rust-lang/crates.io-index" 4215 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 4216 | 4217 | [[package]] 4218 | name = "wasi-cap-std-sync" 4219 | version = "0.34.2" 4220 | source = "registry+https://github.com/rust-lang/crates.io-index" 4221 | checksum = "09b1c389a029e158b3dbb1be62d47ffcd959db94eeafd0d8c38bef15e6097fae" 4222 | dependencies = [ 4223 | "anyhow", 4224 | "async-trait", 4225 | "cap-fs-ext", 4226 | "cap-rand", 4227 | "cap-std", 4228 | "cap-time-ext", 4229 | "fs-set-times", 4230 | "io-extras", 4231 | "io-lifetimes", 4232 | "is-terminal", 4233 | "lazy_static", 4234 | "rustix", 4235 | "system-interface", 4236 | "tracing", 4237 | "wasi-common", 4238 | "winapi", 4239 | ] 4240 | 4241 | [[package]] 4242 | name = "wasi-common" 4243 | version = "0.34.2" 4244 | source = "registry+https://github.com/rust-lang/crates.io-index" 4245 | checksum = "7cd93ae0ba21453de39b6c08c5c22ce6ff75393e3094e449631d7dcd562495c3" 4246 | dependencies = [ 4247 | "anyhow", 4248 | "bitflags", 4249 | "cap-rand", 4250 | "cap-std", 4251 | "rustix", 4252 | "thiserror", 4253 | "tracing", 4254 | "wiggle", 4255 | "winapi", 4256 | ] 4257 | 4258 | [[package]] 4259 | name = "wasi-experimental-http-wasmtime" 4260 | version = "0.9.0" 4261 | source = "registry+https://github.com/rust-lang/crates.io-index" 4262 | checksum = "2611669cdde1adfb2433ed99a175298a26f7f496da296b8d9dc88f99bb1d3b30" 4263 | dependencies = [ 4264 | "anyhow", 4265 | "bytes 1.1.0", 4266 | "futures", 4267 | "http 0.2.7", 4268 | "reqwest", 4269 | "thiserror", 4270 | "tokio", 4271 | "tracing", 4272 | "url 2.2.2", 4273 | "wasi-common", 4274 | "wasmtime", 4275 | "wasmtime-wasi", 4276 | ] 4277 | 4278 | [[package]] 4279 | name = "wasi-experimental-http-wasmtime" 4280 | version = "0.9.0" 4281 | source = "git+https://github.com/deislabs/wasi-experimental-http?rev=9a143fa7d8be2a66d6d636c5c1b0c6e2bad68912#9a143fa7d8be2a66d6d636c5c1b0c6e2bad68912" 4282 | dependencies = [ 4283 | "anyhow", 4284 | "bytes 1.1.0", 4285 | "futures", 4286 | "http 0.2.7", 4287 | "reqwest", 4288 | "thiserror", 4289 | "tokio", 4290 | "tracing", 4291 | "url 2.2.2", 4292 | "wasi-common", 4293 | "wasmtime", 4294 | "wasmtime-wasi", 4295 | ] 4296 | 4297 | [[package]] 4298 | name = "wasi-outbound-http" 4299 | version = "0.2.0" 4300 | source = "git+https://github.com/danbugs/spin?branch=danbugs/custom-logging-pipes#635f4d73b25884d27351d1862aae6a58096810bb" 4301 | dependencies = [ 4302 | "anyhow", 4303 | "bytes 1.1.0", 4304 | "futures", 4305 | "http 0.2.7", 4306 | "reqwest", 4307 | "spin-engine", 4308 | "spin-manifest", 4309 | "tokio", 4310 | "tracing", 4311 | "tracing-futures", 4312 | "url 2.2.2", 4313 | "wasi-experimental-http-wasmtime 0.9.0 (git+https://github.com/deislabs/wasi-experimental-http?rev=9a143fa7d8be2a66d6d636c5c1b0c6e2bad68912)", 4314 | "wit-bindgen-wasmtime", 4315 | ] 4316 | 4317 | [[package]] 4318 | name = "wasm-bindgen" 4319 | version = "0.2.80" 4320 | source = "registry+https://github.com/rust-lang/crates.io-index" 4321 | checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" 4322 | dependencies = [ 4323 | "cfg-if 1.0.0", 4324 | "wasm-bindgen-macro", 4325 | ] 4326 | 4327 | [[package]] 4328 | name = "wasm-bindgen-backend" 4329 | version = "0.2.80" 4330 | source = "registry+https://github.com/rust-lang/crates.io-index" 4331 | checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" 4332 | dependencies = [ 4333 | "bumpalo", 4334 | "lazy_static", 4335 | "log", 4336 | "proc-macro2", 4337 | "quote", 4338 | "syn", 4339 | "wasm-bindgen-shared", 4340 | ] 4341 | 4342 | [[package]] 4343 | name = "wasm-bindgen-futures" 4344 | version = "0.4.30" 4345 | source = "registry+https://github.com/rust-lang/crates.io-index" 4346 | checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" 4347 | dependencies = [ 4348 | "cfg-if 1.0.0", 4349 | "js-sys", 4350 | "wasm-bindgen", 4351 | "web-sys", 4352 | ] 4353 | 4354 | [[package]] 4355 | name = "wasm-bindgen-macro" 4356 | version = "0.2.80" 4357 | source = "registry+https://github.com/rust-lang/crates.io-index" 4358 | checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" 4359 | dependencies = [ 4360 | "quote", 4361 | "wasm-bindgen-macro-support", 4362 | ] 4363 | 4364 | [[package]] 4365 | name = "wasm-bindgen-macro-support" 4366 | version = "0.2.80" 4367 | source = "registry+https://github.com/rust-lang/crates.io-index" 4368 | checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" 4369 | dependencies = [ 4370 | "proc-macro2", 4371 | "quote", 4372 | "syn", 4373 | "wasm-bindgen-backend", 4374 | "wasm-bindgen-shared", 4375 | ] 4376 | 4377 | [[package]] 4378 | name = "wasm-bindgen-shared" 4379 | version = "0.2.80" 4380 | source = "registry+https://github.com/rust-lang/crates.io-index" 4381 | checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" 4382 | 4383 | [[package]] 4384 | name = "wasmparser" 4385 | version = "0.82.0" 4386 | source = "registry+https://github.com/rust-lang/crates.io-index" 4387 | checksum = "0559cc0f1779240d6f894933498877ea94f693d84f3ee39c9a9932c6c312bd70" 4388 | 4389 | [[package]] 4390 | name = "wasmtime" 4391 | version = "0.34.2" 4392 | source = "registry+https://github.com/rust-lang/crates.io-index" 4393 | checksum = "cc8463ad287e1d87d9a141a010cbe4b3f8227ade85cc8ac64f2bef3219b66f94" 4394 | dependencies = [ 4395 | "anyhow", 4396 | "async-trait", 4397 | "backtrace", 4398 | "bincode", 4399 | "cfg-if 1.0.0", 4400 | "indexmap", 4401 | "lazy_static", 4402 | "libc", 4403 | "log", 4404 | "object 0.27.1", 4405 | "once_cell", 4406 | "paste", 4407 | "psm", 4408 | "rayon", 4409 | "region", 4410 | "serde", 4411 | "target-lexicon", 4412 | "wasmparser", 4413 | "wasmtime-cache", 4414 | "wasmtime-cranelift", 4415 | "wasmtime-environ", 4416 | "wasmtime-fiber", 4417 | "wasmtime-jit", 4418 | "wasmtime-runtime", 4419 | "wat", 4420 | "winapi", 4421 | ] 4422 | 4423 | [[package]] 4424 | name = "wasmtime-cache" 4425 | version = "0.34.2" 4426 | source = "registry+https://github.com/rust-lang/crates.io-index" 4427 | checksum = "b066cd527050ed06eba8f4eb8948d833f033401f09313a5e5231ebe3e316bb9d" 4428 | dependencies = [ 4429 | "anyhow", 4430 | "base64 0.13.0", 4431 | "bincode", 4432 | "directories-next", 4433 | "file-per-thread-logger", 4434 | "log", 4435 | "rustix", 4436 | "serde", 4437 | "sha2 0.9.9", 4438 | "toml", 4439 | "winapi", 4440 | "zstd", 4441 | ] 4442 | 4443 | [[package]] 4444 | name = "wasmtime-cranelift" 4445 | version = "0.34.2" 4446 | source = "registry+https://github.com/rust-lang/crates.io-index" 4447 | checksum = "381b034926e26980a0aed3f26ec4ba2ff3be9763f386bfb18b7bf2a3fbc1a284" 4448 | dependencies = [ 4449 | "anyhow", 4450 | "cranelift-codegen", 4451 | "cranelift-entity", 4452 | "cranelift-frontend", 4453 | "cranelift-native", 4454 | "cranelift-wasm", 4455 | "gimli", 4456 | "log", 4457 | "more-asserts", 4458 | "object 0.27.1", 4459 | "target-lexicon", 4460 | "thiserror", 4461 | "wasmparser", 4462 | "wasmtime-environ", 4463 | ] 4464 | 4465 | [[package]] 4466 | name = "wasmtime-environ" 4467 | version = "0.34.2" 4468 | source = "registry+https://github.com/rust-lang/crates.io-index" 4469 | checksum = "877230e7f92f8b5509845e804bb27c7c993197339a7cf0de4a2af411ee6ea75b" 4470 | dependencies = [ 4471 | "anyhow", 4472 | "cranelift-entity", 4473 | "gimli", 4474 | "indexmap", 4475 | "log", 4476 | "more-asserts", 4477 | "object 0.27.1", 4478 | "serde", 4479 | "target-lexicon", 4480 | "thiserror", 4481 | "wasmparser", 4482 | "wasmtime-types", 4483 | ] 4484 | 4485 | [[package]] 4486 | name = "wasmtime-fiber" 4487 | version = "0.34.2" 4488 | source = "registry+https://github.com/rust-lang/crates.io-index" 4489 | checksum = "dffb509e67c6c2ea49f38bd5db3712476fcc94c4776521012e5f69ae4bb27b4a" 4490 | dependencies = [ 4491 | "cc", 4492 | "rustix", 4493 | "winapi", 4494 | ] 4495 | 4496 | [[package]] 4497 | name = "wasmtime-jit" 4498 | version = "0.34.2" 4499 | source = "registry+https://github.com/rust-lang/crates.io-index" 4500 | checksum = "4ee2da33bb337fbdfb6e031d485bf2a39d51f37f48e79c6327228d3fc68ec531" 4501 | dependencies = [ 4502 | "addr2line", 4503 | "anyhow", 4504 | "bincode", 4505 | "cfg-if 1.0.0", 4506 | "cpp_demangle", 4507 | "gimli", 4508 | "log", 4509 | "object 0.27.1", 4510 | "region", 4511 | "rustc-demangle", 4512 | "rustix", 4513 | "serde", 4514 | "target-lexicon", 4515 | "thiserror", 4516 | "wasmtime-environ", 4517 | "wasmtime-runtime", 4518 | "winapi", 4519 | ] 4520 | 4521 | [[package]] 4522 | name = "wasmtime-runtime" 4523 | version = "0.34.2" 4524 | source = "registry+https://github.com/rust-lang/crates.io-index" 4525 | checksum = "bcb5bd981c971c398dac645874748f261084dc907a98b3ee70fa41e005a2b365" 4526 | dependencies = [ 4527 | "anyhow", 4528 | "backtrace", 4529 | "cc", 4530 | "cfg-if 1.0.0", 4531 | "indexmap", 4532 | "lazy_static", 4533 | "libc", 4534 | "log", 4535 | "mach", 4536 | "memoffset", 4537 | "more-asserts", 4538 | "rand 0.8.5", 4539 | "region", 4540 | "rustix", 4541 | "thiserror", 4542 | "wasmtime-environ", 4543 | "wasmtime-fiber", 4544 | "winapi", 4545 | ] 4546 | 4547 | [[package]] 4548 | name = "wasmtime-types" 4549 | version = "0.34.2" 4550 | source = "registry+https://github.com/rust-lang/crates.io-index" 4551 | checksum = "73696a97fb815c2944896ae9e4fc49182fd7ec0b58088f9ad9768459a521e347" 4552 | dependencies = [ 4553 | "cranelift-entity", 4554 | "serde", 4555 | "thiserror", 4556 | "wasmparser", 4557 | ] 4558 | 4559 | [[package]] 4560 | name = "wasmtime-wasi" 4561 | version = "0.34.2" 4562 | source = "registry+https://github.com/rust-lang/crates.io-index" 4563 | checksum = "08a84b460a4d493d7f81dff72cfab35388e621e314ea38f56c18579bc15e6693" 4564 | dependencies = [ 4565 | "anyhow", 4566 | "wasi-cap-std-sync", 4567 | "wasi-common", 4568 | "wasmtime", 4569 | "wiggle", 4570 | ] 4571 | 4572 | [[package]] 4573 | name = "wast" 4574 | version = "35.0.2" 4575 | source = "registry+https://github.com/rust-lang/crates.io-index" 4576 | checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" 4577 | dependencies = [ 4578 | "leb128", 4579 | ] 4580 | 4581 | [[package]] 4582 | name = "wast" 4583 | version = "40.0.0" 4584 | source = "registry+https://github.com/rust-lang/crates.io-index" 4585 | checksum = "9bb4f48a8b083dbc50e291e430afb8f524092bb00428957bcc63f49f856c64ac" 4586 | dependencies = [ 4587 | "leb128", 4588 | "memchr", 4589 | "unicode-width", 4590 | ] 4591 | 4592 | [[package]] 4593 | name = "wat" 4594 | version = "1.0.42" 4595 | source = "registry+https://github.com/rust-lang/crates.io-index" 4596 | checksum = "0401b6395ce0db91629a75b29597ccb66ea29950af9fc859f1bb3a736609c76e" 4597 | dependencies = [ 4598 | "wast 40.0.0", 4599 | ] 4600 | 4601 | [[package]] 4602 | name = "web-sys" 4603 | version = "0.3.57" 4604 | source = "registry+https://github.com/rust-lang/crates.io-index" 4605 | checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" 4606 | dependencies = [ 4607 | "js-sys", 4608 | "wasm-bindgen", 4609 | ] 4610 | 4611 | [[package]] 4612 | name = "webpki" 4613 | version = "0.21.4" 4614 | source = "registry+https://github.com/rust-lang/crates.io-index" 4615 | checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" 4616 | dependencies = [ 4617 | "ring", 4618 | "untrusted", 4619 | ] 4620 | 4621 | [[package]] 4622 | name = "webpki" 4623 | version = "0.22.0" 4624 | source = "registry+https://github.com/rust-lang/crates.io-index" 4625 | checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" 4626 | dependencies = [ 4627 | "ring", 4628 | "untrusted", 4629 | ] 4630 | 4631 | [[package]] 4632 | name = "webpki-roots" 4633 | version = "0.22.3" 4634 | source = "registry+https://github.com/rust-lang/crates.io-index" 4635 | checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" 4636 | dependencies = [ 4637 | "webpki 0.22.0", 4638 | ] 4639 | 4640 | [[package]] 4641 | name = "wiggle" 4642 | version = "0.34.2" 4643 | source = "registry+https://github.com/rust-lang/crates.io-index" 4644 | checksum = "c3b8257a2ab818e9ce3f1b54c6f2dec674066c0e03d7dd8a6c73f72dab9919d4" 4645 | dependencies = [ 4646 | "anyhow", 4647 | "async-trait", 4648 | "bitflags", 4649 | "thiserror", 4650 | "tracing", 4651 | "wasmtime", 4652 | "wiggle-macro", 4653 | ] 4654 | 4655 | [[package]] 4656 | name = "wiggle-generate" 4657 | version = "0.34.2" 4658 | source = "registry+https://github.com/rust-lang/crates.io-index" 4659 | checksum = "cd4ff909fb2ba62ebbdde749e4273f495cd5db962262aa1b15f6087c42828aad" 4660 | dependencies = [ 4661 | "anyhow", 4662 | "heck", 4663 | "proc-macro2", 4664 | "quote", 4665 | "shellexpand", 4666 | "syn", 4667 | "witx", 4668 | ] 4669 | 4670 | [[package]] 4671 | name = "wiggle-macro" 4672 | version = "0.34.2" 4673 | source = "registry+https://github.com/rust-lang/crates.io-index" 4674 | checksum = "144e7e767f8b39649c8a97f3f4732b73a4f0337f2a6f0c96cedcb15e52bec9f6" 4675 | dependencies = [ 4676 | "proc-macro2", 4677 | "quote", 4678 | "syn", 4679 | "wiggle-generate", 4680 | ] 4681 | 4682 | [[package]] 4683 | name = "winapi" 4684 | version = "0.3.9" 4685 | source = "registry+https://github.com/rust-lang/crates.io-index" 4686 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 4687 | dependencies = [ 4688 | "winapi-i686-pc-windows-gnu", 4689 | "winapi-x86_64-pc-windows-gnu", 4690 | ] 4691 | 4692 | [[package]] 4693 | name = "winapi-i686-pc-windows-gnu" 4694 | version = "0.4.0" 4695 | source = "registry+https://github.com/rust-lang/crates.io-index" 4696 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 4697 | 4698 | [[package]] 4699 | name = "winapi-util" 4700 | version = "0.1.5" 4701 | source = "registry+https://github.com/rust-lang/crates.io-index" 4702 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 4703 | dependencies = [ 4704 | "winapi", 4705 | ] 4706 | 4707 | [[package]] 4708 | name = "winapi-x86_64-pc-windows-gnu" 4709 | version = "0.4.0" 4710 | source = "registry+https://github.com/rust-lang/crates.io-index" 4711 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 4712 | 4713 | [[package]] 4714 | name = "windows-sys" 4715 | version = "0.36.1" 4716 | source = "registry+https://github.com/rust-lang/crates.io-index" 4717 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 4718 | dependencies = [ 4719 | "windows_aarch64_msvc", 4720 | "windows_i686_gnu", 4721 | "windows_i686_msvc", 4722 | "windows_x86_64_gnu", 4723 | "windows_x86_64_msvc", 4724 | ] 4725 | 4726 | [[package]] 4727 | name = "windows_aarch64_msvc" 4728 | version = "0.36.1" 4729 | source = "registry+https://github.com/rust-lang/crates.io-index" 4730 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 4731 | 4732 | [[package]] 4733 | name = "windows_i686_gnu" 4734 | version = "0.36.1" 4735 | source = "registry+https://github.com/rust-lang/crates.io-index" 4736 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 4737 | 4738 | [[package]] 4739 | name = "windows_i686_msvc" 4740 | version = "0.36.1" 4741 | source = "registry+https://github.com/rust-lang/crates.io-index" 4742 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 4743 | 4744 | [[package]] 4745 | name = "windows_x86_64_gnu" 4746 | version = "0.36.1" 4747 | source = "registry+https://github.com/rust-lang/crates.io-index" 4748 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 4749 | 4750 | [[package]] 4751 | name = "windows_x86_64_msvc" 4752 | version = "0.36.1" 4753 | source = "registry+https://github.com/rust-lang/crates.io-index" 4754 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 4755 | 4756 | [[package]] 4757 | name = "winreg" 4758 | version = "0.10.1" 4759 | source = "registry+https://github.com/rust-lang/crates.io-index" 4760 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" 4761 | dependencies = [ 4762 | "winapi", 4763 | ] 4764 | 4765 | [[package]] 4766 | name = "winx" 4767 | version = "0.31.0" 4768 | source = "registry+https://github.com/rust-lang/crates.io-index" 4769 | checksum = "08d5973cb8cd94a77d03ad7e23bbe14889cb29805da1cec0e4aff75e21aebded" 4770 | dependencies = [ 4771 | "bitflags", 4772 | "io-lifetimes", 4773 | "winapi", 4774 | ] 4775 | 4776 | [[package]] 4777 | name = "wit-bindgen-gen-core" 4778 | version = "0.1.0" 4779 | source = "git+https://github.com/bytecodealliance/wit-bindgen?rev=2f46ce4cc072107153da0cefe15bdc69aa5b84d0#2f46ce4cc072107153da0cefe15bdc69aa5b84d0" 4780 | dependencies = [ 4781 | "anyhow", 4782 | "wit-parser", 4783 | ] 4784 | 4785 | [[package]] 4786 | name = "wit-bindgen-gen-rust" 4787 | version = "0.1.0" 4788 | source = "git+https://github.com/bytecodealliance/wit-bindgen?rev=2f46ce4cc072107153da0cefe15bdc69aa5b84d0#2f46ce4cc072107153da0cefe15bdc69aa5b84d0" 4789 | dependencies = [ 4790 | "heck", 4791 | "wit-bindgen-gen-core", 4792 | ] 4793 | 4794 | [[package]] 4795 | name = "wit-bindgen-gen-wasmtime" 4796 | version = "0.1.0" 4797 | source = "git+https://github.com/bytecodealliance/wit-bindgen?rev=2f46ce4cc072107153da0cefe15bdc69aa5b84d0#2f46ce4cc072107153da0cefe15bdc69aa5b84d0" 4798 | dependencies = [ 4799 | "heck", 4800 | "wit-bindgen-gen-core", 4801 | "wit-bindgen-gen-rust", 4802 | ] 4803 | 4804 | [[package]] 4805 | name = "wit-bindgen-wasmtime" 4806 | version = "0.1.0" 4807 | source = "git+https://github.com/bytecodealliance/wit-bindgen?rev=2f46ce4cc072107153da0cefe15bdc69aa5b84d0#2f46ce4cc072107153da0cefe15bdc69aa5b84d0" 4808 | dependencies = [ 4809 | "anyhow", 4810 | "bitflags", 4811 | "thiserror", 4812 | "wasmtime", 4813 | "wit-bindgen-wasmtime-impl", 4814 | ] 4815 | 4816 | [[package]] 4817 | name = "wit-bindgen-wasmtime-impl" 4818 | version = "0.1.0" 4819 | source = "git+https://github.com/bytecodealliance/wit-bindgen?rev=2f46ce4cc072107153da0cefe15bdc69aa5b84d0#2f46ce4cc072107153da0cefe15bdc69aa5b84d0" 4820 | dependencies = [ 4821 | "proc-macro2", 4822 | "syn", 4823 | "wit-bindgen-gen-core", 4824 | "wit-bindgen-gen-wasmtime", 4825 | ] 4826 | 4827 | [[package]] 4828 | name = "wit-parser" 4829 | version = "0.1.0" 4830 | source = "git+https://github.com/bytecodealliance/wit-bindgen?rev=2f46ce4cc072107153da0cefe15bdc69aa5b84d0#2f46ce4cc072107153da0cefe15bdc69aa5b84d0" 4831 | dependencies = [ 4832 | "anyhow", 4833 | "id-arena", 4834 | "pulldown-cmark", 4835 | "unicode-normalization", 4836 | "unicode-xid", 4837 | ] 4838 | 4839 | [[package]] 4840 | name = "witx" 4841 | version = "0.9.1" 4842 | source = "registry+https://github.com/rust-lang/crates.io-index" 4843 | checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" 4844 | dependencies = [ 4845 | "anyhow", 4846 | "log", 4847 | "thiserror", 4848 | "wast 35.0.2", 4849 | ] 4850 | 4851 | [[package]] 4852 | name = "www-authenticate" 4853 | version = "0.3.0" 4854 | source = "registry+https://github.com/rust-lang/crates.io-index" 4855 | checksum = "8c62efb8259cda4e4c732287397701237b78daa4c43edcf3e613c8503a6c07dd" 4856 | dependencies = [ 4857 | "hyperx", 4858 | "unicase 1.4.2", 4859 | "url 1.7.2", 4860 | ] 4861 | 4862 | [[package]] 4863 | name = "xattr" 4864 | version = "0.2.3" 4865 | source = "registry+https://github.com/rust-lang/crates.io-index" 4866 | checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" 4867 | dependencies = [ 4868 | "libc", 4869 | ] 4870 | 4871 | [[package]] 4872 | name = "zeroize" 4873 | version = "1.3.0" 4874 | source = "registry+https://github.com/rust-lang/crates.io-index" 4875 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 4876 | dependencies = [ 4877 | "zeroize_derive", 4878 | ] 4879 | 4880 | [[package]] 4881 | name = "zeroize_derive" 4882 | version = "1.3.2" 4883 | source = "registry+https://github.com/rust-lang/crates.io-index" 4884 | checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" 4885 | dependencies = [ 4886 | "proc-macro2", 4887 | "quote", 4888 | "syn", 4889 | "synstructure", 4890 | ] 4891 | 4892 | [[package]] 4893 | name = "zstd" 4894 | version = "0.10.2+zstd.1.5.2" 4895 | source = "registry+https://github.com/rust-lang/crates.io-index" 4896 | checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" 4897 | dependencies = [ 4898 | "zstd-safe", 4899 | ] 4900 | 4901 | [[package]] 4902 | name = "zstd-safe" 4903 | version = "4.1.6+zstd.1.5.2" 4904 | source = "registry+https://github.com/rust-lang/crates.io-index" 4905 | checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" 4906 | dependencies = [ 4907 | "libc", 4908 | "zstd-sys", 4909 | ] 4910 | 4911 | [[package]] 4912 | name = "zstd-sys" 4913 | version = "1.6.3+zstd.1.5.2" 4914 | source = "registry+https://github.com/rust-lang/crates.io-index" 4915 | checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" 4916 | dependencies = [ 4917 | "cc", 4918 | "libc", 4919 | ] 4920 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "containerd-shim-aspdotnet-v1", 4 | "containerd-shim-cehostshim-v1", 5 | "containerd-shim-spin-v1", 6 | "containerd-shim-sat-v1", 7 | ] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | PREFIX ?= /usr/local 2 | INSTALL ?= install 3 | TEST_IMG_NAME ?= wasmtest:latest 4 | TEST_IMG_NAME_CPP ?= wasmtest_cpp:latest 5 | TEST_IMG_NAME_DOTNET ?= wasmtest_dotnet:latest 6 | TEST_IMG_NAME_SPINK ?= wasmtest_spink:latest 7 | TEST_IMG_NAME_SAT ?= wasmtest_sat:latest 8 | 9 | CONTAINERD_NAMESPACE ?= default 10 | 11 | .PHONY: build 12 | build: 13 | cargo build --release 14 | 15 | .PHONY: install 16 | install: 17 | sudo $(INSTALL) target/release/containerd-shim-*-v1 $(PREFIX)/bin 18 | 19 | update-deps: 20 | cargo update 21 | 22 | test/out_rs/img.tar: images/image-rs/Dockerfile images/image-rs/src/lib.rs images/image-rs/Cargo.toml images/image-rs/Cargo.lock 23 | mkdir -p $(@D) 24 | docker build -t $(TEST_IMG_NAME) ./images/image-rs 25 | docker save -o $@ $(TEST_IMG_NAME) 26 | 27 | test/out_cpp/img.tar: images/image-cpp/Dockerfile 28 | mkdir -p $(@D) 29 | docker build -t $(TEST_IMG_NAME_CPP) ./images/image-cpp 30 | docker save -o $@ $(TEST_IMG_NAME_CPP) 31 | 32 | test/out_dotnet/img.tar: images/aspnet/Dockerfile 33 | mkdir -p $(@D) 34 | docker build -t $(TEST_IMG_NAME_DOTNET) ./images/aspnet 35 | docker save -o $@ $(TEST_IMG_NAME_DOTNET) 36 | 37 | test/out_spin-k/img.tar: images/spin-kitchensink/Dockerfile 38 | mkdir -p $(@D) 39 | docker build -t $(TEST_IMG_NAME_SPINK) ./images/spin-kitchensink 40 | docker save -o $@ $(TEST_IMG_NAME_SPINK) 41 | 42 | test/out_sat/img.tar: images/sat-hello/Dockerfile 43 | mkdir -p $(@D) 44 | docker build -t $(TEST_IMG_NAME_SAT) ./images/sat-hello 45 | docker save -o $@ $(TEST_IMG_NAME_SAT) 46 | 47 | load: test/out_rs/img.tar test/out_cpp/img.tar test/out_dotnet/img.tar test/out_spin-k/img.tar 48 | sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_rs/img.tar 49 | sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_cpp/img.tar 50 | sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_dotnet/img.tar 51 | sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_spin-k/img.tar 52 | 53 | run: 54 | sudo ctr run --net-host --rm --runtime=io.containerd.cehostshim.v1 docker.io/library/$(TEST_IMG_NAME) testwasm 55 | 56 | run_cpp: 57 | sudo ctr run --net-host --rm --runtime=io.containerd.cehostshim.v1 docker.io/library/$(TEST_IMG_NAME_CPP) testwasm 58 | 59 | run_dotnet: 60 | sudo ctr run --net-host --rm --runtime=io.containerd.aspdotnet.v1 docker.io/library/$(TEST_IMG_NAME_DOTNET) testdotnet 61 | 62 | run_spink: 63 | sudo ctr run --net-host --rm --runtime=io.containerd.spin.v1 docker.io/library/$(TEST_IMG_NAME_SPINK) testspink 64 | 65 | clean: 66 | sudo rm -rf ./test -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Containerd wasm shims 2 | 3 | [runwasi](https://github.com/cpuguy83/runwasi) is a project that aims to run wasm workloads managed by containerd. 4 | 5 | This project aims to provide custom shim implementations that can run wasm workloads, using [runwasi](https://github.com/cpuguy83/runwasi) as a library 6 | 7 | ## cloudevent shim 8 | This shim implements a [cloudevents](https://cloudevents.io/) host. It starts a HTTP server and generates cloudevent to pass to the wasm modules. 9 | 10 | It also provides two guest implementations, one in rust and another one in C++. Both the host and guest use [cloudevents-sdk](https://github.com/cloudevents/sdk-rust) to serialize/deserialize events to string. 11 | 12 | This project uses the [Wasm Component Model](https://github.com/WebAssembly/component-model). The main interface file is `wasi-ce.wit`. 13 | 14 | ## asp.net shim 15 | 16 | This shim uses asp.net core server. 17 | 18 | ## spin shim 19 | 20 | This shim uses [spin](https://github.com/fermyon/spin) engine. 21 | 22 | ### build the host 23 | Run `make build` 24 | 25 | ### package the guest to image 26 | Run `make load` 27 | 28 | ### install the host 29 | Run `make install` 30 | 31 | ### test 32 | Run `make run` or `make run_cpp` or `make run_dotnet` 33 | 34 | > If you want to compile a statically linked binary 35 | > you can do so by running 36 | > `RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target x86_64-unknown-linux-musl`. 37 | -------------------------------------------------------------------------------- /containerd-shim-aspdotnet-v1/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "containerd-shim-aspdotnet-v1" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | anyhow = "1.0" 10 | chrono = "0.4.19" 11 | containerd-shim = "0.3.0" 12 | containerd-shim-wasmtime-v1 = { git = "https://github.com/Mossaka/runwasi", branch = "jiazho/precompile" } 13 | log = "0.4" 14 | wasmtime = "^0.34" 15 | wasmtime-wasi = "^0.34" -------------------------------------------------------------------------------- /containerd-shim-aspdotnet-v1/src/main.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Context; 2 | use chrono::{DateTime, Utc}; 3 | use containerd_shim as shim; 4 | use containerd_shim_wasmtime_v1::sandbox::error::Error; 5 | use containerd_shim_wasmtime_v1::sandbox::instance::EngineGetter; 6 | use containerd_shim_wasmtime_v1::sandbox::oci; 7 | use containerd_shim_wasmtime_v1::sandbox::Instance; 8 | use containerd_shim_wasmtime_v1::sandbox::{ 9 | instance::maybe_open_stdio, instance::InstanceConfig, ShimCli, 10 | }; 11 | use log::info; 12 | use std::fs::OpenOptions; 13 | use std::path::Path; 14 | use std::sync::mpsc::channel; 15 | use std::sync::mpsc::Sender; 16 | use std::sync::{Arc, Condvar, Mutex, RwLock}; 17 | use std::thread; 18 | use wasmtime::OptLevel; 19 | use wasmtime::{Linker, Module, Store}; 20 | use wasmtime_wasi::sync::TcpListener; 21 | use wasmtime_wasi::{WasiCtx, WasiCtxBuilder}; 22 | pub struct Wasi { 23 | interupt: Arc>>, 24 | exit_code: Arc<(Mutex)>>, Condvar)>, 25 | engine: wasmtime::Engine, 26 | 27 | id: String, 28 | stdin: String, 29 | stdout: String, 30 | stderr: String, 31 | bundle: String, 32 | } 33 | 34 | pub fn prepare_module( 35 | engine: wasmtime::Engine, 36 | bundle: String, 37 | stdin_path: String, 38 | stdout_path: String, 39 | stderr_path: String, 40 | ) -> Result<(WasiCtx, Module), Error> { 41 | let mut spec = oci::load(Path::new(&bundle).join("config.json").to_str().unwrap())?; 42 | 43 | spec.canonicalize_rootfs(&bundle) 44 | .map_err(|err| Error::Others(format!("could not canonicalize rootfs: {}", err)))?; 45 | let root = match spec.root() { 46 | Some(r) => r.path(), 47 | None => { 48 | return Err(Error::Others( 49 | "rootfs is not specified in the config.json".to_string(), 50 | )); 51 | } 52 | }; 53 | 54 | info!("opening rootfs"); 55 | let rootfs = oci::wasi_dir(root.to_str().unwrap(), OpenOptions::new().read(true)) 56 | .map_err(|err| Error::Others(format!("could not open rootfs: {}", err)))?; 57 | let args = oci::get_args(&spec); 58 | let env = oci::env_to_wasi(&spec); 59 | 60 | info!("setting up wasi"); 61 | let mut wasi_builder = WasiCtxBuilder::new() 62 | .args(args)? 63 | .envs(env.as_slice())? 64 | .preopened_dir(rootfs, "/")?; 65 | 66 | info!("opening stdin"); 67 | let stdin = maybe_open_stdio(&stdin_path).context("could not open stdin")?; 68 | if stdin.is_some() { 69 | wasi_builder = wasi_builder.stdin(Box::new(stdin.unwrap())); 70 | } 71 | 72 | info!("opening stdout"); 73 | let stdout = maybe_open_stdio(&stdout_path).context("could not open stdout")?; 74 | if stdout.is_some() { 75 | wasi_builder = wasi_builder.stdout(Box::new(stdout.unwrap())); 76 | } 77 | 78 | info!("opening stderr"); 79 | let stderr = maybe_open_stdio(&stderr_path).context("could not open stderr")?; 80 | if stderr.is_some() { 81 | wasi_builder = wasi_builder.stderr(Box::new(stderr.unwrap())); 82 | } 83 | 84 | let ip_address = "0.0.0.0:80"; 85 | let stdlistener = std::net::TcpListener::bind(ip_address) 86 | .with_context(|| "failed to bind to address '0.0.0.0:80'".to_string())?; 87 | 88 | let _ = stdlistener.set_nonblocking(true)?; 89 | let tcplisten = TcpListener::from_std(stdlistener); 90 | wasi_builder = wasi_builder.preopened_socket(3_u32, tcplisten)?; 91 | 92 | wasi_builder = wasi_builder.env("ASPNETCORE_URLS", "http://0.0.0.0:8080")?; 93 | 94 | info!("building wasi context"); 95 | let wctx = wasi_builder.build(); 96 | info!("wasi context ready"); 97 | 98 | let mut cmd = args[0].clone(); 99 | let stripped = args[0].strip_prefix(std::path::MAIN_SEPARATOR); 100 | if stripped.is_some() { 101 | cmd = stripped.unwrap().to_string(); 102 | } 103 | 104 | let mod_path = root.join(cmd); 105 | 106 | info!("loading module from file"); 107 | let module = Module::from_file(&engine, mod_path) 108 | .map_err(|err| Error::Others(format!("could not load module from file: {}", err)))?; 109 | 110 | Ok((wctx, module)) 111 | } 112 | 113 | impl Instance for Wasi { 114 | type E = wasmtime::Engine; 115 | fn new(id: String, cfg: Option<&InstanceConfig>) -> Self { 116 | let cfg = cfg.unwrap(); 117 | Wasi { 118 | interupt: Arc::new(RwLock::new(None)), 119 | exit_code: Arc::new((Mutex::new(None), Condvar::new())), 120 | engine: cfg.get_engine(), 121 | id, 122 | stdin: cfg.get_stdin().unwrap_or_default(), 123 | stdout: cfg.get_stdout().unwrap_or_default(), 124 | stderr: cfg.get_stderr().unwrap_or_default(), 125 | bundle: cfg.get_bundle().unwrap_or_default(), 126 | } 127 | } 128 | fn start(&self) -> Result { 129 | let engine = self.engine.clone(); 130 | 131 | let exit_code = self.exit_code.clone(); 132 | let interupt = self.interupt.clone(); 133 | let (tx, rx) = channel::>(); 134 | let bundle = self.bundle.clone(); 135 | let stdin = self.stdin.clone(); 136 | let stdout = self.stdout.clone(); 137 | let stderr = self.stderr.clone(); 138 | 139 | thread::Builder::new() 140 | .name(self.id.clone()) 141 | .spawn(move || { 142 | info!("starting instance"); 143 | let mut linker = Linker::new(&engine); 144 | 145 | match wasmtime_wasi::add_to_linker(&mut linker, |s| s) 146 | .map_err(|err| Error::Others(format!("error adding to linker: {}", err))) 147 | { 148 | Ok(_) => (), 149 | Err(err) => { 150 | tx.send(Err(err)).unwrap(); 151 | return; 152 | } 153 | }; 154 | 155 | info!("preparing module"); 156 | let m = match prepare_module(engine.clone(), bundle, stdin, stdout, stderr) { 157 | Ok(f) => f, 158 | Err(err) => { 159 | tx.send(Err(err)).unwrap(); 160 | return; 161 | } 162 | }; 163 | 164 | let mut store = Store::new(&engine, m.0); 165 | 166 | info!("instantiating instnace"); 167 | let i = match linker 168 | .instantiate(&mut store, &m.1) 169 | .map_err(|err| Error::Others(format!("error instantiating module: {}", err))) 170 | { 171 | Ok(i) => i, 172 | Err(err) => { 173 | tx.send(Err(err)).unwrap(); 174 | return; 175 | } 176 | }; 177 | 178 | info!("getting interupt handle"); 179 | match store 180 | .interrupt_handle() 181 | .map_err(|err| Error::Others(format!("could not get interupt handle: {}", err))) 182 | { 183 | Ok(h) => { 184 | let mut lock = interupt.write().unwrap(); 185 | *lock = Some(h); 186 | drop(lock); 187 | } 188 | Err(err) => { 189 | tx.send(Err(err)).unwrap(); 190 | return; 191 | } 192 | }; 193 | 194 | info!("getting start function"); 195 | let f = match i 196 | .get_func(&mut store, "_start") 197 | .ok_or(Error::InvalidArgument( 198 | "module does not have a wasi start function".to_string(), 199 | )) { 200 | Ok(f) => f, 201 | Err(err) => { 202 | tx.send(Err(err)).unwrap(); 203 | return; 204 | } 205 | }; 206 | 207 | info!("notifying main thread we are about to start"); 208 | tx.send(Ok(())).unwrap(); 209 | 210 | info!("starting wasi instance"); 211 | 212 | let (lock, cvar) = &*exit_code; 213 | let _ret = match f.call(&mut store, &mut [], &mut []) { 214 | Ok(_) => { 215 | info!("exit code: {}", 0); 216 | let mut ec = lock.lock().unwrap(); 217 | *ec = Some((0, Utc::now())); 218 | } 219 | Err(_) => { 220 | info!("exit code: {}", 137); 221 | let mut ec = lock.lock().unwrap(); 222 | *ec = Some((137, Utc::now())); 223 | } 224 | }; 225 | 226 | cvar.notify_all(); 227 | })?; 228 | 229 | info!("Waiting for start notification"); 230 | match rx.recv().unwrap() { 231 | Ok(_) => (), 232 | Err(err) => { 233 | info!("error starting instance: {}", err); 234 | let code = self.exit_code.clone(); 235 | 236 | let (lock, cvar) = &*code; 237 | let mut ec = lock.lock().unwrap(); 238 | *ec = Some((139, Utc::now())); 239 | cvar.notify_all(); 240 | return Err(err); 241 | } 242 | } 243 | 244 | Ok(1) // TODO: PID: I wanted to use a thread ID here, but threads use a u64, the API wants a u32 245 | } 246 | 247 | fn kill(&self, signal: u32) -> Result<(), Error> { 248 | if signal != 9 { 249 | return Err(Error::InvalidArgument( 250 | "only SIGKILL is supported".to_string(), 251 | )); 252 | } 253 | 254 | let interupt = self.interupt.read().unwrap(); 255 | let i = interupt.as_ref().ok_or(Error::FailedPrecondition( 256 | "module is not running".to_string(), 257 | ))?; 258 | 259 | // TODO: exit the server 260 | 261 | i.interrupt(); 262 | Ok(()) 263 | } 264 | 265 | fn delete(&self) -> Result<(), Error> { 266 | Ok(()) 267 | } 268 | 269 | fn wait(&self, channel: Sender<(u32, DateTime)>) -> Result<(), Error> { 270 | let code = self.exit_code.clone(); 271 | thread::spawn(move || { 272 | let (lock, cvar) = &*code; 273 | let mut exit = lock.lock().unwrap(); 274 | while (*exit).is_none() { 275 | exit = cvar.wait(exit).unwrap(); 276 | } 277 | let ec = (*exit).unwrap(); 278 | channel.send(ec).unwrap(); 279 | }); 280 | 281 | Ok(()) 282 | } 283 | } 284 | 285 | impl EngineGetter for Wasi { 286 | type E = wasmtime::Engine; 287 | fn new_engine() -> Result { 288 | let engine = Self::E::new( 289 | wasmtime::Config::default() 290 | .interruptable(true) 291 | .cranelift_opt_level(OptLevel::Speed), 292 | )?; 293 | Ok(engine) 294 | } 295 | } 296 | 297 | fn main() { 298 | shim::run::>("io.containerd.aspdotnet.v1", None); 299 | } 300 | -------------------------------------------------------------------------------- /containerd-shim-cehostshim-v1/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "containerd-shim-cehostshim-v1" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | anyhow = "1.0" 10 | chrono = "0.4.19" 11 | cloudevents-sdk = { default-features = false, git = "https://github.com/Mossaka/sdk-rust.git", branch = "master" } 12 | containerd-shim = "0.3.0" 13 | containerd-shim-wasmtime-v1 = { git = "https://github.com/Mossaka/runwasi", branch = "jiazho/precompile" } 14 | log = "0.4" 15 | rouille = "3.5.0" 16 | uuid = "0.8.2" 17 | wasmtime = "^0.34" 18 | wasmtime-wasi = "^0.34" 19 | wit-bindgen-wasmtime = { git = "https://github.com/bytecodealliance/wit-bindgen", rev = "2f46ce4cc072107153da0cefe15bdc69aa5b84d0" } 20 | serde_json = "1.0" -------------------------------------------------------------------------------- /containerd-shim-cehostshim-v1/src/main.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Context; 2 | use chrono::{DateTime, Utc}; 3 | use cloudevents::Event; 4 | use cloudevents::{EventBuilder, EventBuilderV10}; 5 | use containerd_shim as shim; 6 | use containerd_shim_wasmtime_v1::sandbox::error::Error; 7 | use containerd_shim_wasmtime_v1::sandbox::instance::EngineGetter; 8 | use containerd_shim_wasmtime_v1::sandbox::oci; 9 | use containerd_shim_wasmtime_v1::sandbox::Instance; 10 | use containerd_shim_wasmtime_v1::sandbox::{ 11 | instance::maybe_open_stdio, instance::InstanceConfig, ShimCli, 12 | }; 13 | use log::info; 14 | use rouille::Response; 15 | use std::fs::OpenOptions; 16 | use std::io::Read; 17 | use std::path::Path; 18 | use std::sync::mpsc::channel; 19 | use std::sync::mpsc::Sender; 20 | use std::sync::{Arc, Condvar, Mutex, RwLock}; 21 | use std::thread; 22 | use uuid::Uuid; 23 | use wasmtime::{Linker, Module, OptLevel, Store}; 24 | use wasmtime_wasi::{WasiCtx, WasiCtxBuilder}; 25 | 26 | wit_bindgen_wasmtime::import!("src/wasi-ce.wit"); 27 | 28 | pub struct Wasi { 29 | interupt: Arc>>, 30 | exit_code: Arc<(Mutex)>>, Condvar)>, 31 | engine: wasmtime::Engine, 32 | 33 | id: String, 34 | stdin: String, 35 | stdout: String, 36 | stderr: String, 37 | bundle: String, 38 | } 39 | 40 | pub fn prepare_module( 41 | engine: wasmtime::Engine, 42 | bundle: String, 43 | stdin_path: String, 44 | stdout_path: String, 45 | stderr_path: String, 46 | ) -> Result<(WasiCtx, Module), Error> { 47 | let mut spec = oci::load(Path::new(&bundle).join("config.json").to_str().unwrap())?; 48 | 49 | spec.canonicalize_rootfs(&bundle) 50 | .map_err(|err| Error::Others(format!("could not canonicalize rootfs: {}", err)))?; 51 | let root = match spec.root() { 52 | Some(r) => r.path(), 53 | None => { 54 | return Err(Error::Others( 55 | "rootfs is not specified in the config.json".to_string(), 56 | )); 57 | } 58 | }; 59 | 60 | info!("opening rootfs"); 61 | let rootfs = oci::wasi_dir(root.to_str().unwrap(), OpenOptions::new().read(true)) 62 | .map_err(|err| Error::Others(format!("could not open rootfs: {}", err)))?; 63 | let args = oci::get_args(&spec); 64 | let env = oci::env_to_wasi(&spec); 65 | 66 | info!("setting up wasi"); 67 | let mut wasi_builder = WasiCtxBuilder::new() 68 | .args(args)? 69 | .envs(env.as_slice())? 70 | .preopened_dir(rootfs, "/")?; 71 | 72 | info!("opening stdin"); 73 | let stdin = maybe_open_stdio(&stdin_path).context("could not open stdin")?; 74 | if stdin.is_some() { 75 | wasi_builder = wasi_builder.stdin(Box::new(stdin.unwrap())); 76 | } 77 | 78 | info!("opening stdout"); 79 | let stdout = maybe_open_stdio(&stdout_path).context("could not open stdout")?; 80 | if stdout.is_some() { 81 | wasi_builder = wasi_builder.stdout(Box::new(stdout.unwrap())); 82 | } 83 | 84 | info!("opening stderr"); 85 | let stderr = maybe_open_stdio(&stderr_path).context("could not open stderr")?; 86 | if stderr.is_some() { 87 | wasi_builder = wasi_builder.stderr(Box::new(stderr.unwrap())); 88 | } 89 | 90 | info!("building wasi context"); 91 | let wctx = wasi_builder.build(); 92 | info!("wasi context ready"); 93 | 94 | let mut cmd = args[0].clone(); 95 | let stripped = args[0].strip_prefix(std::path::MAIN_SEPARATOR); 96 | if stripped.is_some() { 97 | cmd = stripped.unwrap().to_string(); 98 | } 99 | 100 | let mod_path = root.join(cmd); 101 | 102 | info!("loading module from file"); 103 | let module = Module::from_file(&engine, mod_path) 104 | .map_err(|err| Error::Others(format!("could not load module from file: {}", err)))?; 105 | 106 | Ok((wctx, module)) 107 | } 108 | 109 | pub struct WasiContext { 110 | pub wasi: WasiCtx, 111 | pub wasi_data: Option, 112 | } 113 | 114 | impl Instance for Wasi { 115 | type E = wasmtime::Engine; 116 | fn new(id: String, cfg: Option<&InstanceConfig>) -> Self { 117 | let cfg = cfg.unwrap(); 118 | Wasi { 119 | interupt: Arc::new(RwLock::new(None)), 120 | exit_code: Arc::new((Mutex::new(None), Condvar::new())), 121 | engine: cfg.get_engine(), 122 | id, 123 | stdin: cfg.get_stdin().unwrap_or_default(), 124 | stdout: cfg.get_stdout().unwrap_or_default(), 125 | stderr: cfg.get_stderr().unwrap_or_default(), 126 | bundle: cfg.get_bundle().unwrap_or_default(), 127 | } 128 | } 129 | fn start(&self) -> Result { 130 | let engine = self.engine.clone(); 131 | 132 | let exit_code = self.exit_code.clone(); 133 | let interupt = self.interupt.clone(); 134 | let (tx, rx) = channel::>(); 135 | let bundle = self.bundle.clone(); 136 | let stdin = self.stdin.clone(); 137 | let stdout = self.stdout.clone(); 138 | let stderr = self.stderr.clone(); 139 | 140 | thread::Builder::new() 141 | .name(self.id.clone()) 142 | .spawn(move || { 143 | info!("starting instance"); 144 | let wasi_data = Some(wasi_ce::WasiCeData::default()); 145 | 146 | let mut linker = Linker::new(&engine); 147 | 148 | match wasmtime_wasi::add_to_linker(&mut linker, |s: &mut WasiContext| &mut s.wasi) 149 | .map_err(|err| Error::Others(format!("error adding to linker: {}", err))) 150 | { 151 | Ok(_) => (), 152 | Err(err) => { 153 | tx.send(Err(err)).unwrap(); 154 | return; 155 | } 156 | }; 157 | 158 | wasi_ce::WasiCe::add_to_linker(&mut linker, |cx| cx.wasi_data.as_mut().unwrap()) 159 | .unwrap(); 160 | 161 | info!("preparing module"); 162 | let m = match prepare_module(engine.clone(), bundle, stdin, stdout, stderr) { 163 | Ok(f) => f, 164 | Err(err) => { 165 | tx.send(Err(err)).unwrap(); 166 | return; 167 | } 168 | }; 169 | 170 | let ctx = WasiContext { 171 | wasi: m.0, 172 | wasi_data, 173 | }; 174 | 175 | let mut store = Store::new(&engine, ctx); 176 | 177 | info!("instantiating instnace"); 178 | let i = match linker 179 | .instantiate(&mut store, &m.1) 180 | .map_err(|err| Error::Others(format!("error instantiating module: {}", err))) 181 | { 182 | Ok(i) => i, 183 | Err(err) => { 184 | tx.send(Err(err)).unwrap(); 185 | return; 186 | } 187 | }; 188 | 189 | info!("getting interupt handle"); 190 | match store 191 | .interrupt_handle() 192 | .map_err(|err| Error::Others(format!("could not get interupt handle: {}", err))) 193 | { 194 | Ok(h) => { 195 | let mut lock = interupt.write().unwrap(); 196 | *lock = Some(h); 197 | drop(lock); 198 | } 199 | Err(err) => { 200 | tx.send(Err(err)).unwrap(); 201 | return; 202 | } 203 | }; 204 | 205 | info!("notifying main thread we are about to start"); 206 | tx.send(Ok(())).unwrap(); 207 | 208 | info!("starting wasi instance"); 209 | 210 | let (lock, cvar) = &*exit_code; 211 | let t = 212 | wasi_ce::WasiCe::new(&mut store, &i, |host| host.wasi_data.as_mut().unwrap()) 213 | .unwrap(); 214 | 215 | let store = Mutex::new(store); 216 | 217 | let mut ec = lock.lock().unwrap(); 218 | *ec = Some((0, Utc::now())); 219 | cvar.notify_all(); 220 | rouille::start_server("0.0.0.0:80", move |request| handle_ce(request, &store, &t)); 221 | })?; 222 | 223 | info!("Waiting for start notification"); 224 | match rx.recv().unwrap() { 225 | Ok(_) => (), 226 | Err(err) => { 227 | info!("error starting instance: {}", err); 228 | let code = self.exit_code.clone(); 229 | 230 | let (lock, cvar) = &*code; 231 | let mut ec = lock.lock().unwrap(); 232 | *ec = Some((139, Utc::now())); 233 | cvar.notify_all(); 234 | return Err(err); 235 | } 236 | } 237 | 238 | Ok(1) // TODO: PID: I wanted to use a thread ID here, but threads use a u64, the API wants a u32 239 | } 240 | 241 | fn kill(&self, signal: u32) -> Result<(), Error> { 242 | if signal != 9 { 243 | return Err(Error::InvalidArgument( 244 | "only SIGKILL is supported".to_string(), 245 | )); 246 | } 247 | 248 | let interupt = self.interupt.read().unwrap(); 249 | let i = interupt.as_ref().ok_or(Error::FailedPrecondition( 250 | "module is not running".to_string(), 251 | ))?; 252 | 253 | i.interrupt(); 254 | Ok(()) 255 | } 256 | 257 | fn delete(&self) -> Result<(), Error> { 258 | Ok(()) 259 | } 260 | 261 | fn wait(&self, channel: Sender<(u32, DateTime)>) -> Result<(), Error> { 262 | let code = self.exit_code.clone(); 263 | thread::spawn(move || { 264 | let (lock, cvar) = &*code; 265 | let mut exit = lock.lock().unwrap(); 266 | while (*exit).is_none() { 267 | exit = cvar.wait(exit).unwrap(); 268 | } 269 | let ec = (*exit).unwrap(); 270 | channel.send(ec).unwrap(); 271 | }); 272 | 273 | Ok(()) 274 | } 275 | } 276 | 277 | impl EngineGetter for Wasi { 278 | type E = wasmtime::Engine; 279 | fn new_engine() -> Result { 280 | let engine = Self::E::new( 281 | wasmtime::Config::default() 282 | .interruptable(true) 283 | .cranelift_opt_level(OptLevel::Speed), 284 | )?; 285 | Ok(engine) 286 | } 287 | } 288 | 289 | fn handle_ce( 290 | request: &rouille::Request, 291 | store: &Mutex>, 292 | t: &wasi_ce::WasiCe, 293 | ) -> Response { 294 | let mut data = request.data().expect( 295 | "Oops, body already retrieved, problem \ 296 | in the server", 297 | ); 298 | let mut buf = "".to_string(); 299 | match data.read_to_string(&mut buf) { 300 | Ok(_) => (), 301 | Err(_) => return Response::text("Failed to read body"), 302 | }; 303 | let event = EventBuilderV10::new() 304 | .id(Uuid::new_v4().to_string()) 305 | .source(format!("{}{}", request.remote_addr(), request.url())) 306 | .ty("com.microsoft.steelthread.wasm") 307 | .time(Utc::now()) 308 | .data("application/json", buf) 309 | .build() 310 | .unwrap(); 311 | let event = serde_json::to_string(&event).unwrap(); 312 | let mut store = store.lock().unwrap(); 313 | let event = t.ce_handler(&mut *store, &event).unwrap().unwrap(); 314 | 315 | let event: Event = serde_json::from_str(&event).unwrap(); 316 | let mut buf = "hello world!".to_string(); 317 | if let Some(data) = event.data() { 318 | buf = data.to_string(); 319 | } 320 | Response::text(buf) 321 | } 322 | 323 | fn main() { 324 | shim::run::>("io.containerd.cehostshim.v1", None); 325 | } 326 | -------------------------------------------------------------------------------- /containerd-shim-cehostshim-v1/src/types.wit: -------------------------------------------------------------------------------- 1 | // General purpose error. 2 | enum error { 3 | success, 4 | error, 5 | } 6 | 7 | type payload = list 8 | -------------------------------------------------------------------------------- /containerd-shim-cehostshim-v1/src/wasi-ce.wit: -------------------------------------------------------------------------------- 1 | use * from types 2 | 3 | ce-handler: function(event: string) -> expected -------------------------------------------------------------------------------- /containerd-shim-sat-v1/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "containerd-shim-sat-v1" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | anyhow = "1.0" 10 | chrono = "0.4.19" 11 | containerd-shim = "0.3.0" 12 | containerd-shim-wasmtime-v1 = { git = "https://github.com/Mossaka/runwasi", branch = "jiazho/precompile" } 13 | log = "0.4" 14 | wasmtime = "^0.34" 15 | wasmtime-wasi = "^0.34" -------------------------------------------------------------------------------- /containerd-shim-sat-v1/src/main.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Context; 2 | use chrono::{DateTime, Utc}; 3 | use containerd_shim as shim; 4 | use containerd_shim_wasmtime_v1::sandbox::error::Error; 5 | use containerd_shim_wasmtime_v1::sandbox::instance::EngineGetter; 6 | use containerd_shim_wasmtime_v1::sandbox::oci; 7 | use containerd_shim_wasmtime_v1::sandbox::Instance; 8 | use containerd_shim_wasmtime_v1::sandbox::{instance::InstanceConfig, ShimCli, 9 | }; 10 | use log::info; 11 | use std::fs::File; 12 | use std::fs::OpenOptions; 13 | use std::io::BufRead; 14 | use std::io::Read; 15 | use std::io::Write; 16 | use std::path::Path; 17 | use std::path::PathBuf; 18 | use std::process::Command; 19 | use std::sync::mpsc::channel; 20 | use std::sync::mpsc::Sender; 21 | use std::sync::{Arc, Condvar, Mutex, RwLock}; 22 | use std::thread; 23 | use wasmtime::OptLevel; 24 | 25 | pub struct Wasi { 26 | exit_code: Arc<(Mutex)>>, Condvar)>, 27 | engine: wasmtime::Engine, 28 | 29 | id: String, 30 | stdin: String, 31 | stdout: String, 32 | stderr: String, 33 | bundle: String, 34 | shutdown_signal: Arc<(Mutex, Condvar)>, 35 | } 36 | 37 | pub fn maybe_open_stdio(path: &str) -> Result, Error> { 38 | if path.is_empty() { 39 | return Ok(None); 40 | } 41 | 42 | OpenOptions::new().read(true).write(true).create(true).open(path) 43 | .map(|file| Some(file)) 44 | .map_err(|err| Error::Others(format!("could not open stdio: {}", err))) 45 | } 46 | 47 | pub fn prepare_module(bundle: String,) -> Result { 48 | let mut spec = oci::load(Path::new(&bundle).join("config.json").to_str().unwrap())?; 49 | 50 | spec.canonicalize_rootfs(&bundle) 51 | .map_err(|err| Error::Others(format!("could not canonicalize rootfs: {}", err)))?; 52 | let root = match spec.root() { 53 | Some(r) => r.path(), 54 | None => { 55 | return Err(Error::Others( 56 | "rootfs is not specified in the config.json".to_string(), 57 | )); 58 | } 59 | }; 60 | 61 | info!("opening rootfs"); 62 | let args = oci::get_args(&spec); 63 | 64 | let mut cmd = args[0].clone(); 65 | let stripped = args[0].strip_prefix(std::path::MAIN_SEPARATOR); 66 | if stripped.is_some() { 67 | cmd = stripped.unwrap().to_string(); 68 | } 69 | 70 | let mod_path = root.join(cmd); 71 | Ok(mod_path) 72 | } 73 | 74 | impl Instance for Wasi { 75 | type E = wasmtime::Engine; 76 | fn new(id: String, cfg: Option<&InstanceConfig>) -> Self { 77 | let cfg = cfg.unwrap(); 78 | Wasi { 79 | exit_code: Arc::new((Mutex::new(None), Condvar::new())), 80 | engine: cfg.get_engine(), 81 | id, 82 | stdin: cfg.get_stdin().unwrap_or_default(), 83 | stdout: cfg.get_stdout().unwrap_or_default(), 84 | stderr: cfg.get_stderr().unwrap_or_default(), 85 | bundle: cfg.get_bundle().unwrap_or_default(), 86 | shutdown_signal: Arc::new((Mutex::new(false), Condvar::new())), 87 | } 88 | } 89 | fn start(&self) -> Result { 90 | // let engine = self.engine.clone(); 91 | 92 | let exit_code = self.exit_code.clone(); 93 | let shutdown_signal = self.shutdown_signal.clone(); 94 | let (tx, rx) = channel::>(); 95 | let bundle = self.bundle.clone(); 96 | let stdin = self.stdin.clone(); 97 | let stdout = maybe_open_stdio(&self.stdout.clone()).context("could not open stdout")?; 98 | let stderr = maybe_open_stdio(&self.stderr.clone()).context("could not open stderr")?; 99 | 100 | thread::Builder::new() 101 | .name(self.id.clone()) 102 | .spawn(move || { 103 | info!("get module"); 104 | let m = match prepare_module(bundle) { 105 | Ok(f) => f, 106 | Err(err) => { 107 | tx.send(Err(err)).unwrap(); 108 | return; 109 | } 110 | }; 111 | 112 | info!("module path is: {:?}", m); 113 | 114 | info!("notifying main thread we are about to start"); 115 | tx.send(Ok(())).unwrap(); 116 | 117 | let sat = Command::new("sat") 118 | .env("SAT_HTTP_PORT", "80") 119 | .env("HOME", "/") 120 | .arg(m) 121 | .stdout(std::process::Stdio::piped()) 122 | .stderr(std::process::Stdio::piped()) 123 | .spawn(); 124 | 125 | let mut sat = match sat { 126 | Ok(mut sat) => { 127 | info!("sat started"); 128 | sat 129 | }, 130 | Err(err) => { 131 | let (lock, cvar) = &*exit_code; 132 | let mut exit_code = lock.lock().unwrap(); 133 | *exit_code = Some((137, Utc::now())); 134 | info!("sat failed to start: {:?}", err); 135 | tx.send(Err(Error::Others(format!("could not start sat: {}", err)))) 136 | .unwrap(); 137 | cvar.notify_all(); 138 | return; 139 | } 140 | }; 141 | // let child_stdout = sat.stdout.take().unwrap(); 142 | // let mut reader = std::io::BufReader::new(child_stdout); 143 | 144 | let (lock, cvar) = &*shutdown_signal; 145 | let mut shutdown = lock.lock().unwrap(); 146 | while !*shutdown { 147 | let mut buf = [0u8; 1024]; 148 | shutdown = cvar.wait(shutdown).unwrap(); 149 | // for line in reader.by_ref().lines() { 150 | // info!(">>> {}", line.unwrap()); 151 | // } 152 | } 153 | 154 | info!(" >>> User requested shutdown: exiting"); 155 | let _ = sat.kill(); 156 | let (lock, cvar) = &*exit_code; 157 | let mut ec = lock.lock().unwrap(); 158 | *ec = Some((0, Utc::now())); 159 | cvar.notify_all(); 160 | })?; 161 | 162 | info!("Waiting for start notification"); 163 | match rx.recv().unwrap() { 164 | Ok(_) => (), 165 | Err(err) => { 166 | info!("error starting instance: {}", err); 167 | let code = self.exit_code.clone(); 168 | 169 | let (lock, cvar) = &*code; 170 | let mut ec = lock.lock().unwrap(); 171 | *ec = Some((139, Utc::now())); 172 | cvar.notify_all(); 173 | return Err(err); 174 | } 175 | } 176 | 177 | Ok(1) // TODO: PID: I wanted to use a thread ID here, but threads use a u64, the API wants a u32 178 | } 179 | 180 | fn kill(&self, signal: u32) -> Result<(), Error> { 181 | if signal != 9 { 182 | return Err(Error::InvalidArgument( 183 | "only SIGKILL is supported".to_string(), 184 | )); 185 | } 186 | let (lock, cvar) = &*self.shutdown_signal; 187 | let mut shutdown = lock.lock().unwrap(); 188 | *shutdown = true; 189 | cvar.notify_all(); 190 | 191 | Ok(()) 192 | } 193 | 194 | fn delete(&self) -> Result<(), Error> { 195 | Ok(()) 196 | } 197 | 198 | fn wait(&self, channel: Sender<(u32, DateTime)>) -> Result<(), Error> { 199 | let code = self.exit_code.clone(); 200 | thread::spawn(move || { 201 | let (lock, cvar) = &*code; 202 | let mut exit = lock.lock().unwrap(); 203 | while (*exit).is_none() { 204 | exit = cvar.wait(exit).unwrap(); 205 | } 206 | let ec = (*exit).unwrap(); 207 | channel.send(ec).unwrap(); 208 | }); 209 | 210 | Ok(()) 211 | } 212 | } 213 | 214 | impl EngineGetter for Wasi { 215 | type E = wasmtime::Engine; 216 | fn new_engine() -> Result { 217 | let engine = Self::E::new( 218 | wasmtime::Config::default() 219 | .interruptable(true) 220 | .cranelift_opt_level(OptLevel::Speed), 221 | )?; 222 | Ok(engine) 223 | } 224 | } 225 | 226 | fn main() { 227 | shim::run::>("io.containerd.aspdotnet.v1", None); 228 | } 229 | -------------------------------------------------------------------------------- /containerd-shim-spin-v1/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "containerd-shim-spin-v1" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | chrono = "0.4.19" 10 | containerd-shim = "0.3.0" 11 | containerd-shim-wasmtime-v1 = { git = "https://github.com/Mossaka/runwasi", branch = "jiazho/precompile" } 12 | log = "0.4" 13 | spin-trigger = { git = "https://github.com/danbugs/spin", branch = "danbugs/custom-logging-pipes" } 14 | spin-engine = { git = "https://github.com/danbugs/spin", branch = "danbugs/custom-logging-pipes" } 15 | spin-http-engine = { git = "https://github.com/danbugs/spin", branch = "danbugs/custom-logging-pipes" } 16 | spin-loader = { git = "https://github.com/danbugs/spin", branch = "danbugs/custom-logging-pipes" } 17 | spin-manifest = { git = "https://github.com/danbugs/spin", branch = "danbugs/custom-logging-pipes" } 18 | tokio = { version = "1.11", features = [ "rt" ] } 19 | wasmtime = "^0.34" -------------------------------------------------------------------------------- /containerd-shim-spin-v1/src/main.rs: -------------------------------------------------------------------------------- 1 | use chrono::{DateTime, Utc}; 2 | use containerd_shim as shim; 3 | use containerd_shim_wasmtime_v1::sandbox::error::Error; 4 | use containerd_shim_wasmtime_v1::sandbox::instance::EngineGetter; 5 | use containerd_shim_wasmtime_v1::sandbox::oci; 6 | use containerd_shim_wasmtime_v1::sandbox::Instance; 7 | use containerd_shim_wasmtime_v1::sandbox::{instance::InstanceConfig, ShimCli}; 8 | use log::info; 9 | use spin_engine::io::CustomLogPipes; 10 | use spin_engine::io::FollowComponents; 11 | use spin_engine::io::ModuleIoRedirectsTypes; 12 | use spin_engine::io::PipeFile; 13 | use spin_http_engine::HttpTrigger; 14 | 15 | use spin_trigger::Trigger; 16 | use std::fs::OpenOptions; 17 | use std::path::Path; 18 | use std::path::PathBuf; 19 | use std::sync::mpsc::channel; 20 | use std::sync::mpsc::Sender; 21 | use std::sync::{Arc, Condvar, Mutex}; 22 | use std::thread; 23 | use tokio::runtime::Runtime; 24 | use wasmtime::OptLevel; 25 | 26 | static SPIN_ADDR: &str = "0.0.0.0:80"; 27 | 28 | pub struct Wasi { 29 | exit_code: Arc<(Mutex)>>, Condvar)>, 30 | engine: spin_engine::Engine, 31 | 32 | id: String, 33 | stdin: String, 34 | stdout: String, 35 | stderr: String, 36 | bundle: String, 37 | shutdown_signal: Arc<(Mutex, Condvar)>, 38 | } 39 | 40 | pub fn prepare_module(bundle: String) -> Result<(PathBuf, PathBuf), Error> { 41 | let mut spec = oci::load(Path::new(&bundle).join("config.json").to_str().unwrap())?; 42 | 43 | spec.canonicalize_rootfs(&bundle) 44 | .map_err(|err| Error::Others(format!("could not canonicalize rootfs: {}", err)))?; 45 | 46 | let working_dir = oci::get_root(&spec); 47 | let mod_path = working_dir.join("spin.toml"); 48 | Ok((working_dir.to_path_buf(), mod_path)) 49 | } 50 | 51 | pub fn maybe_open_stdio(pipe_path: &PathBuf) -> Option { 52 | if pipe_path.as_os_str().is_empty() { 53 | None 54 | } else { 55 | Some(PipeFile::new( 56 | OpenOptions::new() 57 | .read(true) 58 | .write(true) 59 | .open(pipe_path.clone()) 60 | .unwrap(), 61 | pipe_path.clone(), 62 | )) 63 | } 64 | } 65 | 66 | impl Wasi { 67 | async fn build_spin_application( 68 | mod_path: PathBuf, 69 | working_dir: PathBuf, 70 | ) -> Result { 71 | Ok(spin_loader::from_file(mod_path, working_dir, &None).await?) 72 | } 73 | 74 | async fn build_spin_trigger( 75 | engine: spin_engine::Engine, 76 | app: spin_manifest::Application, 77 | stdout_pipe_path: PathBuf, 78 | stderr_pipe_path: PathBuf, 79 | stdin_pipe_path: PathBuf, 80 | ) -> Result { 81 | let custom_log_pipes = CustomLogPipes::new( 82 | maybe_open_stdio(&stdin_pipe_path), 83 | maybe_open_stdio(&stdout_pipe_path), 84 | maybe_open_stdio(&stderr_pipe_path), 85 | ); 86 | 87 | info!(" >>> {:#?}", custom_log_pipes); 88 | 89 | let config = spin_engine::ExecutionContextConfiguration { 90 | components: app.components, 91 | label: app.info.name, 92 | config_resolver: app.config_resolver, 93 | module_io_redirects: ModuleIoRedirectsTypes::FromFiles(custom_log_pipes), 94 | ..Default::default() 95 | }; 96 | 97 | let mut builder = spin_engine::Builder::with_engine(config, engine)?; 98 | 99 | HttpTrigger::configure_execution_context(&mut builder)?; 100 | let execution_ctx = builder.build().await?; 101 | let trigger_config = app.info.trigger.try_into().unwrap(); 102 | let component_triggers: spin_manifest::ComponentMap = app 103 | .component_triggers 104 | .into_iter() 105 | .map(|(id, trigger)| Ok((id, trigger.try_into().unwrap()))) 106 | .collect::>()?; 107 | 108 | Ok(HttpTrigger::new( 109 | execution_ctx, 110 | trigger_config, 111 | component_triggers, 112 | FollowComponents::All, 113 | )?) 114 | } 115 | } 116 | 117 | impl Instance for Wasi { 118 | type E = spin_engine::Engine; 119 | fn new(id: String, cfg: Option<&InstanceConfig>) -> Self { 120 | let cfg = cfg.unwrap(); 121 | Wasi { 122 | exit_code: Arc::new((Mutex::new(None), Condvar::new())), 123 | engine: cfg.get_engine(), 124 | id, 125 | stdin: cfg.get_stdin().unwrap_or_default(), 126 | stdout: cfg.get_stdout().unwrap_or_default(), 127 | stderr: cfg.get_stderr().unwrap_or_default(), 128 | bundle: cfg.get_bundle().unwrap_or_default(), 129 | shutdown_signal: Arc::new((Mutex::new(false), Condvar::new())), 130 | } 131 | } 132 | fn start(&self) -> Result { 133 | let engine = self.engine.clone(); 134 | 135 | let exit_code = self.exit_code.clone(); 136 | let shutdown_signal = self.shutdown_signal.clone(); 137 | let (tx, rx) = channel::>(); 138 | let bundle = self.bundle.clone(); 139 | let stdin = self.stdin.clone(); 140 | let stdout = self.stdout.clone(); 141 | let stderr = self.stderr.clone(); 142 | 143 | info!( 144 | " >>> stdin: {:#?}, stdout: {:#?}, stderr: {:#?}", 145 | stdin, stdout, stderr 146 | ); 147 | 148 | thread::Builder::new() 149 | .name(self.id.clone()) 150 | .spawn(move || { 151 | let (working_dir, mod_path) = match prepare_module(bundle) { 152 | Ok(f) => f, 153 | Err(err) => { 154 | tx.send(Err(err)).unwrap(); 155 | return; 156 | } 157 | }; 158 | 159 | info!(" >>> loading module: {}", mod_path.display()); 160 | info!(" >>> working dir: {}", working_dir.display()); 161 | info!(" >>> starting spin"); 162 | 163 | let rt = Runtime::new().unwrap(); 164 | rt.block_on(async { 165 | let app = match Wasi::build_spin_application(mod_path, working_dir).await { 166 | Ok(app) => app, 167 | Err(err) => { 168 | tx.send(Err(err)).unwrap(); 169 | return; 170 | } 171 | }; 172 | 173 | let http_trigger = match Wasi::build_spin_trigger( 174 | engine.clone(), 175 | app, 176 | PathBuf::from(stdout), 177 | PathBuf::from(stderr), 178 | PathBuf::from(stdin), 179 | ) 180 | .await 181 | { 182 | Ok(http_trigger) => http_trigger, 183 | Err(err) => { 184 | tx.send(Err(err)).unwrap(); 185 | return; 186 | } 187 | }; 188 | 189 | let rx_future = tokio::task::spawn_blocking(move || { 190 | let (lock, cvar) = &*shutdown_signal; 191 | let mut shutdown = lock.lock().unwrap(); 192 | while !*shutdown { 193 | shutdown = cvar.wait(shutdown).unwrap(); 194 | } 195 | }); 196 | 197 | let f = http_trigger.run(spin_http_engine::HttpTriggerExecutionConfig::new( 198 | SPIN_ADDR.to_string(), 199 | None, 200 | )); 201 | 202 | info!(" >>> notifying main thread we are about to start"); 203 | tx.send(Ok(())).unwrap(); 204 | tokio::select! { 205 | _ = f => { 206 | log::info!(" >>> Server shut down: exiting"); 207 | 208 | let (lock, cvar) = &*exit_code; 209 | let mut ec = lock.lock().unwrap(); 210 | *ec = Some((137, Utc::now())); 211 | cvar.notify_all(); 212 | }, 213 | _ = rx_future => { 214 | log::info!(" >>> User requested shutdown: exiting"); 215 | let (lock, cvar) = &*exit_code; 216 | let mut ec = lock.lock().unwrap(); 217 | *ec = Some((0, Utc::now())); 218 | cvar.notify_all(); 219 | }, 220 | }; 221 | }) 222 | })?; 223 | 224 | info!(" >>> Waiting for start notification"); 225 | match rx.recv().unwrap() { 226 | Ok(_) => (), 227 | Err(err) => { 228 | info!(" >>> error starting instance: {}", err); 229 | let code = self.exit_code.clone(); 230 | 231 | let (lock, cvar) = &*code; 232 | let mut ec = lock.lock().unwrap(); 233 | *ec = Some((139, Utc::now())); 234 | cvar.notify_all(); 235 | return Err(err); 236 | } 237 | } 238 | 239 | Ok(1) // TODO: PID: I wanted to use a thread ID here, but threads use a u64, the API wants a u32 240 | } 241 | 242 | fn kill(&self, signal: u32) -> Result<(), Error> { 243 | if signal != 9 { 244 | return Err(Error::InvalidArgument( 245 | "only SIGKILL is supported".to_string(), 246 | )); 247 | } 248 | 249 | let (lock, cvar) = &*self.shutdown_signal; 250 | let mut shutdown = lock.lock().unwrap(); 251 | *shutdown = true; 252 | cvar.notify_all(); 253 | 254 | Ok(()) 255 | } 256 | 257 | fn delete(&self) -> Result<(), Error> { 258 | Ok(()) 259 | } 260 | 261 | fn wait(&self, channel: Sender<(u32, DateTime)>) -> Result<(), Error> { 262 | let code = self.exit_code.clone(); 263 | thread::spawn(move || { 264 | let (lock, cvar) = &*code; 265 | let mut exit = lock.lock().unwrap(); 266 | while (*exit).is_none() { 267 | exit = cvar.wait(exit).unwrap(); 268 | } 269 | let ec = (*exit).unwrap(); 270 | channel.send(ec).unwrap(); 271 | }); 272 | 273 | Ok(()) 274 | } 275 | } 276 | 277 | impl EngineGetter for Wasi { 278 | type E = spin_engine::Engine; 279 | fn new_engine() -> Result { 280 | let mut config = wasmtime::Config::new(); 281 | config 282 | .cache_config_load_default()? 283 | .interruptable(true) 284 | .cranelift_opt_level(OptLevel::Speed); 285 | let engine = Self::E::new(config)?; 286 | Ok(engine) 287 | } 288 | } 289 | 290 | fn main() { 291 | shim::run::>("io.containerd.spin.v1", None); 292 | } 293 | -------------------------------------------------------------------------------- /images/aspnet/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:slim AS build 2 | RUN npm i wasm-opt -g 3 | WORKDIR /opt/wasmtest 4 | COPY ./wasiwebapp.wasm . 5 | RUN wasm-opt ./wasiwebapp.wasm -O3 -o ./wasiwebapp.opt.wasm 6 | 7 | FROM scratch 8 | ENTRYPOINT ["/wasm"] 9 | COPY --from=build /opt/wasmtest/wasiwebapp.opt.wasm /wasm -------------------------------------------------------------------------------- /images/aspnet/wasiwebapp.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mossaka/containerd-wasm-shims/c5a070a2834d4250e900e33f8036d634c1c0a3b7/images/aspnet/wasiwebapp.wasm -------------------------------------------------------------------------------- /images/image-cpp/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.59 AS build 2 | WORKDIR /opt/wasmtest 3 | COPY . . 4 | 5 | FROM scratch 6 | ENTRYPOINT ["/wasm"] 7 | COPY --from=build /opt/wasmtest/ctest.wasm /wasm -------------------------------------------------------------------------------- /images/image-cpp/Makefile: -------------------------------------------------------------------------------- 1 | WASI_CC ?= /opt/wasi-sdk/bin/clang 2 | WIT_BINDGEN ?= wit-bindgen 3 | WASMLINK ?= wasmlink 4 | 5 | bindgen: 6 | $(WIT_BINDGEN) c --export ../../../wit/ephemeral/wasi-ce.wit --out-dir bindings 7 | 8 | build: 9 | $(WASI_CC) -Wall -I . -I ./bindings -c -o wasi_ce.o bindings/wasi-ce.c 10 | $(WASI_CC) -Wall -mexec-model=reactor lib.cpp wasi_ce.o -o ctest.wasm 11 | 12 | 13 | link: link-fs 14 | 15 | link-fs: 16 | $(WASMLINK) ctest.wasm \ 17 | --interface wasi-cache=../../../wit/ephemeral/wasi-cache.wit \ 18 | --profile wasmtime \ 19 | --module wasi-cache=../../../crates/cache-fs/target/wasm32-wasi/release/wasi_cache_fs.wasm \ 20 | --output ctest-fs-linked.wasm 21 | 22 | clean: 23 | rm *.wasm && rm *.o 24 | -------------------------------------------------------------------------------- /images/image-cpp/bindings/wasi-ce.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | __attribute__((weak, export_name("canonical_abi_realloc"))) 5 | void *canonical_abi_realloc( 6 | void *ptr, 7 | size_t orig_size, 8 | size_t org_align, 9 | size_t new_size 10 | ) { 11 | void *ret = realloc(ptr, new_size); 12 | if (!ret) 13 | abort(); 14 | return ret; 15 | } 16 | 17 | __attribute__((weak, export_name("canonical_abi_free"))) 18 | void canonical_abi_free( 19 | void *ptr, 20 | size_t size, 21 | size_t align 22 | ) { 23 | free(ptr); 24 | } 25 | #include 26 | 27 | void wasi_ce_string_set(wasi_ce_string_t *ret, const char *s) { 28 | ret->ptr = (char*) s; 29 | ret->len = strlen(s); 30 | } 31 | 32 | void wasi_ce_string_dup(wasi_ce_string_t *ret, const char *s) { 33 | ret->len = strlen(s); 34 | ret->ptr = canonical_abi_realloc(NULL, 0, 1, ret->len); 35 | memcpy(ret->ptr, s, ret->len); 36 | } 37 | 38 | void wasi_ce_string_free(wasi_ce_string_t *ret) { 39 | canonical_abi_free(ret->ptr, ret->len, 1); 40 | ret->ptr = NULL; 41 | ret->len = 0; 42 | } 43 | void wasi_ce_payload_free(wasi_ce_payload_t *ptr) { 44 | canonical_abi_free(ptr->ptr, ptr->len * 1, 1); 45 | } 46 | typedef struct { 47 | // 0 if `val` is `ok`, 1 otherwise 48 | uint8_t tag; 49 | union { 50 | wasi_ce_string_t ok; 51 | wasi_ce_error_t err; 52 | } val; 53 | } wasi_ce_expected_string_error_t; 54 | static int64_t RET_AREA[3]; 55 | __attribute__((export_name("ce-handler"))) 56 | int32_t __wasm_export_wasi_ce_ce_handler(int32_t arg, int32_t arg0) { 57 | wasi_ce_string_t arg1 = (wasi_ce_string_t) { (char*)(arg), (size_t)(arg0) }; 58 | wasi_ce_string_t ok; 59 | wasi_ce_error_t ret = wasi_ce_ce_handler(&arg1, &ok); 60 | 61 | wasi_ce_expected_string_error_t ret2; 62 | if (ret <= 2) { 63 | ret2.tag = 1; 64 | ret2.val.err = ret; 65 | } else { 66 | ret2.tag = 0; 67 | ret2.val.ok = ok; 68 | } 69 | int32_t variant6; 70 | int32_t variant7; 71 | int32_t variant8; 72 | switch ((int32_t) (ret2).tag) { 73 | case 0: { 74 | const wasi_ce_string_t *payload = &(ret2).val.ok; 75 | variant6 = 0; 76 | variant7 = (int32_t) (*payload).ptr; 77 | variant8 = (int32_t) (*payload).len; 78 | break; 79 | } 80 | case 1: { 81 | const wasi_ce_error_t *payload3 = &(ret2).val.err; 82 | int32_t variant; 83 | switch ((int32_t) *payload3) { 84 | case 0: { 85 | variant = 0; 86 | break; 87 | } 88 | case 1: { 89 | variant = 1; 90 | break; 91 | } 92 | } 93 | variant6 = 1; 94 | variant7 = variant; 95 | variant8 = 0; 96 | break; 97 | } 98 | } 99 | int32_t ptr = (int32_t) &RET_AREA; 100 | *((int32_t*)(ptr + 16)) = variant8; 101 | *((int32_t*)(ptr + 8)) = variant7; 102 | *((int32_t*)(ptr + 0)) = variant6; 103 | return ptr; 104 | } 105 | -------------------------------------------------------------------------------- /images/image-cpp/bindings/wasi-ce.h: -------------------------------------------------------------------------------- 1 | #ifndef __BINDINGS_WASI_CE_H 2 | #define __BINDINGS_WASI_CE_H 3 | #ifdef __cplusplus 4 | extern "C" 5 | { 6 | #endif 7 | 8 | #include 9 | #include 10 | 11 | typedef struct { 12 | char *ptr; 13 | size_t len; 14 | } wasi_ce_string_t; 15 | 16 | void wasi_ce_string_set(wasi_ce_string_t *ret, const char *s); 17 | void wasi_ce_string_dup(wasi_ce_string_t *ret, const char *s); 18 | void wasi_ce_string_free(wasi_ce_string_t *ret); 19 | // General purpose error. 20 | typedef uint8_t wasi_ce_error_t; 21 | #define WASI_CE_ERROR_SUCCESS 0 22 | #define WASI_CE_ERROR_ERROR 1 23 | typedef struct { 24 | uint8_t *ptr; 25 | size_t len; 26 | } wasi_ce_payload_t; 27 | void wasi_ce_payload_free(wasi_ce_payload_t *ptr); 28 | wasi_ce_error_t wasi_ce_ce_handler(wasi_ce_string_t *event, wasi_ce_string_t *ret0); 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | #endif 33 | -------------------------------------------------------------------------------- /images/image-cpp/ctest.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mossaka/containerd-wasm-shims/c5a070a2834d4250e900e33f8036d634c1c0a3b7/images/image-cpp/ctest.wasm -------------------------------------------------------------------------------- /images/image-cpp/lib.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include "bindings/wasi-ce.h" 8 | 9 | 10 | wasi_ce_error_t wasi_ce_ce_handler(wasi_ce_string_t *event, wasi_ce_string_t *ret0) { 11 | char * str; 12 | str = (char *)malloc(sizeof(char) * (24)); 13 | std::strncpy(str, event->ptr + 27, 23); 14 | printf("Received event id: `%s`\n", str); 15 | *ret0 = *event; 16 | return WASI_CE_ERROR_SUCCESS; 17 | } 18 | -------------------------------------------------------------------------------- /images/image-cpp/wasi_ce.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mossaka/containerd-wasm-shims/c5a070a2834d4250e900e33f8036d634c1c0a3b7/images/image-cpp/wasi_ce.o -------------------------------------------------------------------------------- /images/image-rs/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "anyhow" 7 | version = "1.0.56" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" 10 | 11 | [[package]] 12 | name = "async-trait" 13 | version = "0.1.53" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" 16 | dependencies = [ 17 | "proc-macro2", 18 | "quote", 19 | "syn", 20 | ] 21 | 22 | [[package]] 23 | name = "autocfg" 24 | version = "1.1.0" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 27 | 28 | [[package]] 29 | name = "base64" 30 | version = "0.12.3" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 33 | 34 | [[package]] 35 | name = "bitflags" 36 | version = "1.3.2" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 39 | 40 | [[package]] 41 | name = "cfg-if" 42 | version = "1.0.0" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 45 | 46 | [[package]] 47 | name = "chrono" 48 | version = "0.4.19" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" 51 | dependencies = [ 52 | "libc", 53 | "num-integer", 54 | "num-traits", 55 | "serde", 56 | "time", 57 | "winapi", 58 | ] 59 | 60 | [[package]] 61 | name = "cloudevents-sdk" 62 | version = "0.5.0" 63 | source = "git+https://github.com/Mossaka/sdk-rust.git?branch=master#56aae43e138431b99a56d57cdfc45955dfa6570a" 64 | dependencies = [ 65 | "base64", 66 | "bitflags", 67 | "chrono", 68 | "delegate-attr", 69 | "hostname", 70 | "serde", 71 | "serde_json", 72 | "snafu", 73 | "url", 74 | "uuid", 75 | ] 76 | 77 | [[package]] 78 | name = "containerd-shim-wasmtime-demo" 79 | version = "0.1.0" 80 | dependencies = [ 81 | "anyhow", 82 | "cloudevents-sdk", 83 | "serde", 84 | "serde_json", 85 | "url", 86 | "wit-bindgen-rust", 87 | ] 88 | 89 | [[package]] 90 | name = "delegate-attr" 91 | version = "0.2.9" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "ee7e7ea0dba407429d816e8e38dda1a467cd74737722f2ccc8eae60429a1a3ab" 94 | dependencies = [ 95 | "proc-macro2", 96 | "quote", 97 | "syn", 98 | ] 99 | 100 | [[package]] 101 | name = "doc-comment" 102 | version = "0.3.3" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 105 | 106 | [[package]] 107 | name = "form_urlencoded" 108 | version = "1.0.1" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 111 | dependencies = [ 112 | "matches", 113 | "percent-encoding", 114 | ] 115 | 116 | [[package]] 117 | name = "getrandom" 118 | version = "0.2.6" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" 121 | dependencies = [ 122 | "cfg-if", 123 | "libc", 124 | "wasi", 125 | ] 126 | 127 | [[package]] 128 | name = "heck" 129 | version = "0.3.3" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 132 | dependencies = [ 133 | "unicode-segmentation", 134 | ] 135 | 136 | [[package]] 137 | name = "hostname" 138 | version = "0.3.1" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 141 | dependencies = [ 142 | "libc", 143 | "match_cfg", 144 | "winapi", 145 | ] 146 | 147 | [[package]] 148 | name = "id-arena" 149 | version = "2.2.1" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" 152 | 153 | [[package]] 154 | name = "idna" 155 | version = "0.2.3" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 158 | dependencies = [ 159 | "matches", 160 | "unicode-bidi", 161 | "unicode-normalization", 162 | ] 163 | 164 | [[package]] 165 | name = "itoa" 166 | version = "1.0.1" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 169 | 170 | [[package]] 171 | name = "libc" 172 | version = "0.2.121" 173 | source = "registry+https://github.com/rust-lang/crates.io-index" 174 | checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" 175 | 176 | [[package]] 177 | name = "match_cfg" 178 | version = "0.1.0" 179 | source = "registry+https://github.com/rust-lang/crates.io-index" 180 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 181 | 182 | [[package]] 183 | name = "matches" 184 | version = "0.1.9" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 187 | 188 | [[package]] 189 | name = "memchr" 190 | version = "2.4.1" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" 193 | 194 | [[package]] 195 | name = "num-integer" 196 | version = "0.1.44" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" 199 | dependencies = [ 200 | "autocfg", 201 | "num-traits", 202 | ] 203 | 204 | [[package]] 205 | name = "num-traits" 206 | version = "0.2.14" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 209 | dependencies = [ 210 | "autocfg", 211 | ] 212 | 213 | [[package]] 214 | name = "percent-encoding" 215 | version = "2.1.0" 216 | source = "registry+https://github.com/rust-lang/crates.io-index" 217 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 218 | 219 | [[package]] 220 | name = "proc-macro2" 221 | version = "1.0.36" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" 224 | dependencies = [ 225 | "unicode-xid", 226 | ] 227 | 228 | [[package]] 229 | name = "pulldown-cmark" 230 | version = "0.8.0" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" 233 | dependencies = [ 234 | "bitflags", 235 | "memchr", 236 | "unicase", 237 | ] 238 | 239 | [[package]] 240 | name = "quote" 241 | version = "1.0.17" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" 244 | dependencies = [ 245 | "proc-macro2", 246 | ] 247 | 248 | [[package]] 249 | name = "ryu" 250 | version = "1.0.9" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 253 | 254 | [[package]] 255 | name = "serde" 256 | version = "1.0.136" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" 259 | dependencies = [ 260 | "serde_derive", 261 | ] 262 | 263 | [[package]] 264 | name = "serde_derive" 265 | version = "1.0.136" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" 268 | dependencies = [ 269 | "proc-macro2", 270 | "quote", 271 | "syn", 272 | ] 273 | 274 | [[package]] 275 | name = "serde_json" 276 | version = "1.0.79" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" 279 | dependencies = [ 280 | "itoa", 281 | "ryu", 282 | "serde", 283 | ] 284 | 285 | [[package]] 286 | name = "snafu" 287 | version = "0.6.10" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "eab12d3c261b2308b0d80c26fffb58d17eba81a4be97890101f416b478c79ca7" 290 | dependencies = [ 291 | "doc-comment", 292 | "snafu-derive", 293 | ] 294 | 295 | [[package]] 296 | name = "snafu-derive" 297 | version = "0.6.10" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "1508efa03c362e23817f96cde18abed596a25219a8b2c66e8db33c03543d315b" 300 | dependencies = [ 301 | "proc-macro2", 302 | "quote", 303 | "syn", 304 | ] 305 | 306 | [[package]] 307 | name = "syn" 308 | version = "1.0.90" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f" 311 | dependencies = [ 312 | "proc-macro2", 313 | "quote", 314 | "unicode-xid", 315 | ] 316 | 317 | [[package]] 318 | name = "time" 319 | version = "0.1.43" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" 322 | dependencies = [ 323 | "libc", 324 | "winapi", 325 | ] 326 | 327 | [[package]] 328 | name = "tinyvec" 329 | version = "1.5.1" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" 332 | dependencies = [ 333 | "tinyvec_macros", 334 | ] 335 | 336 | [[package]] 337 | name = "tinyvec_macros" 338 | version = "0.1.0" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 341 | 342 | [[package]] 343 | name = "unicase" 344 | version = "2.6.0" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 347 | dependencies = [ 348 | "version_check", 349 | ] 350 | 351 | [[package]] 352 | name = "unicode-bidi" 353 | version = "0.3.7" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" 356 | 357 | [[package]] 358 | name = "unicode-normalization" 359 | version = "0.1.19" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" 362 | dependencies = [ 363 | "tinyvec", 364 | ] 365 | 366 | [[package]] 367 | name = "unicode-segmentation" 368 | version = "1.9.0" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 371 | 372 | [[package]] 373 | name = "unicode-xid" 374 | version = "0.2.2" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 377 | 378 | [[package]] 379 | name = "url" 380 | version = "2.2.2" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 383 | dependencies = [ 384 | "form_urlencoded", 385 | "idna", 386 | "matches", 387 | "percent-encoding", 388 | "serde", 389 | ] 390 | 391 | [[package]] 392 | name = "uuid" 393 | version = "0.8.2" 394 | source = "registry+https://github.com/rust-lang/crates.io-index" 395 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" 396 | dependencies = [ 397 | "getrandom", 398 | ] 399 | 400 | [[package]] 401 | name = "version_check" 402 | version = "0.9.4" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 405 | 406 | [[package]] 407 | name = "wasi" 408 | version = "0.10.2+wasi-snapshot-preview1" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 411 | 412 | [[package]] 413 | name = "winapi" 414 | version = "0.3.9" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 417 | dependencies = [ 418 | "winapi-i686-pc-windows-gnu", 419 | "winapi-x86_64-pc-windows-gnu", 420 | ] 421 | 422 | [[package]] 423 | name = "winapi-i686-pc-windows-gnu" 424 | version = "0.4.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 427 | 428 | [[package]] 429 | name = "winapi-x86_64-pc-windows-gnu" 430 | version = "0.4.0" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 433 | 434 | [[package]] 435 | name = "wit-bindgen-gen-core" 436 | version = "0.1.0" 437 | source = "git+https://github.com/bytecodealliance/wit-bindgen?branch=main#01231ec85703fdc18b82b47d2a60f23138c61b1d" 438 | dependencies = [ 439 | "anyhow", 440 | "wit-parser", 441 | ] 442 | 443 | [[package]] 444 | name = "wit-bindgen-gen-rust" 445 | version = "0.1.0" 446 | source = "git+https://github.com/bytecodealliance/wit-bindgen?branch=main#01231ec85703fdc18b82b47d2a60f23138c61b1d" 447 | dependencies = [ 448 | "heck", 449 | "wit-bindgen-gen-core", 450 | ] 451 | 452 | [[package]] 453 | name = "wit-bindgen-gen-rust-wasm" 454 | version = "0.1.0" 455 | source = "git+https://github.com/bytecodealliance/wit-bindgen?branch=main#01231ec85703fdc18b82b47d2a60f23138c61b1d" 456 | dependencies = [ 457 | "heck", 458 | "wit-bindgen-gen-core", 459 | "wit-bindgen-gen-rust", 460 | ] 461 | 462 | [[package]] 463 | name = "wit-bindgen-rust" 464 | version = "0.1.0" 465 | source = "git+https://github.com/bytecodealliance/wit-bindgen?branch=main#01231ec85703fdc18b82b47d2a60f23138c61b1d" 466 | dependencies = [ 467 | "async-trait", 468 | "bitflags", 469 | "wit-bindgen-rust-impl", 470 | ] 471 | 472 | [[package]] 473 | name = "wit-bindgen-rust-impl" 474 | version = "0.1.0" 475 | source = "git+https://github.com/bytecodealliance/wit-bindgen?branch=main#01231ec85703fdc18b82b47d2a60f23138c61b1d" 476 | dependencies = [ 477 | "proc-macro2", 478 | "syn", 479 | "wit-bindgen-gen-core", 480 | "wit-bindgen-gen-rust-wasm", 481 | ] 482 | 483 | [[package]] 484 | name = "wit-parser" 485 | version = "0.1.0" 486 | source = "git+https://github.com/bytecodealliance/wit-bindgen?branch=main#01231ec85703fdc18b82b47d2a60f23138c61b1d" 487 | dependencies = [ 488 | "anyhow", 489 | "id-arena", 490 | "pulldown-cmark", 491 | "unicode-normalization", 492 | "unicode-xid", 493 | ] 494 | -------------------------------------------------------------------------------- /images/image-rs/Cargo.toml: -------------------------------------------------------------------------------- 1 | 2 | [package] 3 | name = "containerd-shim-wasmtime-demo" 4 | version = "0.1.0" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = [ "cdylib" ] 9 | 10 | [dependencies] 11 | anyhow = "1.0" 12 | wit-bindgen-rust = { git = "https://github.com/bytecodealliance/wit-bindgen", branch = "main" } 13 | url = "2.2.2" 14 | serde = "1" 15 | serde_json = "1.0" 16 | cloudevents-sdk = { default-features = false, git = "https://github.com/Mossaka/sdk-rust.git", branch = "master" } 17 | 18 | [workspace] -------------------------------------------------------------------------------- /images/image-rs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.59 AS build 2 | RUN rustup target add wasm32-wasi 3 | WORKDIR /opt/wasmtest 4 | COPY . . 5 | RUN cargo build --target=wasm32-wasi --release 6 | 7 | FROM scratch 8 | ENTRYPOINT ["/wasm"] 9 | COPY --from=build /opt/wasmtest/target/wasm32-wasi/release/containerd_shim_wasmtime_demo.wasm /wasm -------------------------------------------------------------------------------- /images/image-rs/src/lib.rs: -------------------------------------------------------------------------------- 1 | wit_bindgen_rust::export!("wasi-ce.wit"); 2 | 3 | use wasi_ce::*; 4 | use cloudevents::{Event, AttributesReader}; 5 | 6 | 7 | struct WasiCe {} 8 | 9 | impl wasi_ce::WasiCe for WasiCe { 10 | fn ce_handler(event: String) -> Result { 11 | println!("hello from wasm!"); 12 | println!(""); 13 | println!("event is {}", event); 14 | let event_: Event = serde_json::from_str(&event).unwrap(); 15 | println!("event source: {}", event_.source()); 16 | Ok(event) 17 | } 18 | } 19 | 20 | // TODO 21 | // Error handling is currently not implemented. 22 | impl From for Error { 23 | fn from(_: anyhow::Error) -> Self { 24 | Self::Error 25 | } 26 | } 27 | 28 | impl From for Error { 29 | fn from(_: std::io::Error) -> Self { 30 | Self::Error 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /images/image-rs/types.wit: -------------------------------------------------------------------------------- 1 | // General purpose error. 2 | enum error { 3 | success, 4 | error, 5 | } 6 | 7 | type payload = list 8 | -------------------------------------------------------------------------------- /images/image-rs/wasi-ce.wit: -------------------------------------------------------------------------------- 1 | use * from types 2 | 3 | ce-handler: function(event: string) -> expected -------------------------------------------------------------------------------- /images/image-rs/wasm.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "strconv" 7 | "strings" 8 | "time" 9 | ) 10 | 11 | func main() { 12 | defer fmt.Fprintln(os.Stderr, "exiting") 13 | if len(os.Args) == 1 { 14 | fmt.Println("Hello fromw wasm!") 15 | return 16 | } 17 | 18 | switch os.Args[1] { 19 | case "sleep": 20 | dur, err := time.ParseDuration(os.Args[2]) 21 | if err != nil { 22 | seconds, err := strconv.Atoi(os.Args[2]) 23 | if err != nil { 24 | panic(err) 25 | } 26 | dur = time.Duration(seconds) * time.Second 27 | } 28 | time.Sleep(dur) 29 | case "echo": 30 | fmt.Println(strings.Join(os.Args[2:], " ")) 31 | case "exit": 32 | code, err := strconv.Atoi(os.Args[2]) 33 | if err != nil { 34 | panic(err) 35 | } 36 | os.Exit(code) 37 | case "daemon": 38 | for { 39 | fmt.Println("Hello from wasm!") 40 | time.Sleep(time.Second) 41 | } 42 | default: 43 | fmt.Fprintln(os.Stderr, "unknown command", os.Args[1]) 44 | os.Exit(1) 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /images/sat-hello/.runnable.yaml: -------------------------------------------------------------------------------- 1 | name: sat-hello 2 | namespace: default 3 | lang: rust 4 | apiVersion: 0.2.5 -------------------------------------------------------------------------------- /images/sat-hello/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "proc-macro2" 7 | version = "1.0.38" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" 10 | dependencies = [ 11 | "unicode-xid", 12 | ] 13 | 14 | [[package]] 15 | name = "quote" 16 | version = "1.0.18" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" 19 | dependencies = [ 20 | "proc-macro2", 21 | ] 22 | 23 | [[package]] 24 | name = "sat-hello" 25 | version = "0.1.0" 26 | dependencies = [ 27 | "suborbital", 28 | ] 29 | 30 | [[package]] 31 | name = "suborbital" 32 | version = "0.15.1" 33 | source = "git+https://github.com/suborbital/reactr#156c830bd021067c0bb7d8d08d1ae8311fe7d99a" 34 | dependencies = [ 35 | "suborbital-macro", 36 | ] 37 | 38 | [[package]] 39 | name = "suborbital-macro" 40 | version = "0.15.1" 41 | source = "git+https://github.com/suborbital/reactr#156c830bd021067c0bb7d8d08d1ae8311fe7d99a" 42 | dependencies = [ 43 | "quote", 44 | "syn", 45 | ] 46 | 47 | [[package]] 48 | name = "syn" 49 | version = "1.0.94" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "a07e33e919ebcd69113d5be0e4d70c5707004ff45188910106854f38b960df4a" 52 | dependencies = [ 53 | "proc-macro2", 54 | "quote", 55 | "unicode-xid", 56 | ] 57 | 58 | [[package]] 59 | name = "unicode-xid" 60 | version = "0.2.3" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" 63 | -------------------------------------------------------------------------------- /images/sat-hello/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "sat-hello" 3 | version = "0.1.0" 4 | edition = "2018" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [lib] 9 | crate-type = ["cdylib", "rlib"] 10 | 11 | [dependencies] 12 | suborbital = { git = "https://github.com/suborbital/reactr" } 13 | 14 | [workspace] -------------------------------------------------------------------------------- /images/sat-hello/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.59 AS build 2 | RUN rustup target add wasm32-wasi 3 | WORKDIR /opt/wasmtest 4 | COPY . . 5 | RUN cargo build --target=wasm32-wasi --release 6 | 7 | FROM scratch 8 | ENTRYPOINT ["/wasm"] 9 | COPY --from=build /opt/wasmtest/target/wasm32-wasi/release/sat_hello.wasm /wasm -------------------------------------------------------------------------------- /images/sat-hello/src/lib.rs: -------------------------------------------------------------------------------- 1 | use suborbital::runnable::*; 2 | 3 | struct HelloEcho{} 4 | 5 | impl Runnable for HelloEcho { 6 | fn run(&self, input: Vec) -> Result, RunErr> { 7 | let in_string = String::from_utf8(input).unwrap(); 8 | 9 | 10 | Ok(format!("hello {}", in_string).as_bytes().to_vec()) 11 | } 12 | } 13 | 14 | 15 | // initialize the runner, do not edit below // 16 | static RUNNABLE: &HelloEcho = &HelloEcho{}; 17 | 18 | #[no_mangle] 19 | pub extern fn _start() { 20 | use_runnable(RUNNABLE); 21 | } -------------------------------------------------------------------------------- /images/sat-hello/wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mossaka/containerd-wasm-shims/c5a070a2834d4250e900e33f8036d634c1c0a3b7/images/sat-hello/wasm -------------------------------------------------------------------------------- /images/spin-kitchensink/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.59 AS build 2 | RUN curl -LO https://go.dev/dl/go1.17.9.linux-amd64.tar.gz && \ 3 | rm -rf /usr/local/go && \ 4 | tar -C /usr/local -xzf go1.17.9.linux-amd64.tar.gz && \ 5 | rm go1.17.9.linux-amd64.tar.gz && \ 6 | export PATH=$PATH:/usr/local/go/bin 7 | RUN apt-get update && apt-get install npm -y 8 | RUN wget https://github.com/tinygo-org/tinygo/releases/download/v0.22.0/tinygo_0.22.0_amd64.deb 9 | RUN dpkg -i tinygo_0.22.0_amd64.deb 10 | RUN rustup target add wasm32-wasi 11 | RUN curl -LO https://ziglang.org/builds/zig-linux-x86_64-0.10.0-dev.1927+cf20b97b7.tar.xz && \ 12 | tar -C /usr/local -xJf zig-linux-x86_64-0.10.0-dev.1927+cf20b97b7.tar.xz && \ 13 | rm zig-linux-x86_64-0.10.0-dev.1927+cf20b97b7.tar.xz 14 | ENV PATH="/usr/local/zig-linux-x86_64-0.10.0-dev.1927+cf20b97b7:${PATH}" 15 | RUN which zig 16 | WORKDIR /opt/wasmtest 17 | RUN git clone https://github.com/Mossaka/spin-kitchensink && \ 18 | cp -r spin-kitchensink/* . && \ 19 | rm -rf spin-kitchensink 20 | RUN make build 21 | 22 | FROM scratch 23 | COPY --from=build /opt/wasmtest . -------------------------------------------------------------------------------- /images/spin/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM scratch 2 | COPY . . -------------------------------------------------------------------------------- /images/spin/spin.toml: -------------------------------------------------------------------------------- 1 | spin_version = "1" 2 | authors = ["Fermyon Engineering "] 3 | description = "A simple application that returns hello." 4 | name = "spin-hello-world" 5 | trigger = { type = "http", base = "/" } 6 | version = "1.0.0" 7 | 8 | [[component]] 9 | id = "hello" 10 | source = "spinhelloworld.wasm" 11 | [component.trigger] 12 | route = "/hello" 13 | -------------------------------------------------------------------------------- /images/spin/spinhelloworld.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mossaka/containerd-wasm-shims/c5a070a2834d4250e900e33f8036d634c1c0a3b7/images/spin/spinhelloworld.wasm --------------------------------------------------------------------------------