diff --git a/Cargo.lock b/Cargo.lock index 462f8c0..7540d30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,17 +60,6 @@ dependencies = [ "syn", ] -[[package]] -name = "async-trait" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "async_io_utilities" version = "0.1.4" @@ -111,34 +100,409 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "aws-config" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b309b2154d224728d845a958c580834f24213037ed61b195da80c0b0fc7469fa" +dependencies = [ + "aws-http", + "aws-sdk-sso", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "hex", + "http", + "hyper", + "ring", + "time 0.3.16", + "tokio", + "tower", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-endpoint" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f35c8f5877ad60db4f0d9dcdfbcb2233a8cc539f9e568df39ee0581ec62e89" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "aws-types", + "http", + "regex", + "tracing", +] + +[[package]] +name = "aws-http" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f5422c9632d887968ccb66e2871a6d190d6104e276034912bee72ef58a5d890" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "http-body", + "lazy_static", + "percent-encoding", + "pin-project-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-cloudformation" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0313f35bd80da5cd293fb71ff9958bba4fb4a96bf3a8efc4e09745fdc6a19678" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-query", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "fastrand", + "http", + "tokio-stream", + "tower", +] + +[[package]] +name = "aws-sdk-s3" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4d31765abb258c501d5572ebce43dee524b4b3b6256cb8b4c78534898dc205b" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-checksums", + "aws-smithy-client", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "bytes-utils", + "http", + "http-body", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "aws-sdk-sso" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2cc8b50281e1350d0b5c7207c2ce53c6721186ad196472caff4f20fa4b42e96" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "tokio-stream", + "tower", +] + +[[package]] +name = "aws-sdk-ssooidc" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68748d11fc723a9ec923d3706a7025d38299f4d1cb4bc87f19f0a17446bad2c" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-json", + "aws-smithy-types", + "aws-types", + "bytes", + "http", + "tower", +] + +[[package]] +name = "aws-sdk-sts" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6179f13c9fbab3226860f377354dece860e34ff129b69c7c1b0fa828d1e9c76" +dependencies = [ + "aws-endpoint", + "aws-http", + "aws-sig-auth", + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-query", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "http", + "tower", +] + +[[package]] +name = "aws-sig-auth" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16f4d70c9c865af392eb40cacfe2bec3fa18f651fbdf49919cfc1dda13b189e" +dependencies = [ + "aws-sigv4", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-types", + "http", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d33790cecae42b999d197074c8a19e9b96b9e346284a6f93989e7489c9fa0f5" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-http", + "bytes", + "form_urlencoded", + "hex", + "http", + "once_cell", + "percent-encoding", + "regex", + "ring", + "time 0.3.16", + "tracing", +] + +[[package]] +name = "aws-smithy-async" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc604f278bae64bbd15854baa9c46ed69a56dfb0669d04aab80974749f2d6599" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", + "tokio-stream", +] + +[[package]] +name = "aws-smithy-checksums" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b402da39bc5aae618b70a9b8d828acad21fe4a3a73b82c0205b89db55d71ce8" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "bytes", + "crc32c", + "crc32fast", + "hex", + "http", + "http-body", + "md-5", + "pin-project-lite", + "sha1", + "sha2", + "tracing", +] + +[[package]] +name = "aws-smithy-client" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec39585f8274fa543ad5c63cc09cbd435666be16b2cf99e4e07be5cf798bc050" +dependencies = [ + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-http-tower", + "aws-smithy-types", + "bytes", + "fastrand", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "lazy_static", + "pin-project-lite", + "tokio", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-eventstream" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98c2a7b9490fd2bc7af3a1c486ae921102d7234d1fa5e7d91039068e7af48a01" +dependencies = [ + "aws-smithy-types", + "bytes", + "crc32fast", +] + +[[package]] +name = "aws-smithy-http" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014a0ef5c4508fc2f6a9d3925c214725af19f020ea388db48e20196cc4cc9d6d" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http", + "http-body", + "hyper", + "once_cell", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "aws-smithy-http-tower" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deecb478dc3cc40203e0e97ac0fb92947e0719754bbafd0026bdc49318e2fd03" +dependencies = [ + "aws-smithy-http", + "bytes", + "http", + "http-body", + "pin-project-lite", + "tower", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6593456af93c4a39724f7dc9d239833102ab96c1d1e94c35ea79f0e55f9fd54c" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-query" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b803460b71645dfa9f6be47c4f00f91632f01e5bb01f9dc43890cd6cba983f08" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-types" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e93b0c93a3b963da946a0b8ef3853a7252298eb75cdbfb21dad60f5ed0ded861" +dependencies = [ + "itoa", + "num-integer", + "ryu", + "time 0.3.16", +] + +[[package]] +name = "aws-smithy-types-convert" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c2065f8cfcb8b1bac67639408fc0447ac3db97f808f1e23fa1136ea9fa26e8a" +dependencies = [ + "aws-smithy-types", + "chrono", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36b9efb4855b4acb29961a776d45680f3cbdd7c4783cbbae078da54c342575dd" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f3f349b39781849261db1c727369923bb97007cf7bd0deb3a6e9e461c8d38f" +dependencies = [ + "aws-smithy-async", + "aws-smithy-client", + "aws-smithy-http", + "aws-smithy-types", + "http", + "rustc_version", + "tracing", + "zeroize", +] + [[package]] name = "aws_sso_flow" -version = "0.2.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58efdf6b3a6f82dae02f877b3733ee649a412a68f055ad5400f406cb26411092" +checksum = "ffe9315159b62d77f5d3bbdf8bdbab53835c48441f0fc6d8e962624e20705e95" dependencies = [ - "async-trait", + "aws-config", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-types", "chrono", "const-str", "dirs-next", "futures", - "md-5 0.10.4", - "rusoto_core 0.48.0", - "rusoto_credential 0.46.0", - "rusoto_sso", - "rusoto_sso_oidc", + "md-5", "serde", "serde_json", "tokio", "url", ] -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - [[package]] name = "base64" version = "0.13.0" @@ -151,15 +515,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.10.3" @@ -181,6 +536,16 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +[[package]] +name = "bytes-utils" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9" +dependencies = [ + "bytes", + "either", +] + [[package]] name = "cc" version = "1.0.73" @@ -259,23 +624,22 @@ dependencies = [ [[package]] name = "cloudformatious" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115bf8830d5e3410f97cfdf1c9bd65a634b8cd155b7efe107480e2a8028cb9c4" +checksum = "7fe6e446ff27c581b6ff7d98399228feb955c25497aa0e4a9e740d4e8cddb185" dependencies = [ "async-stream", + "aws-config", + "aws-sdk-cloudformation", + "aws-sdk-sts", + "aws-smithy-types-convert", "chrono", "enumset", "futures-util", "lazy_static", - "memmem", + "parse-display", "regex", - "rusoto_cloudformation", - "rusoto_core 0.46.0", - "rusoto_sts", - "serde", "serde_json", - "serde_plain", "tokio", ] @@ -285,6 +649,9 @@ version = "0.2.0" dependencies = [ "async_zip", "atty", + "aws-config", + "aws-sdk-s3", + "aws-types", "aws_sso_flow", "base64", "chrono", @@ -293,11 +660,8 @@ dependencies = [ "cloudformatious", "colored", "futures-util", + "hyper", "md5", - "rusoto_cloudformation", - "rusoto_core 0.46.0", - "rusoto_credential 0.46.0", - "rusoto_s3", "serde_json", "serde_yaml", "tempfile", @@ -322,12 +686,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" -[[package]] -name = "const_fn" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" - [[package]] name = "core-foundation" version = "0.9.3" @@ -353,6 +711,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32c" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfea2db42e9927a3845fb268a10a72faed6d416065f77873f05e411457c363e" +dependencies = [ + "rustc_version", +] + [[package]] name = "crc32fast" version = "1.3.2" @@ -373,23 +740,12 @@ dependencies = [ ] [[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.11.1" +name = "ct-logs" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8" dependencies = [ - "generic-array", - "subtle", + "sct", ] [[package]] @@ -426,22 +782,13 @@ dependencies = [ "syn", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" dependencies = [ - "block-buffer 0.10.3", + "block-buffer", "crypto-common", ] @@ -467,16 +814,10 @@ dependencies = [ ] [[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - -[[package]] -name = "dtoa" -version = "0.4.8" +name = "either" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "enumset" @@ -485,7 +826,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4799cdb24d48f1f8a7a98d06b7fde65a85a2d1e42b25a889f5406aa1fbefe074" dependencies = [ "enumset_derive", - "serde", ] [[package]] @@ -705,26 +1045,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac 0.11.1", - "digest 0.9.0", -] - [[package]] name = "http" version = "0.2.8" @@ -733,7 +1053,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 1.0.3", + "itoa", ] [[package]] @@ -774,7 +1094,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.3", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -783,6 +1103,23 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" +dependencies = [ + "ct-logs", + "futures-util", + "hyper", + "log", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", + "webpki", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -845,12 +1182,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.3" @@ -887,24 +1218,13 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "md-5" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "md-5" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66b48670c893079d3c2ed79114e3644b7004df1c361a4e0ad52e2e6940d07c3d" dependencies = [ - "digest 0.10.5", + "digest", ] [[package]] @@ -919,12 +1239,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" -[[package]] -name = "memmem" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" - [[package]] name = "miniz_oxide" version = "0.5.4" @@ -994,16 +1308,19 @@ dependencies = [ ] [[package]] -name = "once_cell" -version = "1.15.0" +name = "num_threads" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] [[package]] -name = "opaque-debug" -version = "0.3.0" +name = "once_cell" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "openssl" @@ -1056,12 +1373,56 @@ version = "6.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" +[[package]] +name = "parse-display" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b25af4ef94a8528b41fb49a696e361dc6ef975c782417268072d987ac327964" +dependencies = [ + "parse-display-derive", +] + +[[package]] +name = "parse-display-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f106cced1f4b645e3fca6125105cdf7407e35d1af710f290aac530f6b826b9" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "regex", + "regex-syntax", + "structmeta", + "syn", +] + [[package]] name = "percent-encoding" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -1104,300 +1465,117 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - [[package]] name = "proc-macro2" version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "rusoto_cloudformation" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc5757ff83d2673b8d0cce7567248c0b076f96fbac710f7fd4736bf31465245" -dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core 0.46.0", - "serde_urlencoded", - "xml-rs", -] - -[[package]] -name = "rusoto_core" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02aff20978970d47630f08de5f0d04799497818d16cafee5aec90c4b4d0806cf" -dependencies = [ - "async-trait", - "base64", - "bytes", - "crc32fast", - "futures", - "http", - "hyper", - "hyper-tls", - "lazy_static", - "log", - "rusoto_credential 0.46.0", - "rusoto_signature 0.46.0", - "rustc_version 0.2.3", - "serde", - "serde_json", - "tokio", - "xml-rs", -] - -[[package]] -name = "rusoto_core" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2" -dependencies = [ - "async-trait", - "base64", - "bytes", - "crc32fast", - "futures", - "http", - "hyper", - "hyper-tls", - "lazy_static", - "log", - "rusoto_credential 0.48.0", - "rusoto_signature 0.48.0", - "rustc_version 0.4.0", - "serde", - "serde_json", - "tokio", - "xml-rs", -] - -[[package]] -name = "rusoto_credential" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e91e4c25ea8bfa6247684ff635299015845113baaa93ba8169b9e565701b58e" -dependencies = [ - "async-trait", - "chrono", - "dirs-next", - "futures", - "hyper", - "serde", - "serde_json", - "shlex 0.1.1", - "tokio", - "zeroize", +dependencies = [ + "unicode-ident", ] [[package]] -name = "rusoto_credential" -version = "0.48.0" +name = "quote" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0a6c13db5aad6047b6a44ef023dbbc21a056b6dab5be3b79ce4283d5c02d05" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ - "async-trait", - "chrono", - "dirs-next", - "futures", - "hyper", - "serde", - "serde_json", - "shlex 1.1.0", - "tokio", - "zeroize", + "proc-macro2", ] [[package]] -name = "rusoto_s3" -version = "0.46.0" +name = "redox_syscall" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abc3f56f14ccf91f880b9a9c2d0556d8523e8c155041c54db155b384a1dd1119" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core 0.46.0", - "xml-rs", + "bitflags", ] [[package]] -name = "rusoto_signature" -version = "0.46.0" +name = "redox_users" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486e6b1673ab3e0ba1ded284fb444845fe1b7f41d13989a54dd60f62a7b2baa" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "base64", - "bytes", - "futures", - "hex", - "hmac 0.10.1", - "http", - "hyper", - "log", - "md5", - "percent-encoding", - "pin-project-lite", - "rusoto_credential 0.46.0", - "rustc_version 0.2.3", - "serde", - "sha2", - "time 0.2.27", - "tokio", + "getrandom", + "redox_syscall", + "thiserror", ] [[package]] -name = "rusoto_signature" -version = "0.48.0" +name = "regex" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ - "base64", - "bytes", - "chrono", - "digest 0.9.0", - "futures", - "hex", - "hmac 0.11.0", - "http", - "hyper", - "log", - "md-5 0.9.1", - "percent-encoding", - "pin-project-lite", - "rusoto_credential 0.48.0", - "rustc_version 0.4.0", - "serde", - "sha2", - "tokio", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "rusoto_sso" -version = "0.48.0" +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7990b60fc8a8986a42f7a3da70d93d851f48ddb96a591cbbd37e3d23afcca4e1" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core 0.48.0", - "serde", - "serde_derive", + "winapi", ] [[package]] -name = "rusoto_sso_oidc" -version = "0.48.0" +name = "ring" +version = "0.16.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f3d818b9e5123f27e9a48d50ef8f1b4a192b964fb348332a1582ad12e65f23" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core 0.48.0", - "serde", - "serde_derive", - "serde_json", + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", ] [[package]] -name = "rusoto_sts" -version = "0.46.0" +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f93005e0c3b9e40a424b50ca71886d2445cc19bb6cdac3ac84c2daff482eb59" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "async-trait", - "bytes", - "chrono", - "futures", - "rusoto_core 0.46.0", - "serde_urlencoded", - "xml-rs", + "semver", ] [[package]] -name = "rustc_version" -version = "0.2.3" +name = "rustls" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ - "semver 0.9.0", + "base64", + "log", + "ring", + "sct", + "webpki", ] [[package]] -name = "rustc_version" -version = "0.4.0" +name = "rustls-native-certs" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092" dependencies = [ - "semver 1.0.14", + "openssl-probe", + "rustls", + "schannel", + "security-framework", ] [[package]] @@ -1416,6 +1594,16 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "security-framework" version = "2.7.0" @@ -1439,27 +1627,12 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" version = "1.0.145" @@ -1486,32 +1659,11 @@ version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ - "itoa 1.0.3", + "itoa", "ryu", "serde", ] -[[package]] -name = "serde_plain" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625fb0da2b006092b426a94acc1611bec52f2ec27bb27b266a9f93c29ee38eda" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" -dependencies = [ - "dtoa", - "itoa 0.4.8", - "serde", - "url", -] - [[package]] name = "serde_yaml" version = "0.9.13" @@ -1519,7 +1671,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8613d593412a0deb7bbd8de9d908efff5a0cb9ccd8f62c641e7b2ed2f57291d1" dependencies = [ "indexmap", - "itoa 1.0.3", + "itoa", "ryu", "serde", "unsafe-libyaml", @@ -1527,51 +1679,24 @@ dependencies = [ [[package]] name = "sha1" -version = "0.6.1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ - "sha1_smol", + "cfg-if", + "cpufeatures", + "digest", ] -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - [[package]] name = "sha2" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "shlex" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" - -[[package]] -name = "shlex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", + "digest", ] [[package]] @@ -1594,75 +1719,40 @@ dependencies = [ ] [[package]] -name = "standback" -version = "0.2.17" +name = "spin" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "stdweb" -version = "0.4.20" +name = "strsim" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version 0.2.3", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] -name = "stdweb-derive" -version = "0.5.3" +name = "structmeta" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +checksum = "1bd9c2155aa89fb2c2cb87d99a610c689e7c47099b3e9f1c8a8f53faf4e3d2e3" dependencies = [ "proc-macro2", "quote", - "serde", - "serde_derive", + "structmeta-derive", "syn", ] [[package]] -name = "stdweb-internal-macros" -version = "0.2.9" +name = "structmeta-derive" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +checksum = "bafede0d0a2f21910f36d47b1558caae3076ed80f6f3ad0fc85a91e6ba7e5938" dependencies = [ - "base-x", "proc-macro2", "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", "syn", ] -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - [[package]] name = "syn" version = "1.0.100" @@ -1736,40 +1826,30 @@ dependencies = [ [[package]] name = "time" -version = "0.2.27" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +checksum = "0fab5c8b9980850e06d92ddbe3ab839c062c801f3927c0fb8abd6fc8e918fbca" dependencies = [ - "const_fn", "libc", - "standback", - "stdweb", + "num_threads", + "serde", + "time-core", "time-macros", - "version_check", - "winapi", ] [[package]] -name = "time-macros" -version = "0.1.1" +name = "time-core" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" [[package]] -name = "time-macros-impl" -version = "0.1.2" +name = "time-macros" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +checksum = "65bb801831d812c562ae7d2bfb531f26e66e4e1f6b17307ba4149c5064710e5b" dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn", + "time-core", ] [[package]] @@ -1800,7 +1880,6 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "signal-hook-registry", "socket2", "tokio-macros", "winapi", @@ -1827,6 +1906,28 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-stream" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.4" @@ -1841,6 +1942,28 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -1854,10 +1977,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ "cfg-if", + "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" version = "0.1.29" @@ -1906,6 +2042,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1e5fa573d8ac5f1a856f8d7be41d390ee973daf97c806b2c1a465e4e1406e68" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" version = "2.3.1" @@ -1917,6 +2059,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + [[package]] name = "vcpkg" version = "0.2.15" @@ -2005,6 +2153,26 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +[[package]] +name = "web-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2080,10 +2248,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] -name = "xml-rs" -version = "0.8.4" +name = "xmlparser" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8" [[package]] name = "zeroize" diff --git a/Cargo.toml b/Cargo.toml index ad7435f..467bfbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,21 +14,21 @@ path = "src/main.rs" [dependencies] async_zip = { version = "0.0.9", default-features = false, features = ["deflate"] } atty = "0.2.14" -aws_sso_flow = { version = "0.2.0", default-features = false, features = ["native-tls", "rusoto"] } +aws-config = { version = "0.49.0", default-features = false, features = ["client-hyper", "native-tls", "rt-tokio"] } +aws-sdk-s3 = { version = "0.19", default-features = false, features = ["native-tls", "rt-tokio"] } +aws-types = "0.49.0" +aws_sso_flow = { version = "0.3.1", default-features = false, features = ["aws-sdk", "native-tls"] } base64 = "0.13.0" chrono = { version = "0.4.22", default-features = false } clap = { version = "3.2.20", features = ["derive", "env"] } clap_complete = "3.2.4" -cloudformatious = "0.1.0" +cloudformatious = "0.2.0" colored = "2.0.0" futures-util = "0.3.24" +hyper = { version = "0.14.20", features = ["stream"] } md5 = "0.7.0" -rusoto_cloudformation = "0.46.0" -rusoto_core = "0.46.0" -rusoto_credential = "0.46.0" -rusoto_s3 = "0.46.0" serde_json = "1.0.85" serde_yaml = "0.9.13" tempfile = "3.3.0" -tokio = { version = "1.21.0", features = ["fs", "io-std", "io-util", "macros"] } +tokio = { version = "1.21.0", features = ["fs", "io-std", "io-util", "macros", "rt-multi-thread"] } tokio-util = { version = "0.7.4", features = ["codec"] } diff --git a/src/client.rs b/src/client.rs index c8f3439..f61835c 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,59 +1,32 @@ -use std::{env, fmt, time::Duration}; - -use rusoto_core::{HttpClient, Region}; -use rusoto_credential::{ - AutoRefreshingProvider, ChainProvider, ProfileProvider, ProvideAwsCredentials as _, -}; - -use crate::Error; - -const MISSING_REGION: &str = "Unable CompletionsArgs, DeleteStack -You can set it in your profile, assign `AWS_REGION`, or supply `--region`."; - -pub async fn get_client( - ctor: impl FnOnce(HttpClient, AutoRefreshingProvider, Region) -> C, - region: Option, -) -> Result { - let region = region - .map(Ok) - .or_else(get_region) - .ok_or_else(|| Error::other(MISSING_REGION))? - .map_err(Error::other)?; - let client = HttpClient::new().map_err(Error::other)?; - - let mut credentials = ChainProvider::new(); - credentials.set_timeout(Duration::from_secs(1)); - - let credentials = - AutoRefreshingProvider::new(aws_sso_flow::ChainProvider::new().push(credentials).push( - aws_sso_flow::SsoFlow::builder().verification_prompt(|url| async move { - if atty::is(atty::Stream::Stdin) && atty::is(atty::Stream::Stdout) { - eprintln!("Using SSO an profile – go to {url} to authenticate"); - Ok(()) - } else { - Err(NonInteractiveSsoError) - } - }), - )) - .map_err(Error::other)?; - - // Proactively fetch credentials so we get earlier errors. - credentials.credentials().await.map_err(Error::other)?; +use std::fmt; + +use aws_config::{meta::credentials::CredentialsProviderChain, SdkConfig}; +use aws_types::region::Region; + +pub async fn get_config(region: Option) -> SdkConfig { + let sso = aws_sso_flow::SsoFlow::builder().verification_prompt(|url| async move { + if atty::is(atty::Stream::Stdin) && atty::is(atty::Stream::Stdout) { + eprintln!("Using SSO an profile – go to {url} to authenticate"); + Ok(()) + } else { + Err(NonInteractiveSsoError) + } + }); + let credentials = CredentialsProviderChain::first_try("SsoFlow", sso) + .or_default_provider() + .await; + + let mut config = aws_config::from_env().credentials_provider(credentials); + if let Some(region) = region { + config = config.region(region); + } - Ok(ctor(client, credentials, region)) + config.load().await } -fn get_region() -> Option>> { - // rusoto_cloudformation::Region::default implements a similar algorithm but falls back to - // us-east-1, which we don't want. - match env::var("AWS_DEFAULT_REGION").or_else(|_| env::var("AWS_REGION")) { - Ok(region) => Some(region.parse().map_err(Into::into)), - Err(_) => match ProfileProvider::region() { - Ok(Some(region)) => Some(region.parse().map_err(Into::into)), - Ok(None) => None, - Err(error) => Some(Err(error.into())), - }, - } +pub async fn get_client(ctor: impl FnOnce(&SdkConfig) -> C, region: Option) -> C { + let config = get_config(region).await; + ctor(&config) } #[derive(Debug)] diff --git a/src/command.rs b/src/command.rs index b9e4696..4c28b21 100644 --- a/src/command.rs +++ b/src/command.rs @@ -3,7 +3,7 @@ mod completions; mod delete_stack; mod package; -use rusoto_core::Region; +use aws_types::region::Region; use crate::Error; diff --git a/src/command/apply_stack.rs b/src/command/apply_stack.rs index 9b825e0..cd8fae4 100644 --- a/src/command/apply_stack.rs +++ b/src/command/apply_stack.rs @@ -1,12 +1,12 @@ use std::{collections::HashMap, convert::TryInto, ffi::OsStr, fmt, path::PathBuf, str::FromStr}; +use aws_types::region::Region; use cloudformatious::{ - ApplyStackError, ApplyStackInput, Capability, CloudFormatious as _, Parameter, TemplateSource, + self, ApplyStackError, ApplyStackInput, Capability, Parameter, Tag, TemplateSource, }; -use rusoto_cloudformation::{CloudFormationClient, Tag}; -use rusoto_core::Region; use crate::{ + client::get_config, fmt::{print_events, Sizing}, package, s3, template, Error, Template, }; @@ -145,7 +145,8 @@ pub async fn main(region: Option, args: Args) -> Result<(), Error> { let mut template = Template::open(args.template_path.clone()).await?; preprocess(region.as_ref(), &args, &mut template).await?; - let client = crate::get_client(CloudFormationClient::new_with, region).await?; + let config = get_config(region).await; + let client = cloudformatious::Client::new(&config); let mut apply = client.apply_stack(args.into_input(&template)); let change_set = apply.change_set().await.map_err(Error::other)?; @@ -200,7 +201,7 @@ async fn preprocess( ))); }; - let client = s3::Client::new(region.cloned()).await?; + let client = s3::Client::new(region.cloned()).await; package::process( &client, diff --git a/src/command/delete_stack.rs b/src/command/delete_stack.rs index d85ba0a..9e116e4 100644 --- a/src/command/delete_stack.rs +++ b/src/command/delete_stack.rs @@ -4,12 +4,11 @@ use std::{ path::PathBuf, }; -use cloudformatious::{CloudFormatious as _, DeleteStackError, DeleteStackInput}; -use rusoto_cloudformation::CloudFormationClient; -use rusoto_core::Region; +use aws_types::region::Region; +use cloudformatious::{self, DeleteStackError, DeleteStackInput}; use crate::{ - client::get_client, + client::get_config, fmt::{print_events, Sizing}, Error, }; @@ -101,7 +100,8 @@ impl TryFrom for DeleteStackInput { pub async fn main(region: Option, args: Args) -> Result<(), Error> { let quiet = args.quiet; - let client = get_client(CloudFormationClient::new_with, region).await?; + let config = get_config(region).await; + let client = cloudformatious::Client::new(&config); let mut delete = client.delete_stack(args.try_into()?); let sizing = Sizing::default(); diff --git a/src/command/package.rs b/src/command/package.rs index e67062f..25add7b 100644 --- a/src/command/package.rs +++ b/src/command/package.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use rusoto_core::Region; +use aws_types::region::Region; use crate::{package, s3, Error, Template}; @@ -30,7 +30,7 @@ pub struct Args { } pub async fn main(region: Option, args: Args) -> Result<(), Error> { - let client = s3::Client::new(region).await?; + let client = s3::Client::new(region).await; let mut template = Template::open(args.template_path).await?; let targets = package::targets(&mut template); diff --git a/src/main.rs b/src/main.rs index 9169493..f2d0539 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,12 +6,12 @@ mod package; mod s3; mod template; -use std::process; +use std::{convert::Infallible, process}; +use aws_types::region::Region; use clap::Parser; -use rusoto_core::Region; -use self::{client::get_client, error::Error, template::Template}; +use self::{error::Error, template::Template}; /// A CloudFormation CLI that won't make you cry. /// @@ -23,7 +23,7 @@ use self::{client::get_client, error::Error, template::Template}; #[clap(name = "cloudformatious")] struct Args { /// The region to use. Overrides config/env settings. - #[clap(long, env = "AWS_REGION")] + #[clap(long, env = "AWS_REGION", value_parser = parse_region)] region: Option, #[clap(subcommand)] @@ -43,3 +43,7 @@ async fn main() { }); } } + +fn parse_region(region: &str) -> Result { + Ok(Region::new(region.to_owned())) +} diff --git a/src/s3.rs b/src/s3.rs index adf862b..4f12136 100644 --- a/src/s3.rs +++ b/src/s3.rs @@ -1,8 +1,7 @@ use std::{convert::TryInto, path::Path}; +use aws_types::region::Region; use futures_util::{StreamExt, TryStreamExt}; -use rusoto_core::Region; -use rusoto_s3::{HeadObjectRequest, PutObjectRequest, S3Client, S3}; use tokio::{ fs::File, io::{AsyncSeekExt, BufReader}, @@ -12,13 +11,13 @@ use tokio_util::codec::{BytesCodec, FramedRead}; use crate::{client::get_client, Error}; pub struct Client { - inner: rusoto_s3::S3Client, + inner: aws_sdk_s3::Client, } impl Client { - pub async fn new(region: Option) -> Result { - let inner = get_client(S3Client::new_with, region).await?; - Ok(Self { inner }) + pub async fn new(region: Option) -> Self { + let inner = get_client(aws_sdk_s3::Client::new, region).await; + Self { inner } } pub async fn upload<'a>(&self, request: UploadRequest<'a>) -> Result { @@ -47,18 +46,17 @@ impl Client { let exists = self .inner - .head_object(HeadObjectRequest { - bucket: request.bucket.to_owned(), - key: key.clone(), - ..Default::default() - }) + .head_object() + .bucket(request.bucket) + .key(&key) + .send() .await .map(|_| true) .or_else({ let bucket = &request.bucket; let key = &key; move |error| match error { - rusoto_core::RusotoError::Unknown(res) if res.status.as_u16() == 404 => { + aws_sdk_s3::types::SdkError::ServiceError { err, .. } if err.is_not_found() => { Ok(false) } error => Err(Error::other(format!( @@ -75,21 +73,17 @@ impl Client { .await .map_err(|error| Error::other(format!("couldn't read upload package: {error}")))?; + let body = + hyper::Body::wrap_stream(FramedRead::new(BufReader::new(file), BytesCodec::new())); + self.inner - .put_object(PutObjectRequest { - body: Some(rusoto_s3::StreamingBody::new_with_size( - FramedRead::new(BufReader::new(file), BytesCodec::new()) - .map_ok(|chunk| chunk.freeze()), - meta.len() - .try_into() - .expect("file is too large for platform"), - )), - bucket: request.bucket.to_owned(), - content_length: Some(meta.len().try_into().expect("file is insanely large")), - content_md5: Some(base64::encode(&content_md5.0)), - key: key.clone(), - ..Default::default() - }) + .put_object() + .body(body.into()) + .bucket(request.bucket) + .content_length(meta.len().try_into().expect("file is insanely large")) + .content_md5(base64::encode(&content_md5.0)) + .key(&key) + .send() .await .map_err(|error| { Error::other(format!(