├── .github └── workflows │ └── rust.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md └── crates ├── cargo-cdk ├── Cargo.toml ├── assets │ ├── cdk.json │ ├── package.json │ └── worker.js └── src │ └── main.rs └── cdk-builder ├── Cargo.toml └── src ├── ec2.rs ├── lib.rs └── s3.rs /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - run: rustup toolchain install stable --profile minimal 20 | - uses: Swatinem/rust-cache@v2 21 | - name: Build 22 | run: cargo build --verbose 23 | - name: Run tests 24 | run: cargo test --verbose 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | cdk-target/ 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.22.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.8.4" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 25 | dependencies = [ 26 | "cfg-if", 27 | "cipher", 28 | "cpufeatures", 29 | ] 30 | 31 | [[package]] 32 | name = "anstream" 33 | version = "0.6.14" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" 36 | dependencies = [ 37 | "anstyle", 38 | "anstyle-parse", 39 | "anstyle-query", 40 | "anstyle-wincon", 41 | "colorchoice", 42 | "is_terminal_polyfill", 43 | "utf8parse", 44 | ] 45 | 46 | [[package]] 47 | name = "anstyle" 48 | version = "1.0.7" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" 51 | 52 | [[package]] 53 | name = "anstyle-parse" 54 | version = "0.2.4" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" 57 | dependencies = [ 58 | "utf8parse", 59 | ] 60 | 61 | [[package]] 62 | name = "anstyle-query" 63 | version = "1.0.3" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" 66 | dependencies = [ 67 | "windows-sys 0.52.0", 68 | ] 69 | 70 | [[package]] 71 | name = "anstyle-wincon" 72 | version = "3.0.3" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" 75 | dependencies = [ 76 | "anstyle", 77 | "windows-sys 0.52.0", 78 | ] 79 | 80 | [[package]] 81 | name = "arbitrary" 82 | version = "1.3.2" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" 85 | dependencies = [ 86 | "derive_arbitrary", 87 | ] 88 | 89 | [[package]] 90 | name = "atomic-waker" 91 | version = "1.1.2" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 94 | 95 | [[package]] 96 | name = "autocfg" 97 | version = "1.3.0" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 100 | 101 | [[package]] 102 | name = "backtrace" 103 | version = "0.3.72" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" 106 | dependencies = [ 107 | "addr2line", 108 | "cc", 109 | "cfg-if", 110 | "libc", 111 | "miniz_oxide", 112 | "object", 113 | "rustc-demangle", 114 | ] 115 | 116 | [[package]] 117 | name = "base64" 118 | version = "0.22.1" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 121 | 122 | [[package]] 123 | name = "bitflags" 124 | version = "1.3.2" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 127 | 128 | [[package]] 129 | name = "bitflags" 130 | version = "2.5.0" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 133 | 134 | [[package]] 135 | name = "block-buffer" 136 | version = "0.10.4" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 139 | dependencies = [ 140 | "generic-array", 141 | ] 142 | 143 | [[package]] 144 | name = "bumpalo" 145 | version = "3.16.0" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 148 | 149 | [[package]] 150 | name = "byteorder" 151 | version = "1.5.0" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 154 | 155 | [[package]] 156 | name = "bytes" 157 | version = "1.6.0" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 160 | 161 | [[package]] 162 | name = "bzip2" 163 | version = "0.4.4" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" 166 | dependencies = [ 167 | "bzip2-sys", 168 | "libc", 169 | ] 170 | 171 | [[package]] 172 | name = "bzip2-sys" 173 | version = "0.1.11+1.0.8" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" 176 | dependencies = [ 177 | "cc", 178 | "libc", 179 | "pkg-config", 180 | ] 181 | 182 | [[package]] 183 | name = "cargo-cdk" 184 | version = "0.1.0" 185 | dependencies = [ 186 | "clap", 187 | "flate2", 188 | "reqwest", 189 | "serde", 190 | "serde_json", 191 | "tar", 192 | "tokio", 193 | "zip", 194 | ] 195 | 196 | [[package]] 197 | name = "cc" 198 | version = "1.0.98" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" 201 | dependencies = [ 202 | "jobserver", 203 | "libc", 204 | "once_cell", 205 | ] 206 | 207 | [[package]] 208 | name = "cdk-builder" 209 | version = "0.1.0" 210 | dependencies = [ 211 | "clap", 212 | "flate2", 213 | "futures", 214 | "reqwest", 215 | "serde", 216 | "serde_json", 217 | "tar", 218 | "tokio", 219 | "zip", 220 | ] 221 | 222 | [[package]] 223 | name = "cfg-if" 224 | version = "1.0.0" 225 | source = "registry+https://github.com/rust-lang/crates.io-index" 226 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 227 | 228 | [[package]] 229 | name = "cipher" 230 | version = "0.4.4" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 233 | dependencies = [ 234 | "crypto-common", 235 | "inout", 236 | ] 237 | 238 | [[package]] 239 | name = "clap" 240 | version = "4.5.4" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" 243 | dependencies = [ 244 | "clap_builder", 245 | "clap_derive", 246 | ] 247 | 248 | [[package]] 249 | name = "clap_builder" 250 | version = "4.5.2" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" 253 | dependencies = [ 254 | "anstream", 255 | "anstyle", 256 | "clap_lex", 257 | "strsim", 258 | ] 259 | 260 | [[package]] 261 | name = "clap_derive" 262 | version = "4.5.4" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" 265 | dependencies = [ 266 | "heck", 267 | "proc-macro2", 268 | "quote", 269 | "syn", 270 | ] 271 | 272 | [[package]] 273 | name = "clap_lex" 274 | version = "0.7.0" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 277 | 278 | [[package]] 279 | name = "colorchoice" 280 | version = "1.0.1" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" 283 | 284 | [[package]] 285 | name = "constant_time_eq" 286 | version = "0.3.0" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" 289 | 290 | [[package]] 291 | name = "core-foundation" 292 | version = "0.9.4" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 295 | dependencies = [ 296 | "core-foundation-sys", 297 | "libc", 298 | ] 299 | 300 | [[package]] 301 | name = "core-foundation-sys" 302 | version = "0.8.6" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 305 | 306 | [[package]] 307 | name = "cpufeatures" 308 | version = "0.2.12" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 311 | dependencies = [ 312 | "libc", 313 | ] 314 | 315 | [[package]] 316 | name = "crc" 317 | version = "3.2.1" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" 320 | dependencies = [ 321 | "crc-catalog", 322 | ] 323 | 324 | [[package]] 325 | name = "crc-catalog" 326 | version = "2.4.0" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 329 | 330 | [[package]] 331 | name = "crc32fast" 332 | version = "1.4.2" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 335 | dependencies = [ 336 | "cfg-if", 337 | ] 338 | 339 | [[package]] 340 | name = "crossbeam-utils" 341 | version = "0.8.20" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 344 | 345 | [[package]] 346 | name = "crypto-common" 347 | version = "0.1.6" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 350 | dependencies = [ 351 | "generic-array", 352 | "typenum", 353 | ] 354 | 355 | [[package]] 356 | name = "deflate64" 357 | version = "0.1.8" 358 | source = "registry+https://github.com/rust-lang/crates.io-index" 359 | checksum = "83ace6c86376be0b6cdcf3fb41882e81d94b31587573d1cfa9d01cd06bba210d" 360 | 361 | [[package]] 362 | name = "deranged" 363 | version = "0.3.11" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 366 | dependencies = [ 367 | "powerfmt", 368 | ] 369 | 370 | [[package]] 371 | name = "derive_arbitrary" 372 | version = "1.3.2" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" 375 | dependencies = [ 376 | "proc-macro2", 377 | "quote", 378 | "syn", 379 | ] 380 | 381 | [[package]] 382 | name = "digest" 383 | version = "0.10.7" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 386 | dependencies = [ 387 | "block-buffer", 388 | "crypto-common", 389 | "subtle", 390 | ] 391 | 392 | [[package]] 393 | name = "displaydoc" 394 | version = "0.2.4" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" 397 | dependencies = [ 398 | "proc-macro2", 399 | "quote", 400 | "syn", 401 | ] 402 | 403 | [[package]] 404 | name = "encoding_rs" 405 | version = "0.8.34" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 408 | dependencies = [ 409 | "cfg-if", 410 | ] 411 | 412 | [[package]] 413 | name = "equivalent" 414 | version = "1.0.1" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 417 | 418 | [[package]] 419 | name = "errno" 420 | version = "0.3.9" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 423 | dependencies = [ 424 | "libc", 425 | "windows-sys 0.52.0", 426 | ] 427 | 428 | [[package]] 429 | name = "fastrand" 430 | version = "2.1.0" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" 433 | 434 | [[package]] 435 | name = "filetime" 436 | version = "0.2.23" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" 439 | dependencies = [ 440 | "cfg-if", 441 | "libc", 442 | "redox_syscall 0.4.1", 443 | "windows-sys 0.52.0", 444 | ] 445 | 446 | [[package]] 447 | name = "flate2" 448 | version = "1.0.30" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" 451 | dependencies = [ 452 | "crc32fast", 453 | "miniz_oxide", 454 | ] 455 | 456 | [[package]] 457 | name = "fnv" 458 | version = "1.0.7" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 461 | 462 | [[package]] 463 | name = "foreign-types" 464 | version = "0.3.2" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 467 | dependencies = [ 468 | "foreign-types-shared", 469 | ] 470 | 471 | [[package]] 472 | name = "foreign-types-shared" 473 | version = "0.1.1" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 476 | 477 | [[package]] 478 | name = "form_urlencoded" 479 | version = "1.2.1" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 482 | dependencies = [ 483 | "percent-encoding", 484 | ] 485 | 486 | [[package]] 487 | name = "futures" 488 | version = "0.3.30" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 491 | dependencies = [ 492 | "futures-channel", 493 | "futures-core", 494 | "futures-executor", 495 | "futures-io", 496 | "futures-sink", 497 | "futures-task", 498 | "futures-util", 499 | ] 500 | 501 | [[package]] 502 | name = "futures-channel" 503 | version = "0.3.30" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 506 | dependencies = [ 507 | "futures-core", 508 | "futures-sink", 509 | ] 510 | 511 | [[package]] 512 | name = "futures-core" 513 | version = "0.3.30" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 516 | 517 | [[package]] 518 | name = "futures-executor" 519 | version = "0.3.30" 520 | source = "registry+https://github.com/rust-lang/crates.io-index" 521 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 522 | dependencies = [ 523 | "futures-core", 524 | "futures-task", 525 | "futures-util", 526 | ] 527 | 528 | [[package]] 529 | name = "futures-io" 530 | version = "0.3.30" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 533 | 534 | [[package]] 535 | name = "futures-macro" 536 | version = "0.3.30" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 539 | dependencies = [ 540 | "proc-macro2", 541 | "quote", 542 | "syn", 543 | ] 544 | 545 | [[package]] 546 | name = "futures-sink" 547 | version = "0.3.30" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 550 | 551 | [[package]] 552 | name = "futures-task" 553 | version = "0.3.30" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 556 | 557 | [[package]] 558 | name = "futures-util" 559 | version = "0.3.30" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 562 | dependencies = [ 563 | "futures-channel", 564 | "futures-core", 565 | "futures-io", 566 | "futures-macro", 567 | "futures-sink", 568 | "futures-task", 569 | "memchr", 570 | "pin-project-lite", 571 | "pin-utils", 572 | "slab", 573 | ] 574 | 575 | [[package]] 576 | name = "generic-array" 577 | version = "0.14.7" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 580 | dependencies = [ 581 | "typenum", 582 | "version_check", 583 | ] 584 | 585 | [[package]] 586 | name = "getrandom" 587 | version = "0.2.15" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 590 | dependencies = [ 591 | "cfg-if", 592 | "libc", 593 | "wasi", 594 | ] 595 | 596 | [[package]] 597 | name = "gimli" 598 | version = "0.29.0" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 601 | 602 | [[package]] 603 | name = "h2" 604 | version = "0.4.5" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" 607 | dependencies = [ 608 | "atomic-waker", 609 | "bytes", 610 | "fnv", 611 | "futures-core", 612 | "futures-sink", 613 | "http", 614 | "indexmap", 615 | "slab", 616 | "tokio", 617 | "tokio-util", 618 | "tracing", 619 | ] 620 | 621 | [[package]] 622 | name = "hashbrown" 623 | version = "0.14.5" 624 | source = "registry+https://github.com/rust-lang/crates.io-index" 625 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 626 | 627 | [[package]] 628 | name = "heck" 629 | version = "0.5.0" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 632 | 633 | [[package]] 634 | name = "hermit-abi" 635 | version = "0.3.9" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 638 | 639 | [[package]] 640 | name = "hmac" 641 | version = "0.12.1" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 644 | dependencies = [ 645 | "digest", 646 | ] 647 | 648 | [[package]] 649 | name = "http" 650 | version = "1.1.0" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 653 | dependencies = [ 654 | "bytes", 655 | "fnv", 656 | "itoa", 657 | ] 658 | 659 | [[package]] 660 | name = "http-body" 661 | version = "1.0.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" 664 | dependencies = [ 665 | "bytes", 666 | "http", 667 | ] 668 | 669 | [[package]] 670 | name = "http-body-util" 671 | version = "0.1.1" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" 674 | dependencies = [ 675 | "bytes", 676 | "futures-core", 677 | "http", 678 | "http-body", 679 | "pin-project-lite", 680 | ] 681 | 682 | [[package]] 683 | name = "httparse" 684 | version = "1.8.0" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 687 | 688 | [[package]] 689 | name = "hyper" 690 | version = "1.3.1" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" 693 | dependencies = [ 694 | "bytes", 695 | "futures-channel", 696 | "futures-util", 697 | "h2", 698 | "http", 699 | "http-body", 700 | "httparse", 701 | "itoa", 702 | "pin-project-lite", 703 | "smallvec", 704 | "tokio", 705 | "want", 706 | ] 707 | 708 | [[package]] 709 | name = "hyper-tls" 710 | version = "0.6.0" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 713 | dependencies = [ 714 | "bytes", 715 | "http-body-util", 716 | "hyper", 717 | "hyper-util", 718 | "native-tls", 719 | "tokio", 720 | "tokio-native-tls", 721 | "tower-service", 722 | ] 723 | 724 | [[package]] 725 | name = "hyper-util" 726 | version = "0.1.5" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" 729 | dependencies = [ 730 | "bytes", 731 | "futures-channel", 732 | "futures-util", 733 | "http", 734 | "http-body", 735 | "hyper", 736 | "pin-project-lite", 737 | "socket2", 738 | "tokio", 739 | "tower", 740 | "tower-service", 741 | "tracing", 742 | ] 743 | 744 | [[package]] 745 | name = "idna" 746 | version = "0.5.0" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 749 | dependencies = [ 750 | "unicode-bidi", 751 | "unicode-normalization", 752 | ] 753 | 754 | [[package]] 755 | name = "indexmap" 756 | version = "2.2.6" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 759 | dependencies = [ 760 | "equivalent", 761 | "hashbrown", 762 | ] 763 | 764 | [[package]] 765 | name = "inout" 766 | version = "0.1.3" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 769 | dependencies = [ 770 | "generic-array", 771 | ] 772 | 773 | [[package]] 774 | name = "ipnet" 775 | version = "2.9.0" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 778 | 779 | [[package]] 780 | name = "is_terminal_polyfill" 781 | version = "1.70.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" 784 | 785 | [[package]] 786 | name = "itoa" 787 | version = "1.0.11" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 790 | 791 | [[package]] 792 | name = "jobserver" 793 | version = "0.1.31" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" 796 | dependencies = [ 797 | "libc", 798 | ] 799 | 800 | [[package]] 801 | name = "js-sys" 802 | version = "0.3.69" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 805 | dependencies = [ 806 | "wasm-bindgen", 807 | ] 808 | 809 | [[package]] 810 | name = "libc" 811 | version = "0.2.155" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 814 | 815 | [[package]] 816 | name = "linux-raw-sys" 817 | version = "0.4.14" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 820 | 821 | [[package]] 822 | name = "lock_api" 823 | version = "0.4.12" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 826 | dependencies = [ 827 | "autocfg", 828 | "scopeguard", 829 | ] 830 | 831 | [[package]] 832 | name = "lockfree-object-pool" 833 | version = "0.1.6" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" 836 | 837 | [[package]] 838 | name = "log" 839 | version = "0.4.21" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 842 | 843 | [[package]] 844 | name = "lzma-rs" 845 | version = "0.3.0" 846 | source = "registry+https://github.com/rust-lang/crates.io-index" 847 | checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" 848 | dependencies = [ 849 | "byteorder", 850 | "crc", 851 | ] 852 | 853 | [[package]] 854 | name = "memchr" 855 | version = "2.7.2" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 858 | 859 | [[package]] 860 | name = "mime" 861 | version = "0.3.17" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 864 | 865 | [[package]] 866 | name = "miniz_oxide" 867 | version = "0.7.3" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" 870 | dependencies = [ 871 | "adler", 872 | ] 873 | 874 | [[package]] 875 | name = "mio" 876 | version = "0.8.11" 877 | source = "registry+https://github.com/rust-lang/crates.io-index" 878 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 879 | dependencies = [ 880 | "libc", 881 | "wasi", 882 | "windows-sys 0.48.0", 883 | ] 884 | 885 | [[package]] 886 | name = "native-tls" 887 | version = "0.2.12" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 890 | dependencies = [ 891 | "libc", 892 | "log", 893 | "openssl", 894 | "openssl-probe", 895 | "openssl-sys", 896 | "schannel", 897 | "security-framework", 898 | "security-framework-sys", 899 | "tempfile", 900 | ] 901 | 902 | [[package]] 903 | name = "num-conv" 904 | version = "0.1.0" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 907 | 908 | [[package]] 909 | name = "num_cpus" 910 | version = "1.16.0" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 913 | dependencies = [ 914 | "hermit-abi", 915 | "libc", 916 | ] 917 | 918 | [[package]] 919 | name = "object" 920 | version = "0.35.0" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" 923 | dependencies = [ 924 | "memchr", 925 | ] 926 | 927 | [[package]] 928 | name = "once_cell" 929 | version = "1.19.0" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 932 | 933 | [[package]] 934 | name = "openssl" 935 | version = "0.10.64" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 938 | dependencies = [ 939 | "bitflags 2.5.0", 940 | "cfg-if", 941 | "foreign-types", 942 | "libc", 943 | "once_cell", 944 | "openssl-macros", 945 | "openssl-sys", 946 | ] 947 | 948 | [[package]] 949 | name = "openssl-macros" 950 | version = "0.1.1" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 953 | dependencies = [ 954 | "proc-macro2", 955 | "quote", 956 | "syn", 957 | ] 958 | 959 | [[package]] 960 | name = "openssl-probe" 961 | version = "0.1.5" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 964 | 965 | [[package]] 966 | name = "openssl-sys" 967 | version = "0.9.102" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" 970 | dependencies = [ 971 | "cc", 972 | "libc", 973 | "pkg-config", 974 | "vcpkg", 975 | ] 976 | 977 | [[package]] 978 | name = "parking_lot" 979 | version = "0.12.3" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 982 | dependencies = [ 983 | "lock_api", 984 | "parking_lot_core", 985 | ] 986 | 987 | [[package]] 988 | name = "parking_lot_core" 989 | version = "0.9.10" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 992 | dependencies = [ 993 | "cfg-if", 994 | "libc", 995 | "redox_syscall 0.5.1", 996 | "smallvec", 997 | "windows-targets 0.52.5", 998 | ] 999 | 1000 | [[package]] 1001 | name = "pbkdf2" 1002 | version = "0.12.2" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" 1005 | dependencies = [ 1006 | "digest", 1007 | "hmac", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "percent-encoding" 1012 | version = "2.3.1" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1015 | 1016 | [[package]] 1017 | name = "pin-project" 1018 | version = "1.1.5" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 1021 | dependencies = [ 1022 | "pin-project-internal", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "pin-project-internal" 1027 | version = "1.1.5" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 1030 | dependencies = [ 1031 | "proc-macro2", 1032 | "quote", 1033 | "syn", 1034 | ] 1035 | 1036 | [[package]] 1037 | name = "pin-project-lite" 1038 | version = "0.2.14" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 1041 | 1042 | [[package]] 1043 | name = "pin-utils" 1044 | version = "0.1.0" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1047 | 1048 | [[package]] 1049 | name = "pkg-config" 1050 | version = "0.3.30" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 1053 | 1054 | [[package]] 1055 | name = "powerfmt" 1056 | version = "0.2.0" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1059 | 1060 | [[package]] 1061 | name = "ppv-lite86" 1062 | version = "0.2.17" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1065 | 1066 | [[package]] 1067 | name = "proc-macro2" 1068 | version = "1.0.85" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" 1071 | dependencies = [ 1072 | "unicode-ident", 1073 | ] 1074 | 1075 | [[package]] 1076 | name = "quote" 1077 | version = "1.0.36" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1080 | dependencies = [ 1081 | "proc-macro2", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "rand" 1086 | version = "0.8.5" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1089 | dependencies = [ 1090 | "libc", 1091 | "rand_chacha", 1092 | "rand_core", 1093 | ] 1094 | 1095 | [[package]] 1096 | name = "rand_chacha" 1097 | version = "0.3.1" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1100 | dependencies = [ 1101 | "ppv-lite86", 1102 | "rand_core", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "rand_core" 1107 | version = "0.6.4" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1110 | dependencies = [ 1111 | "getrandom", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "redox_syscall" 1116 | version = "0.4.1" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 1119 | dependencies = [ 1120 | "bitflags 1.3.2", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "redox_syscall" 1125 | version = "0.5.1" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" 1128 | dependencies = [ 1129 | "bitflags 2.5.0", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "reqwest" 1134 | version = "0.12.4" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" 1137 | dependencies = [ 1138 | "base64", 1139 | "bytes", 1140 | "encoding_rs", 1141 | "futures-core", 1142 | "futures-util", 1143 | "h2", 1144 | "http", 1145 | "http-body", 1146 | "http-body-util", 1147 | "hyper", 1148 | "hyper-tls", 1149 | "hyper-util", 1150 | "ipnet", 1151 | "js-sys", 1152 | "log", 1153 | "mime", 1154 | "native-tls", 1155 | "once_cell", 1156 | "percent-encoding", 1157 | "pin-project-lite", 1158 | "rustls-pemfile", 1159 | "serde", 1160 | "serde_json", 1161 | "serde_urlencoded", 1162 | "sync_wrapper", 1163 | "system-configuration", 1164 | "tokio", 1165 | "tokio-native-tls", 1166 | "tower-service", 1167 | "url", 1168 | "wasm-bindgen", 1169 | "wasm-bindgen-futures", 1170 | "web-sys", 1171 | "winreg", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "rustc-demangle" 1176 | version = "0.1.24" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1179 | 1180 | [[package]] 1181 | name = "rustix" 1182 | version = "0.38.34" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" 1185 | dependencies = [ 1186 | "bitflags 2.5.0", 1187 | "errno", 1188 | "libc", 1189 | "linux-raw-sys", 1190 | "windows-sys 0.52.0", 1191 | ] 1192 | 1193 | [[package]] 1194 | name = "rustls-pemfile" 1195 | version = "2.1.2" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" 1198 | dependencies = [ 1199 | "base64", 1200 | "rustls-pki-types", 1201 | ] 1202 | 1203 | [[package]] 1204 | name = "rustls-pki-types" 1205 | version = "1.7.0" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" 1208 | 1209 | [[package]] 1210 | name = "ryu" 1211 | version = "1.0.18" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1214 | 1215 | [[package]] 1216 | name = "schannel" 1217 | version = "0.1.23" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 1220 | dependencies = [ 1221 | "windows-sys 0.52.0", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "scopeguard" 1226 | version = "1.2.0" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1229 | 1230 | [[package]] 1231 | name = "security-framework" 1232 | version = "2.11.0" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" 1235 | dependencies = [ 1236 | "bitflags 2.5.0", 1237 | "core-foundation", 1238 | "core-foundation-sys", 1239 | "libc", 1240 | "security-framework-sys", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "security-framework-sys" 1245 | version = "2.11.0" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" 1248 | dependencies = [ 1249 | "core-foundation-sys", 1250 | "libc", 1251 | ] 1252 | 1253 | [[package]] 1254 | name = "serde" 1255 | version = "1.0.203" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" 1258 | dependencies = [ 1259 | "serde_derive", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "serde_derive" 1264 | version = "1.0.203" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" 1267 | dependencies = [ 1268 | "proc-macro2", 1269 | "quote", 1270 | "syn", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "serde_json" 1275 | version = "1.0.117" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 1278 | dependencies = [ 1279 | "itoa", 1280 | "ryu", 1281 | "serde", 1282 | ] 1283 | 1284 | [[package]] 1285 | name = "serde_urlencoded" 1286 | version = "0.7.1" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1289 | dependencies = [ 1290 | "form_urlencoded", 1291 | "itoa", 1292 | "ryu", 1293 | "serde", 1294 | ] 1295 | 1296 | [[package]] 1297 | name = "sha1" 1298 | version = "0.10.6" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1301 | dependencies = [ 1302 | "cfg-if", 1303 | "cpufeatures", 1304 | "digest", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "signal-hook-registry" 1309 | version = "1.4.2" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1312 | dependencies = [ 1313 | "libc", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "simd-adler32" 1318 | version = "0.3.7" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 1321 | 1322 | [[package]] 1323 | name = "slab" 1324 | version = "0.4.9" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1327 | dependencies = [ 1328 | "autocfg", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "smallvec" 1333 | version = "1.13.2" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1336 | 1337 | [[package]] 1338 | name = "socket2" 1339 | version = "0.5.7" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1342 | dependencies = [ 1343 | "libc", 1344 | "windows-sys 0.52.0", 1345 | ] 1346 | 1347 | [[package]] 1348 | name = "strsim" 1349 | version = "0.11.1" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1352 | 1353 | [[package]] 1354 | name = "subtle" 1355 | version = "2.5.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" 1358 | 1359 | [[package]] 1360 | name = "syn" 1361 | version = "2.0.66" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 1364 | dependencies = [ 1365 | "proc-macro2", 1366 | "quote", 1367 | "unicode-ident", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "sync_wrapper" 1372 | version = "0.1.2" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 1375 | 1376 | [[package]] 1377 | name = "system-configuration" 1378 | version = "0.5.1" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 1381 | dependencies = [ 1382 | "bitflags 1.3.2", 1383 | "core-foundation", 1384 | "system-configuration-sys", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "system-configuration-sys" 1389 | version = "0.5.0" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 1392 | dependencies = [ 1393 | "core-foundation-sys", 1394 | "libc", 1395 | ] 1396 | 1397 | [[package]] 1398 | name = "tar" 1399 | version = "0.4.40" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" 1402 | dependencies = [ 1403 | "filetime", 1404 | "libc", 1405 | "xattr", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "tempfile" 1410 | version = "3.10.1" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 1413 | dependencies = [ 1414 | "cfg-if", 1415 | "fastrand", 1416 | "rustix", 1417 | "windows-sys 0.52.0", 1418 | ] 1419 | 1420 | [[package]] 1421 | name = "thiserror" 1422 | version = "1.0.61" 1423 | source = "registry+https://github.com/rust-lang/crates.io-index" 1424 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 1425 | dependencies = [ 1426 | "thiserror-impl", 1427 | ] 1428 | 1429 | [[package]] 1430 | name = "thiserror-impl" 1431 | version = "1.0.61" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 1434 | dependencies = [ 1435 | "proc-macro2", 1436 | "quote", 1437 | "syn", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "time" 1442 | version = "0.3.36" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" 1445 | dependencies = [ 1446 | "deranged", 1447 | "num-conv", 1448 | "powerfmt", 1449 | "serde", 1450 | "time-core", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "time-core" 1455 | version = "0.1.2" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1458 | 1459 | [[package]] 1460 | name = "tinyvec" 1461 | version = "1.6.0" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1464 | dependencies = [ 1465 | "tinyvec_macros", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "tinyvec_macros" 1470 | version = "0.1.1" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1473 | 1474 | [[package]] 1475 | name = "tokio" 1476 | version = "1.38.0" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" 1479 | dependencies = [ 1480 | "backtrace", 1481 | "bytes", 1482 | "libc", 1483 | "mio", 1484 | "num_cpus", 1485 | "parking_lot", 1486 | "pin-project-lite", 1487 | "signal-hook-registry", 1488 | "socket2", 1489 | "tokio-macros", 1490 | "windows-sys 0.48.0", 1491 | ] 1492 | 1493 | [[package]] 1494 | name = "tokio-macros" 1495 | version = "2.3.0" 1496 | source = "registry+https://github.com/rust-lang/crates.io-index" 1497 | checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" 1498 | dependencies = [ 1499 | "proc-macro2", 1500 | "quote", 1501 | "syn", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "tokio-native-tls" 1506 | version = "0.3.1" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1509 | dependencies = [ 1510 | "native-tls", 1511 | "tokio", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "tokio-util" 1516 | version = "0.7.11" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" 1519 | dependencies = [ 1520 | "bytes", 1521 | "futures-core", 1522 | "futures-sink", 1523 | "pin-project-lite", 1524 | "tokio", 1525 | ] 1526 | 1527 | [[package]] 1528 | name = "tower" 1529 | version = "0.4.13" 1530 | source = "registry+https://github.com/rust-lang/crates.io-index" 1531 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 1532 | dependencies = [ 1533 | "futures-core", 1534 | "futures-util", 1535 | "pin-project", 1536 | "pin-project-lite", 1537 | "tokio", 1538 | "tower-layer", 1539 | "tower-service", 1540 | ] 1541 | 1542 | [[package]] 1543 | name = "tower-layer" 1544 | version = "0.3.2" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 1547 | 1548 | [[package]] 1549 | name = "tower-service" 1550 | version = "0.3.2" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1553 | 1554 | [[package]] 1555 | name = "tracing" 1556 | version = "0.1.40" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1559 | dependencies = [ 1560 | "pin-project-lite", 1561 | "tracing-core", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "tracing-core" 1566 | version = "0.1.32" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1569 | dependencies = [ 1570 | "once_cell", 1571 | ] 1572 | 1573 | [[package]] 1574 | name = "try-lock" 1575 | version = "0.2.5" 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" 1577 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1578 | 1579 | [[package]] 1580 | name = "typenum" 1581 | version = "1.17.0" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1584 | 1585 | [[package]] 1586 | name = "unicode-bidi" 1587 | version = "0.3.15" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 1590 | 1591 | [[package]] 1592 | name = "unicode-ident" 1593 | version = "1.0.12" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1596 | 1597 | [[package]] 1598 | name = "unicode-normalization" 1599 | version = "0.1.23" 1600 | source = "registry+https://github.com/rust-lang/crates.io-index" 1601 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 1602 | dependencies = [ 1603 | "tinyvec", 1604 | ] 1605 | 1606 | [[package]] 1607 | name = "url" 1608 | version = "2.5.0" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 1611 | dependencies = [ 1612 | "form_urlencoded", 1613 | "idna", 1614 | "percent-encoding", 1615 | ] 1616 | 1617 | [[package]] 1618 | name = "utf8parse" 1619 | version = "0.2.1" 1620 | source = "registry+https://github.com/rust-lang/crates.io-index" 1621 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 1622 | 1623 | [[package]] 1624 | name = "vcpkg" 1625 | version = "0.2.15" 1626 | source = "registry+https://github.com/rust-lang/crates.io-index" 1627 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1628 | 1629 | [[package]] 1630 | name = "version_check" 1631 | version = "0.9.4" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1634 | 1635 | [[package]] 1636 | name = "want" 1637 | version = "0.3.1" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1640 | dependencies = [ 1641 | "try-lock", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "wasi" 1646 | version = "0.11.0+wasi-snapshot-preview1" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1649 | 1650 | [[package]] 1651 | name = "wasm-bindgen" 1652 | version = "0.2.92" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 1655 | dependencies = [ 1656 | "cfg-if", 1657 | "wasm-bindgen-macro", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "wasm-bindgen-backend" 1662 | version = "0.2.92" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 1665 | dependencies = [ 1666 | "bumpalo", 1667 | "log", 1668 | "once_cell", 1669 | "proc-macro2", 1670 | "quote", 1671 | "syn", 1672 | "wasm-bindgen-shared", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "wasm-bindgen-futures" 1677 | version = "0.4.42" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 1680 | dependencies = [ 1681 | "cfg-if", 1682 | "js-sys", 1683 | "wasm-bindgen", 1684 | "web-sys", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "wasm-bindgen-macro" 1689 | version = "0.2.92" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 1692 | dependencies = [ 1693 | "quote", 1694 | "wasm-bindgen-macro-support", 1695 | ] 1696 | 1697 | [[package]] 1698 | name = "wasm-bindgen-macro-support" 1699 | version = "0.2.92" 1700 | source = "registry+https://github.com/rust-lang/crates.io-index" 1701 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 1702 | dependencies = [ 1703 | "proc-macro2", 1704 | "quote", 1705 | "syn", 1706 | "wasm-bindgen-backend", 1707 | "wasm-bindgen-shared", 1708 | ] 1709 | 1710 | [[package]] 1711 | name = "wasm-bindgen-shared" 1712 | version = "0.2.92" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 1715 | 1716 | [[package]] 1717 | name = "web-sys" 1718 | version = "0.3.69" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 1721 | dependencies = [ 1722 | "js-sys", 1723 | "wasm-bindgen", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "windows-sys" 1728 | version = "0.48.0" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1731 | dependencies = [ 1732 | "windows-targets 0.48.5", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "windows-sys" 1737 | version = "0.52.0" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1740 | dependencies = [ 1741 | "windows-targets 0.52.5", 1742 | ] 1743 | 1744 | [[package]] 1745 | name = "windows-targets" 1746 | version = "0.48.5" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1749 | dependencies = [ 1750 | "windows_aarch64_gnullvm 0.48.5", 1751 | "windows_aarch64_msvc 0.48.5", 1752 | "windows_i686_gnu 0.48.5", 1753 | "windows_i686_msvc 0.48.5", 1754 | "windows_x86_64_gnu 0.48.5", 1755 | "windows_x86_64_gnullvm 0.48.5", 1756 | "windows_x86_64_msvc 0.48.5", 1757 | ] 1758 | 1759 | [[package]] 1760 | name = "windows-targets" 1761 | version = "0.52.5" 1762 | source = "registry+https://github.com/rust-lang/crates.io-index" 1763 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 1764 | dependencies = [ 1765 | "windows_aarch64_gnullvm 0.52.5", 1766 | "windows_aarch64_msvc 0.52.5", 1767 | "windows_i686_gnu 0.52.5", 1768 | "windows_i686_gnullvm", 1769 | "windows_i686_msvc 0.52.5", 1770 | "windows_x86_64_gnu 0.52.5", 1771 | "windows_x86_64_gnullvm 0.52.5", 1772 | "windows_x86_64_msvc 0.52.5", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "windows_aarch64_gnullvm" 1777 | version = "0.48.5" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1780 | 1781 | [[package]] 1782 | name = "windows_aarch64_gnullvm" 1783 | version = "0.52.5" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 1786 | 1787 | [[package]] 1788 | name = "windows_aarch64_msvc" 1789 | version = "0.48.5" 1790 | source = "registry+https://github.com/rust-lang/crates.io-index" 1791 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1792 | 1793 | [[package]] 1794 | name = "windows_aarch64_msvc" 1795 | version = "0.52.5" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 1798 | 1799 | [[package]] 1800 | name = "windows_i686_gnu" 1801 | version = "0.48.5" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1804 | 1805 | [[package]] 1806 | name = "windows_i686_gnu" 1807 | version = "0.52.5" 1808 | source = "registry+https://github.com/rust-lang/crates.io-index" 1809 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 1810 | 1811 | [[package]] 1812 | name = "windows_i686_gnullvm" 1813 | version = "0.52.5" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 1816 | 1817 | [[package]] 1818 | name = "windows_i686_msvc" 1819 | version = "0.48.5" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1822 | 1823 | [[package]] 1824 | name = "windows_i686_msvc" 1825 | version = "0.52.5" 1826 | source = "registry+https://github.com/rust-lang/crates.io-index" 1827 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 1828 | 1829 | [[package]] 1830 | name = "windows_x86_64_gnu" 1831 | version = "0.48.5" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1834 | 1835 | [[package]] 1836 | name = "windows_x86_64_gnu" 1837 | version = "0.52.5" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 1840 | 1841 | [[package]] 1842 | name = "windows_x86_64_gnullvm" 1843 | version = "0.48.5" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1846 | 1847 | [[package]] 1848 | name = "windows_x86_64_gnullvm" 1849 | version = "0.52.5" 1850 | source = "registry+https://github.com/rust-lang/crates.io-index" 1851 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 1852 | 1853 | [[package]] 1854 | name = "windows_x86_64_msvc" 1855 | version = "0.48.5" 1856 | source = "registry+https://github.com/rust-lang/crates.io-index" 1857 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1858 | 1859 | [[package]] 1860 | name = "windows_x86_64_msvc" 1861 | version = "0.52.5" 1862 | source = "registry+https://github.com/rust-lang/crates.io-index" 1863 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 1864 | 1865 | [[package]] 1866 | name = "winreg" 1867 | version = "0.52.0" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" 1870 | dependencies = [ 1871 | "cfg-if", 1872 | "windows-sys 0.48.0", 1873 | ] 1874 | 1875 | [[package]] 1876 | name = "xattr" 1877 | version = "1.3.1" 1878 | source = "registry+https://github.com/rust-lang/crates.io-index" 1879 | checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" 1880 | dependencies = [ 1881 | "libc", 1882 | "linux-raw-sys", 1883 | "rustix", 1884 | ] 1885 | 1886 | [[package]] 1887 | name = "zeroize" 1888 | version = "1.8.1" 1889 | source = "registry+https://github.com/rust-lang/crates.io-index" 1890 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 1891 | dependencies = [ 1892 | "zeroize_derive", 1893 | ] 1894 | 1895 | [[package]] 1896 | name = "zeroize_derive" 1897 | version = "1.4.2" 1898 | source = "registry+https://github.com/rust-lang/crates.io-index" 1899 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" 1900 | dependencies = [ 1901 | "proc-macro2", 1902 | "quote", 1903 | "syn", 1904 | ] 1905 | 1906 | [[package]] 1907 | name = "zip" 1908 | version = "2.1.2" 1909 | source = "registry+https://github.com/rust-lang/crates.io-index" 1910 | checksum = "098d5d7737fb0b70814faa73c17df84f047d38dd31d13bbf2ec3fb354b5abf45" 1911 | dependencies = [ 1912 | "aes", 1913 | "arbitrary", 1914 | "bzip2", 1915 | "constant_time_eq", 1916 | "crc32fast", 1917 | "crossbeam-utils", 1918 | "deflate64", 1919 | "displaydoc", 1920 | "flate2", 1921 | "hmac", 1922 | "indexmap", 1923 | "lzma-rs", 1924 | "memchr", 1925 | "pbkdf2", 1926 | "rand", 1927 | "sha1", 1928 | "thiserror", 1929 | "time", 1930 | "zeroize", 1931 | "zopfli", 1932 | "zstd", 1933 | ] 1934 | 1935 | [[package]] 1936 | name = "zopfli" 1937 | version = "0.8.1" 1938 | source = "registry+https://github.com/rust-lang/crates.io-index" 1939 | checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" 1940 | dependencies = [ 1941 | "bumpalo", 1942 | "crc32fast", 1943 | "lockfree-object-pool", 1944 | "log", 1945 | "once_cell", 1946 | "simd-adler32", 1947 | ] 1948 | 1949 | [[package]] 1950 | name = "zstd" 1951 | version = "0.13.1" 1952 | source = "registry+https://github.com/rust-lang/crates.io-index" 1953 | checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" 1954 | dependencies = [ 1955 | "zstd-safe", 1956 | ] 1957 | 1958 | [[package]] 1959 | name = "zstd-safe" 1960 | version = "7.1.0" 1961 | source = "registry+https://github.com/rust-lang/crates.io-index" 1962 | checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" 1963 | dependencies = [ 1964 | "zstd-sys", 1965 | ] 1966 | 1967 | [[package]] 1968 | name = "zstd-sys" 1969 | version = "2.0.10+zstd.1.5.6" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" 1972 | dependencies = [ 1973 | "cc", 1974 | "pkg-config", 1975 | ] 1976 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = [ 4 | "crates/cargo-cdk", 5 | "crates/cdk-builder", 6 | ] 7 | -------------------------------------------------------------------------------- /LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Matt Hunzinger 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cdk-rs 2 | 3 | [![License](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)](https://github.com/matthunz/cdk-rs#license) 4 | [![Crates.io](https://img.shields.io/crates/v/cargo-cdk.svg)](https://crates.io/crates/cargo-cdk) 5 | [![Crates.io](https://img.shields.io/crates/v/cdk-builder.svg)](https://crates.io/crates/cdk-builder) 6 | [![Docs](https://docs.rs/cdk-builder/badge.svg)](https://docs.rs/cdk-builder/latest/cdk-builder/) 7 | [![CI](https://github.com/matthunz/cdk-rs/workflows/Rust/badge.svg)](https://github.com/matthunz/cdk-rs/actions) 8 | 9 | (WIP) Rust support for the [AWS Cloud Development Kit (CDK)](https://aws.amazon.com/cdk/). 10 | 11 | ```rust 12 | use cdk_builder::{ec2, s3, App, Layer, Stack}; 13 | 14 | struct HelloStack; 15 | 16 | impl Stack for HelloStack { 17 | fn run(me: &mut Layer) { 18 | s3::Bucket { 19 | name: "HelloBucket", 20 | versioned: true, 21 | } 22 | .stack(me); 23 | 24 | let vpc = ec2::Vpc { 25 | name: "HelloVpc", 26 | max_azs: 3, 27 | } 28 | .stack(me); 29 | 30 | ec2::Instance { 31 | name: "HelloInstance", 32 | vpc: &vpc, 33 | } 34 | .stack(me); 35 | } 36 | } 37 | 38 | #[tokio::main] 39 | async fn main() { 40 | let mut app = App::new(); 41 | app.stack(HelloStack); 42 | app.run().await; 43 | } 44 | ``` 45 | 46 | ## Installation 47 | 48 | ``` 49 | cargo install cargo-cdk 50 | ``` 51 | 52 | ``` 53 | cargo cdk build 54 | cargo cdk ls 55 | ``` 56 | -------------------------------------------------------------------------------- /crates/cargo-cdk/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cargo-cdk" 3 | version = "0.1.0" 4 | edition = "2021" 5 | license = "MIT OR Apache-2.0" 6 | description = "Cargo subcommand for the AWS CDK" 7 | repository = "https://github.com/matthunz/cdk-rs" 8 | 9 | [dependencies] 10 | tar = "0.4" 11 | flate2 = "1.0" 12 | serde = { version = "1.0", features = ["derive"] } 13 | serde_json = "1.0" 14 | tokio = { version = "1.38.0", features = ["full"] } 15 | clap = { version = "4.5.4", features = ["derive"] } 16 | reqwest = "0.12.4" 17 | zip = "2.1.2" 18 | -------------------------------------------------------------------------------- /crates/cargo-cdk/assets/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "cargo run", 3 | "watch": { 4 | "include": [ 5 | "**" 6 | ], 7 | "exclude": [ 8 | "README.md", 9 | "cdk*.json", 10 | "jest.config.js", 11 | "package*.json", 12 | "yarn.lock", 13 | "node_modules", 14 | "test" 15 | ] 16 | }, 17 | "context": { 18 | "@aws-cdk/aws-lambda:recognizeLayerVersion": true, 19 | "@aws-cdk/core:checkSecretUsage": true, 20 | "@aws-cdk/core:target-partitions": [ 21 | "aws", 22 | "aws-cn" 23 | ], 24 | "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, 25 | "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, 26 | "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, 27 | "@aws-cdk/aws-iam:minimizePolicies": true, 28 | "@aws-cdk/core:validateSnapshotRemovalPolicy": true, 29 | "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, 30 | "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, 31 | "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, 32 | "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, 33 | "@aws-cdk/core:enablePartitionLiterals": true, 34 | "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, 35 | "@aws-cdk/aws-iam:standardizedServicePrincipals": true, 36 | "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, 37 | "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, 38 | "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, 39 | "@aws-cdk/aws-route53-patters:useCertificate": true, 40 | "@aws-cdk/customresources:installLatestAwsSdkDefault": false, 41 | "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, 42 | "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, 43 | "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, 44 | "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, 45 | "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, 46 | "@aws-cdk/aws-redshift:columnId": true, 47 | "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, 48 | "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, 49 | "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, 50 | "@aws-cdk/aws-kms:aliasNameRef": true, 51 | "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, 52 | "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, 53 | "@aws-cdk/aws-efs:denyAnonymousAccess": true, 54 | "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, 55 | "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, 56 | "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, 57 | "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, 58 | "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, 59 | "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, 60 | "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true, 61 | "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true, 62 | "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, 63 | "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true, 64 | "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true, 65 | "@aws-cdk/aws-eks:nodegroupNameAttribute": true, 66 | "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true, 67 | "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /crates/cargo-cdk/assets/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "0.1.0", 4 | "bin": { 5 | "run": "worker.js" 6 | }, 7 | "scripts": { 8 | "build": "echo \"The build step is not required when using JavaScript!\" && exit 0", 9 | "cdk": "cdk", 10 | "test": "jest" 11 | }, 12 | "devDependencies": { 13 | "aws-cdk": "2.144.0", 14 | "jest": "^29.7.0" 15 | }, 16 | "dependencies": { 17 | "aws-cdk-lib": "2.144.0", 18 | "constructs": "^10.0.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /crates/cargo-cdk/assets/worker.js: -------------------------------------------------------------------------------- 1 | const cdk = require("aws-cdk-lib"); 2 | const s3 = require("aws-cdk-lib/aws-s3"); 3 | const ec2 = require("aws-cdk-lib/aws-ec2"); 4 | 5 | const readline = require("readline"); 6 | 7 | const rl = readline.createInterface({ 8 | input: process.stdin, 9 | output: process.stdout, 10 | terminal: false, 11 | }); 12 | 13 | var app; 14 | var stacks = {}; 15 | 16 | rl.on("line", (line) => { 17 | try { 18 | const message = JSON.parse(line); 19 | try { 20 | const response = { json: eval(message.js) }; 21 | console.log(JSON.stringify(response)); 22 | } catch (error) { 23 | console.error("Failed to execute JS in worker:", error); 24 | } 25 | } catch (error) { 26 | console.error("Failed to parse JSON in worker:", error); 27 | } 28 | }); 29 | -------------------------------------------------------------------------------- /crates/cargo-cdk/src/main.rs: -------------------------------------------------------------------------------- 1 | use clap::Parser; 2 | use clap::Subcommand; 3 | use flate2::read::GzDecoder; 4 | use std::env::current_dir; 5 | use std::fs; 6 | use std::fs::File; 7 | use std::io::Cursor; 8 | use std::io::ErrorKind; 9 | use std::path::PathBuf; 10 | use std::process::Command; 11 | use tar::Archive; 12 | use tokio::runtime::Runtime; 13 | use zip::ZipArchive; 14 | 15 | #[derive(Debug, Parser)] 16 | #[command(version, about, long_about = None)] 17 | struct Args { 18 | #[command(subcommand)] 19 | command: Commands, 20 | } 21 | 22 | #[derive(Debug, Subcommand)] 23 | enum Commands { 24 | Build { 25 | #[arg(long)] 26 | example: Option, 27 | }, 28 | #[command(name = "ls")] 29 | List, 30 | } 31 | 32 | fn main() { 33 | let args = Args::parse(); 34 | 35 | match args.command { 36 | Commands::Build { example } => build(example), 37 | Commands::List => list(), 38 | } 39 | } 40 | 41 | fn build(example: Option) { 42 | let target_dir = "cdk-target"; 43 | 44 | match fs::create_dir(target_dir) { 45 | Ok(_) => { 46 | println!("Downloading latest AWS CDK library..."); 47 | 48 | let zip = Runtime::new().unwrap().block_on(async move { 49 | reqwest::get( 50 | "https://github.com/aws/aws-cdk/releases/download/v2.144.0/aws-cdk-2.144.0.zip", 51 | ) 52 | .await 53 | .unwrap() 54 | .bytes() 55 | .await 56 | .unwrap() 57 | }); 58 | let mut archive = ZipArchive::new(Cursor::new(&zip[..])).unwrap(); 59 | 60 | println!("Extracting AWS CDK library..."); 61 | 62 | let mut tmp_dir = PathBuf::from(target_dir); 63 | tmp_dir.push("tmp"); 64 | archive.extract(&tmp_dir).unwrap(); 65 | tmp_dir.push("js"); 66 | tmp_dir.push("aws-cdk-lib@2.144.0.jsii.tgz"); 67 | 68 | let data = File::open(&tmp_dir).unwrap(); 69 | let gz_decoder = GzDecoder::new(data); 70 | 71 | let mut archive = Archive::new(gz_decoder); 72 | archive.unpack(target_dir).unwrap(); 73 | } 74 | Err(e) if e.kind() == ErrorKind::AlreadyExists => {} 75 | Err(e) => todo!("{:?}", e), 76 | } 77 | 78 | let mut cargo_cmd = Command::new("cargo"); 79 | cargo_cmd.arg("build"); 80 | 81 | if let Some(ref example) = example { 82 | cargo_cmd.arg("--example"); 83 | cargo_cmd.arg(example); 84 | } 85 | 86 | cargo_cmd.spawn().unwrap().wait().unwrap(); 87 | 88 | println!("Copying template files..."); 89 | 90 | let mut file_path = PathBuf::from(target_dir); 91 | file_path.push("worker.js"); 92 | let worker_js = include_str!("../assets/worker.js"); 93 | fs::write(&file_path, worker_js).unwrap(); 94 | 95 | let mut file_path = PathBuf::from(target_dir); 96 | file_path.push("package.json"); 97 | let package_json = include_str!("../assets/package.json"); 98 | fs::write(&file_path, package_json).unwrap(); 99 | 100 | let mut file_path = PathBuf::from(target_dir); 101 | file_path.push("cdk.json"); 102 | let package_json = include_str!("../assets/cdk.json"); 103 | fs::write(&file_path, package_json).unwrap(); 104 | 105 | Command::new("npm.cmd") 106 | .arg("install") 107 | .current_dir(&target_dir) 108 | .spawn() 109 | .unwrap() 110 | .wait() 111 | .unwrap(); 112 | } 113 | 114 | fn list() { 115 | let mut path = current_dir().unwrap(); 116 | path.push("cdk-target"); 117 | 118 | Command::new("npm.cmd") 119 | .arg("run") 120 | .arg("cdk") 121 | .arg("ls") 122 | .current_dir(&path) 123 | .spawn() 124 | .unwrap() 125 | .wait() 126 | .unwrap(); 127 | } 128 | -------------------------------------------------------------------------------- /crates/cdk-builder/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "cdk-builder" 3 | version = "0.1.0" 4 | edition = "2021" 5 | license = "MIT OR Apache-2.0" 6 | description = "Bindings to the AWS CDK" 7 | repository = "https://github.com/matthunz/cdk-rs" 8 | 9 | [dependencies] 10 | tar = "0.4" 11 | flate2 = "1.0" 12 | serde = { version = "1.0", features = ["derive"] } 13 | serde_json = "1.0" 14 | tokio = { version = "1.38.0", features = ["full"] } 15 | clap = { version = "4.5.4", features = ["derive"] } 16 | reqwest = "0.12.4" 17 | futures = "0.3.30" 18 | zip = "2.1.2" 19 | -------------------------------------------------------------------------------- /crates/cdk-builder/src/ec2.rs: -------------------------------------------------------------------------------- 1 | use std::sync::atomic::Ordering; 2 | 3 | use crate::{Layer, Stack, COUNT}; 4 | 5 | #[derive(Clone, Debug, Default, PartialEq, Eq)] 6 | pub struct Vpc<'a> { 7 | pub name: &'a str, 8 | pub max_azs: u32, 9 | } 10 | 11 | impl Stack for Vpc<'_> { 12 | fn run(_me: &mut Layer) {} 13 | 14 | fn setup(me: &mut Layer) { 15 | let id = COUNT.fetch_add(1, Ordering::SeqCst); 16 | 17 | let expr = format!( 18 | r#" 19 | if (stacks['{id}'] == null) {{ 20 | stacks['{id}'] = new ec2.Vpc(this, '{}', {{ 21 | maxAzs: {} 22 | }}); 23 | }} 24 | 25 | return stacks['{id}'] 26 | "#, 27 | me.name, me.max_azs, 28 | ); 29 | me.expr = Some(expr.clone()); 30 | } 31 | 32 | fn initialize(me: &mut Layer) { 33 | me.exprs 34 | .borrow_mut() 35 | .push(me.expr.as_ref().unwrap().clone()); 36 | } 37 | } 38 | 39 | #[derive(Clone)] 40 | pub struct Instance<'a> { 41 | pub name: &'a str, 42 | pub vpc: &'a Layer>, 43 | } 44 | 45 | impl Stack for Instance<'_> { 46 | fn run(_me: &mut Layer) {} 47 | 48 | fn initialize(me: &mut Layer) { 49 | let id = COUNT.fetch_add(1, Ordering::SeqCst); 50 | let vpc = me.vpc.expr.as_ref().unwrap().clone(); 51 | 52 | me.parent_exprs.borrow_mut().push(format!( 53 | r#" 54 | if (stacks['{id}'] == null) {{ 55 | stacks['{id}'] = new ec2.Instance(this, '{}', {{ 56 | instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.MICRO), 57 | machineImage: ec2.MachineImage.latestAmazonLinux2(), 58 | vpc: (() => {{ {vpc} }})() 59 | }}); 60 | }} 61 | 62 | return stacks['{id}'] 63 | "#, 64 | me.name, 65 | )); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /crates/cdk-builder/src/lib.rs: -------------------------------------------------------------------------------- 1 | use serde::Deserialize; 2 | use serde::Serialize; 3 | use serde_json::Value; 4 | use std::borrow::Cow; 5 | use std::cell::RefCell; 6 | use std::ops::Deref; 7 | use std::ops::DerefMut; 8 | use std::process::Stdio; 9 | use std::rc::Rc; 10 | use std::sync::atomic::AtomicU64; 11 | use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader}; 12 | use tokio::process::{ChildStdin, ChildStdout, Command}; 13 | 14 | pub mod ec2; 15 | 16 | pub mod s3; 17 | 18 | #[derive(Serialize)] 19 | struct Request<'a> { 20 | js: &'a str, 21 | } 22 | 23 | #[derive(Deserialize)] 24 | struct Response { 25 | json: Value, 26 | } 27 | 28 | #[derive(Clone)] 29 | pub struct App { 30 | exprs: Rc>>, 31 | } 32 | 33 | impl App { 34 | pub fn new() -> Self { 35 | Self { 36 | exprs: Rc::default(), 37 | } 38 | } 39 | 40 | pub fn stack(&mut self, stack: S) { 41 | let mut layer = Layer { 42 | app: self.clone(), 43 | stack, 44 | exprs: Rc::default(), 45 | parent_exprs: self.exprs.clone(), 46 | expr: None, 47 | }; 48 | S::run(&mut layer); 49 | } 50 | 51 | pub async fn run(&mut self) { 52 | let mut child = Command::new("node") 53 | .arg("worker.js") 54 | .stdin(Stdio::piped()) 55 | .stdout(Stdio::piped()) 56 | .spawn() 57 | .expect("Failed to start child process"); 58 | 59 | let mut stdin = child.stdin.take().unwrap(); 60 | let mut stdout = child.stdout.take().unwrap(); 61 | 62 | tokio::task::spawn(async move { 63 | child.wait().await.unwrap(); 64 | }); 65 | 66 | request::( 67 | r#" 68 | app = new cdk.App(); 69 | 0 70 | "#, 71 | &mut stdin, 72 | &mut stdout, 73 | ) 74 | .await; 75 | 76 | let exprs = self.exprs.borrow(); 77 | for expr in &*exprs { 78 | request::(expr, &mut stdin, &mut stdout).await; 79 | } 80 | } 81 | } 82 | 83 | async fn request(js: &str, stdin: &mut ChildStdin, stdout: &mut ChildStdout) -> T 84 | where 85 | T: for<'de> Deserialize<'de>, 86 | { 87 | let message = Request { js }; 88 | let mut bytes = serde_json::to_vec(&message).unwrap(); 89 | bytes.push(b'\n'); 90 | stdin.write_all(&bytes).await.unwrap(); 91 | 92 | let reader = BufReader::new(stdout); 93 | let mut lines = reader.lines(); 94 | 95 | let Ok(Some(line)) = lines.next_line().await else { 96 | todo!() 97 | }; 98 | 99 | let res: Response = serde_json::from_str(&line).unwrap(); 100 | serde_json::from_value(res.json).unwrap() 101 | } 102 | 103 | pub trait Stack: Sized { 104 | fn run(me: &mut Layer); 105 | 106 | fn name(&self) -> Cow<'static, str> { 107 | let type_name = std::any::type_name::(); 108 | Cow::Borrowed( 109 | type_name 110 | .split('<') 111 | .next() 112 | .unwrap_or(type_name) 113 | .split("::") 114 | .last() 115 | .unwrap_or(type_name), 116 | ) 117 | } 118 | 119 | fn setup(me: &mut Layer) { 120 | let _ = me; 121 | } 122 | 123 | fn initialize(me: &mut Layer) { 124 | let exprs = me.exprs.borrow().concat(); 125 | let js = format!( 126 | r#" 127 | class RustStack extends cdk.Stack {{ 128 | constructor(scope, id, props) {{ 129 | super(scope, id, props); 130 | {} 131 | }} 132 | }} 133 | 134 | new RustStack(app, '{}', {{}}); 135 | 136 | 0 137 | "#, 138 | exprs, 139 | me.stack.name() 140 | ); 141 | me.parent_exprs.borrow_mut().push(js) 142 | } 143 | 144 | fn stack(self, layer: &Layer) -> Layer { 145 | let mut layer = Layer { 146 | app: layer.app.clone(), 147 | stack: self, 148 | exprs: Rc::default(), 149 | parent_exprs: layer.exprs.clone(), 150 | expr: None, 151 | }; 152 | Self::setup(&mut layer); 153 | layer 154 | } 155 | } 156 | 157 | pub struct Layer { 158 | app: App, 159 | stack: T, 160 | exprs: Rc>>, 161 | expr: Option, 162 | parent_exprs: Rc>>, 163 | } 164 | 165 | impl Deref for Layer { 166 | type Target = T; 167 | 168 | fn deref(&self) -> &Self::Target { 169 | &self.stack 170 | } 171 | } 172 | 173 | impl DerefMut for Layer { 174 | fn deref_mut(&mut self) -> &mut Self::Target { 175 | &mut self.stack 176 | } 177 | } 178 | 179 | impl Drop for Layer { 180 | fn drop(&mut self) { 181 | T::initialize(self) 182 | } 183 | } 184 | 185 | static COUNT: AtomicU64 = AtomicU64::new(0); 186 | -------------------------------------------------------------------------------- /crates/cdk-builder/src/s3.rs: -------------------------------------------------------------------------------- 1 | use crate::{Layer, Stack}; 2 | 3 | #[derive(Clone, Debug, Default, PartialEq, Eq)] 4 | pub struct Bucket<'a> { 5 | pub name: &'a str, 6 | pub versioned: bool, 7 | } 8 | 9 | impl Stack for Bucket<'_> { 10 | fn run(_me: &mut Layer) {} 11 | 12 | fn initialize(me: &mut Layer) { 13 | me.parent_exprs.borrow_mut().push(format!( 14 | r#" 15 | new s3.Bucket(this, '{}', {{ 16 | versioned: {} 17 | }}); 18 | "#, 19 | &me.name, me.versioned 20 | )); 21 | } 22 | } 23 | --------------------------------------------------------------------------------