From 88555860f3bf86eac67621818e370373088b5dd0 Mon Sep 17 00:00:00 2001 From: Antonio Yang Date: Thu, 13 Aug 2020 01:20:22 +0800 Subject: [PATCH] Fetch content from S3 (#2328) * fetch content from s3 resource * remove submodule * fix clippy * update Cargo.lock * fix s3 plugin dependency version --- Cargo.lock | 1508 ++++++++++++++++++++++++---- Cargo.toml | 9 +- crates/nu_plugin_s3/Cargo.toml | 20 + crates/nu_plugin_s3/README.md | 9 + crates/nu_plugin_s3/demo.png | Bin 0 -> 81084 bytes crates/nu_plugin_s3/src/handler.rs | 134 +++ crates/nu_plugin_s3/src/lib.rs | 4 + crates/nu_plugin_s3/src/main.rs | 6 + crates/nu_plugin_s3/src/nu/mod.rs | 60 ++ src/plugins/nu_plugin_stable_s3.rs | 6 + 10 files changed, 1565 insertions(+), 191 deletions(-) create mode 100644 crates/nu_plugin_s3/Cargo.toml create mode 100644 crates/nu_plugin_s3/README.md create mode 100644 crates/nu_plugin_s3/demo.png create mode 100644 crates/nu_plugin_s3/src/handler.rs create mode 100644 crates/nu_plugin_s3/src/lib.rs create mode 100644 crates/nu_plugin_s3/src/main.rs create mode 100644 crates/nu_plugin_s3/src/nu/mod.rs create mode 100644 src/plugins/nu_plugin_stable_s3.rs diff --git a/Cargo.lock b/Cargo.lock index 70be66529..7550e7f7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,6 +21,15 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "aho-corasick" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" +dependencies = [ + "memchr", +] + [[package]] name = "aho-corasick" version = "0.7.13" @@ -71,9 +80,9 @@ checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" [[package]] name = "app_dirs2" -version = "2.2.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61912c7296ce152237814d106efbd66d9ab7df35c42581ea3341eb38ecc6cefc" +checksum = "a213127e3ec94ab7b7397a23ca4649c0494b8ed576b3fcf834a6569bde87512e" dependencies = [ "jni", "ndk-glue", @@ -159,13 +168,13 @@ dependencies = [ "futures-core", "futures-io", "kv-log-macro", - "log", + "log 0.4.11", "memchr", "num_cpus", "once_cell", "pin-project-lite", "pin-utils", - "slab", + "slab 0.4.2", "smol", "wasm-bindgen-futures 0.4.17", ] @@ -200,12 +209,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93610ce1c035e8a273fe56a19852e42798f3c019ca2726e52d2971197f116525" dependencies = [ "http 0.2.1", - "log", + "log 0.4.11", "native-tls", "openssl", - "serde 1.0.114", - "serde_urlencoded", - "url", + "serde 1.0.115", + "serde_urlencoded 0.6.1", + "url 2.1.1", ] [[package]] @@ -219,6 +228,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "autocfg" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" + [[package]] name = "autocfg" version = "1.0.0" @@ -239,6 +254,35 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" +dependencies = [ + "byteorder", + "safemem 0.2.0", +] + +[[package]] +name = "base64" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" +dependencies = [ + "byteorder", + "safemem 0.3.3", +] + +[[package]] +name = "base64" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" +dependencies = [ + "byteorder", +] + [[package]] name = "base64" version = "0.11.0" @@ -272,7 +316,7 @@ dependencies = [ "liquid", "path_abs", "semver 0.9.0", - "serde 1.0.114", + "serde 1.0.115", "serde_yaml", "shell-words", "syntect", @@ -306,7 +350,7 @@ dependencies = [ "num-bigint", "num-integer", "num-traits 0.2.12", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -316,7 +360,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" dependencies = [ "byteorder", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -357,6 +401,16 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[package]] +name = "block-buffer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1339a1042f5d9f295737ad4d9a6ab6bf81c84a933dba110b9200cd6d1448b814" +dependencies = [ + "byte-tools 0.2.0", + "generic-array 0.8.3", +] + [[package]] name = "block-buffer" version = "0.7.3" @@ -364,7 +418,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ "block-padding", - "byte-tools", + "byte-tools 0.3.1", "byteorder", "generic-array 0.12.3", ] @@ -375,7 +429,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.3", + "generic-array 0.14.4", ] [[package]] @@ -384,7 +438,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools", + "byte-tools 0.3.1", ] [[package]] @@ -413,9 +467,9 @@ dependencies = [ "hex 0.3.2", "libc", "linked-hash-map 0.5.3", - "md5", - "rand", - "serde 1.0.114", + "md5 0.6.1", + "rand 0.7.3", + "serde 1.0.115", "serde_json", "time", ] @@ -429,7 +483,7 @@ dependencies = [ "lazy_static 1.4.0", "memchr", "regex-automata", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -438,6 +492,12 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +[[package]] +name = "byte-tools" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" + [[package]] name = "byte-tools" version = "0.3.1" @@ -463,6 +523,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ "byteorder", + "either", "iovec", ] @@ -508,9 +569,9 @@ dependencies = [ "byteorder", "codepage", "encoding_rs", - "log", + "log 0.4.11", "quick-xml 0.17.2", - "serde 1.0.114", + "serde 1.0.115", "zip", ] @@ -543,7 +604,7 @@ checksum = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6" dependencies = [ "num-integer", "num-traits 0.2.12", - "serde 1.0.114", + "serde 1.0.115", "time", ] @@ -559,9 +620,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.1" +version = "2.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" +checksum = "10040cdf04294b565d9e0319955430099ec3813a64c952b86a41200ad714ae48" dependencies = [ "ansi_term 0.11.0", "atty", @@ -628,11 +689,22 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e0762455306b1ed42bc651ef6a2197aabda5e1d4a43c34d5eab5c1a3634e81d" dependencies = [ - "serde 1.0.114", + "serde 1.0.115", "termcolor", "unicode-width", ] +[[package]] +name = "colored" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" +dependencies = [ + "atty", + "lazy_static 1.4.0", + "winapi 0.3.9", +] + [[package]] name = "combine" version = "3.8.1" @@ -648,9 +720,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e296417c8154304ac70aceda41f05318f986f7c0c767bcb0a2366fbb890e78e1" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" dependencies = [ "cache-padded", ] @@ -664,7 +736,7 @@ dependencies = [ "lazy_static 1.4.0", "nom 4.2.3", "rust-ini", - "serde 1.0.114", + "serde 1.0.115", "serde-hjson 0.8.2", "serde_json", "toml 0.4.10", @@ -680,7 +752,7 @@ dependencies = [ "encode_unicode", "lazy_static 1.4.0", "libc", - "regex", + "regex 1.3.9", "terminal_size", "termios", "unicode-width", @@ -703,6 +775,34 @@ dependencies = [ "memchr", ] +[[package]] +name = "cookie" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" +dependencies = [ + "time", + "url 1.7.2", +] + +[[package]] +name = "cookie_store" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" +dependencies = [ + "cookie", + "failure", + "idna 0.1.5", + "log 0.4.11", + "publicsuffix", + "serde 1.0.115", + "serde_json", + "time", + "try_from", + "url 1.7.2", +] + [[package]] name = "core-foundation" version = "0.6.4" @@ -776,7 +876,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ - "autocfg", + "autocfg 1.0.0", "cfg-if", "crossbeam-utils 0.7.2", "lazy_static 1.4.0", @@ -812,7 +912,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg", + "autocfg 1.0.0", "cfg-if", "lazy_static 1.4.0", ] @@ -827,7 +927,7 @@ dependencies = [ "crossterm_winapi", "lazy_static 1.4.0", "libc", - "mio", + "mio 0.7.0", "parking_lot 0.10.2", "signal-hook", "winapi 0.3.9", @@ -842,6 +942,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "crypto-mac" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779015233ac67d65098614aec748ac1c756ab6677fa2e14cf8b37c08dfed1198" +dependencies = [ + "constant_time_eq", + "generic-array 0.8.3", +] + [[package]] name = "csv" version = "1.1.3" @@ -852,7 +962,7 @@ dependencies = [ "csv-core", "itoa", "ryu", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -901,9 +1011,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.33+curl-7.71.1" +version = "0.4.34+curl-7.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9818ea018327f79c811612f29b9834d2abddbe7db81460a2d5c7e12946b337" +checksum = "ad4eff0be6985b7e709f64b5a541f700e9ad1407190a29f4884319eb663ed1d6" dependencies = [ "cc", "libc", @@ -978,6 +1088,15 @@ dependencies = [ "syn", ] +[[package]] +name = "digest" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5b29bf156f3f4b3c4f610a25ff69370616ae6e0657d416de22645483e72af0a" +dependencies = [ + "generic-array 0.8.3", +] + [[package]] name = "digest" version = "0.8.1" @@ -993,7 +1112,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.3", + "generic-array 0.14.4", ] [[package]] @@ -1102,9 +1221,9 @@ checksum = "b2641c4a7c0c4101df53ea572bffdc561c146f6c2eb09e4df02bc4811e3feeb4" [[package]] name = "either" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" +checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" [[package]] name = "eml-parser" @@ -1112,7 +1231,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9e30d14e24cd200f2351837a02feacf8f043410f2a56441868c93ef33f90239" dependencies = [ - "regex", + "regex 1.3.9", ] [[package]] @@ -1202,8 +1321,8 @@ checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" dependencies = [ "atty", "humantime", - "log", - "regex", + "log 0.4.11", + "regex 1.3.9", "termcolor", ] @@ -1213,14 +1332,14 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ca8b296792113e1500fd935ae487be6e00ce318952a6880555554824d6ebf38" dependencies = [ - "serde 1.0.114", + "serde 1.0.115", ] [[package]] name = "error-chain" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be51ed50e75656c17216bdd4326914466db0c91b9b246b12962a00284d06566b" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" dependencies = [ "backtrace", "version_check 0.9.2", @@ -1228,9 +1347,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.3.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298f00c3b04c1d9b4cb86aefaaa35348af0957d98b30a5306fc635f8e718923d" +checksum = "7f14646a9e0430150a87951622ba9675472b68e384b7701b8423b30560805c7a" [[package]] name = "failure" @@ -1279,14 +1398,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae91abf6555234338687bb47913978d275539235fcb77ba9863b779090b42b14" dependencies = [ "bit-set", - "regex", + "regex 1.3.9", ] [[package]] name = "fastrand" -version = "1.3.3" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a9cb09840f81cd211e435d00a4e487edd263dc3c8ff815c32dd76ad668ebed" +checksum = "4bd3bdaaf0a72155260a1c098989b60db1cbb22d6a628e64f16237aa4da93cc7" [[package]] name = "filesize" @@ -1336,6 +1455,28 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + [[package]] name = "futures" version = "0.1.29" @@ -1389,6 +1530,16 @@ version = "0.3.0-alpha.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35b6263fb1ef523c3056565fa67b1d16f0a8604ff12b11b08c25f28a734c60a" +[[package]] +name = "futures-cpupool" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" +dependencies = [ + "futures 0.1.29", + "num_cpus", +] + [[package]] name = "futures-executor" version = "0.3.5" @@ -1509,7 +1660,7 @@ dependencies = [ "pin-utils", "proc-macro-hack", "proc-macro-nested", - "slab", + "slab 0.4.2", "tokio-io", ] @@ -1526,7 +1677,7 @@ dependencies = [ "futures-sink-preview", "memchr", "pin-utils", - "slab", + "slab 0.4.2", "tokio-io", ] @@ -1542,6 +1693,22 @@ dependencies = [ "pin-project", ] +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fceb69994e330afed50c93524be68c42fa898c2d9fd4ee8da03bd7363acd26f2" +dependencies = [ + "nodrop", + "typenum", +] + [[package]] name = "generic-array" version = "0.12.3" @@ -1553,9 +1720,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60fb4bb6bba52f78a471264d9a3b7d026cc0af47b22cd2cffbc0b787ca003e63" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", "version_check 0.9.2", @@ -1620,8 +1787,8 @@ dependencies = [ "bitflags", "libc", "libgit2-sys", - "log", - "url", + "log 0.4.11", + "url 2.1.1", ] [[package]] @@ -1636,20 +1803,38 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.13", "bstr", "fnv", - "log", - "regex", + "log 0.4.11", + "regex 1.3.9", +] + +[[package]] +name = "h2" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" +dependencies = [ + "byteorder", + "bytes 0.4.12", + "fnv", + "futures 0.1.29", + "http 0.1.21", + "indexmap", + "log 0.4.11", + "slab 0.4.2", + "string", + "tokio-io", ] [[package]] name = "hashbrown" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34f595585f103464d8d2f6e9864682d74c1601fed5e07d62b1c9058dba8246fb" +checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" dependencies = [ - "autocfg", + "autocfg 1.0.0", ] [[package]] @@ -1735,7 +1920,7 @@ dependencies = [ "heim-runtime", "lazy_static 1.4.0", "libc", - "log", + "log 0.4.11", "mach 0.3.2", "ntapi", "platforms", @@ -1841,6 +2026,26 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" +[[package]] +name = "hmac" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a13f4163aa0c5ca1be584aace0e2212b2e41be5478218d4f657f5f778b2ae2a" +dependencies = [ + "crypto-mac", + "digest 0.6.2", + "generic-array 0.8.3", +] + +[[package]] +name = "hmac-sha1" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1333fad8d94b82cab989da428b0b36a3435db3870d85e971a1d6dc0a8576722" +dependencies = [ + "sha1", +] + [[package]] name = "htmlescape" version = "0.3.1" @@ -1869,6 +2074,24 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "http 0.1.21", + "tokio-buf", +] + +[[package]] +name = "httparse" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" + [[package]] name = "humantime" version = "1.3.0" @@ -1878,6 +2101,76 @@ dependencies = [ "quick-error", ] +[[package]] +name = "hyper" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34a590ca09d341e94cddf8e5af0bbccde205d5fbc2fa3c09dd67c7f85cea59d7" +dependencies = [ + "base64 0.9.3", + "bytes 0.4.12", + "futures 0.1.29", + "futures-cpupool", + "httparse", + "iovec", + "language-tags", + "log 0.4.11", + "mime", + "net2", + "percent-encoding 1.0.1", + "relay", + "time", + "tokio-core", + "tokio-io", + "tokio-proto", + "tokio-service", + "unicase", + "want 0.0.4", +] + +[[package]] +name = "hyper" +version = "0.12.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "futures-cpupool", + "h2", + "http 0.1.21", + "http-body", + "httparse", + "iovec", + "itoa", + "log 0.4.11", + "net2", + "rustc_version", + "time", + "tokio", + "tokio-buf", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "want 0.2.0", +] + +[[package]] +name = "hyper-tls" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "hyper 0.12.35", + "native-tls", + "tokio-io", +] + [[package]] name = "ical" version = "0.6.0" @@ -1899,6 +2192,17 @@ dependencies = [ "thiserror", ] +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "idna" version = "0.2.0" @@ -1926,13 +2230,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b88cd59ee5f71fea89a62248fc8f387d44400cefe05ef548466d61ced9029a7" +checksum = "86b45e59b16c76b11bf9738fd5d38879d3bd28ad292d7b313608becb17ae2df9" dependencies = [ - "autocfg", + "autocfg 1.0.0", "hashbrown", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -1952,9 +2256,9 @@ checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485" [[package]] name = "inventory" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621b50c176968fd3b0bd71f821a28a0ea98db2b5aea966b2fbb8bd1b7d310328" +checksum = "49c68da9c8b1bda33dc6f55b2a9b4f44eca5ba2b2a1a308eab40db9fb7e200cb" dependencies = [ "ctor", "ghost", @@ -1963,9 +2267,9 @@ dependencies = [ [[package]] name = "inventory-impl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f99a4111304bade76468d05beab3487c226e4fe4c4de1c4e8f006e815762db73" +checksum = "4143007b389ae51577282e3c95cf5a7ae0c9e06cafa927508300ceedcbc0354c" dependencies = [ "proc-macro2", "quote", @@ -1996,8 +2300,8 @@ dependencies = [ "futures-util-preview", "http 0.1.21", "lazy_static 1.4.0", - "log", - "slab", + "log 0.4.11", + "slab 0.4.2", "sluice", ] @@ -2038,7 +2342,7 @@ dependencies = [ "combine", "error-chain", "jni-sys", - "log", + "log 0.4.11", "walkdir", ] @@ -2075,13 +2379,23 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + [[package]] name = "kstring" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1eac31d8e24111621ee7d60b4bc8c3da32925f7606dd8c26a3f789db82a23405" dependencies = [ - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -2090,9 +2404,15 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" dependencies = [ - "log", + "log 0.4.11", ] +[[package]] +name = "language-tags" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" + [[package]] name = "lazy_static" version = "0.2.11" @@ -2107,9 +2427,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "lexical-core" @@ -2181,7 +2501,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" dependencies = [ - "safemem", + "safemem 0.3.3", ] [[package]] @@ -2211,7 +2531,7 @@ dependencies = [ "liquid-core", "liquid-derive", "liquid-lib", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -2228,7 +2548,7 @@ dependencies = [ "num-traits 0.2.12", "pest", "pest_derive", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -2253,8 +2573,8 @@ dependencies = [ "kstring", "liquid-core", "once_cell", - "percent-encoding", - "regex", + "percent-encoding 2.1.0", + "regex 1.3.9", "unicode-segmentation", ] @@ -2276,6 +2596,15 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +dependencies = [ + "log 0.4.11", +] + [[package]] name = "log" version = "0.4.11" @@ -2345,6 +2674,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +[[package]] +name = "md5" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79c56d6a0b07f9e19282511c83fc5b086364cbae4ba8c7d5f190c3d9b0425a48" + [[package]] name = "md5" version = "0.6.1" @@ -2363,7 +2698,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" dependencies = [ - "autocfg", + "autocfg 1.0.0", ] [[package]] @@ -2401,6 +2736,25 @@ dependencies = [ "adler", ] +[[package]] +name = "mio" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" +dependencies = [ + "cfg-if", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log 0.4.11", + "miow 0.2.1", + "net2", + "slab 0.4.2", + "winapi 0.2.8", +] + [[package]] name = "mio" version = "0.7.0" @@ -2409,12 +2763,35 @@ checksum = "6e9971bc8349a361217a8f2a41f5d011274686bd4436465ba51730921039d7fb" dependencies = [ "lazy_static 1.4.0", "libc", - "log", - "miow", + "log 0.4.11", + "miow 0.3.5", "ntapi", "winapi 0.3.9", ] +[[package]] +name = "mio-uds" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" +dependencies = [ + "iovec", + "libc", + "mio 0.6.22", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + [[package]] name = "miow" version = "0.3.5" @@ -2433,7 +2810,7 @@ checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" dependencies = [ "lazy_static 1.4.0", "libc", - "log", + "log 0.4.11", "openssl", "openssl-probe", "openssl-sys", @@ -2472,7 +2849,7 @@ dependencies = [ "android_log-sys", "lazy_static 1.4.0", "libc", - "log", + "log 0.4.11", "ndk", "ndk-sys", ] @@ -2491,12 +2868,23 @@ checksum = "6b3c31defbcb081163db18437fd88c2a267cb3e26f7bd5e4b186e4b1b38fe8c8" dependencies = [ "bincode", "cfg-if", - "log", - "serde 1.0.114", + "log 0.4.11", + "serde 1.0.115", "serde_derive", "wasm-bindgen", ] +[[package]] +name = "net2" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" +dependencies = [ + "cfg-if", + "libc", + "winapi 0.3.9", +] + [[package]] name = "nix" version = "0.15.0" @@ -2574,7 +2962,7 @@ dependencies = [ "ctrlc", "dunce", "futures 0.3.5", - "log", + "log 0.4.11", "nu-cli", "nu-errors", "nu-parser", @@ -2591,6 +2979,7 @@ dependencies = [ "nu_plugin_match", "nu_plugin_post", "nu_plugin_ps", + "nu_plugin_s3", "nu_plugin_start", "nu_plugin_sys", "nu_plugin_textview", @@ -2600,11 +2989,11 @@ dependencies = [ "pretty_env_logger", "quick-xml 0.18.1", "semver 0.10.0", - "serde 1.0.114", + "serde 1.0.115", "starship", "syntect", "toml 0.5.6", - "url", + "url 2.1.1", ] [[package]] @@ -2646,7 +3035,7 @@ dependencies = [ "ichwh", "indexmap", "itertools", - "log", + "log 0.4.11", "meval", "natural", "nu-errors", @@ -2669,21 +3058,21 @@ dependencies = [ "quick-xml 0.18.1", "quickcheck", "quickcheck_macros", - "rand", + "rand 0.7.3", "rayon", - "regex", + "regex 1.3.9", "roxmltree", "rusqlite", "rust-embed", "rustyline", - "serde 1.0.114", + "serde 1.0.115", "serde-hjson 0.9.1", "serde_bytes", "serde_ini", "serde_json", - "serde_urlencoded", + "serde_urlencoded 0.6.1", "serde_yaml", - "sha2", + "sha2 0.9.1", "shellexpand", "starship", "strip-ansi-escapes", @@ -2696,9 +3085,9 @@ dependencies = [ "typetag", "umask", "unicode-xid", - "url", + "url 2.1.1", "users", - "uuid", + "uuid 0.8.1", "which", "zip", ] @@ -2716,7 +3105,7 @@ dependencies = [ "nu-source", "num-bigint", "num-traits 0.2.12", - "serde 1.0.114", + "serde 1.0.115", "serde_json", "serde_yaml", "toml 0.5.6", @@ -2730,14 +3119,14 @@ dependencies = [ "codespan-reporting", "derive-new", "indexmap", - "log", + "log 0.4.11", "nu-errors", "nu-protocol", "nu-source", "num-bigint", "num-traits 0.2.12", "parking_lot 0.11.0", - "serde 1.0.114", + "serde 1.0.115", "shellexpand", ] @@ -2752,7 +3141,7 @@ dependencies = [ "nu-source", "nu-value-ext", "num-bigint", - "serde 1.0.114", + "serde 1.0.115", "serde_json", ] @@ -2769,7 +3158,7 @@ dependencies = [ "getset", "indexmap", "itertools", - "log", + "log 0.4.11", "natural", "nu-errors", "nu-source", @@ -2777,7 +3166,7 @@ dependencies = [ "num-integer", "num-traits 0.2.12", "query_interface", - "serde 1.0.114", + "serde 1.0.115", "serde_bytes", "serde_json", "serde_yaml", @@ -2793,7 +3182,7 @@ dependencies = [ "derive-new", "getset", "pretty", - "serde 1.0.114", + "serde 1.0.115", "termcolor", ] @@ -2860,7 +3249,7 @@ dependencies = [ "nu-protocol", "nu-source", "surf", - "url", + "url 2.1.1", ] [[package]] @@ -2913,7 +3302,7 @@ dependencies = [ "nu-plugin", "nu-protocol", "nu-source", - "regex", + "regex 1.3.9", ] [[package]] @@ -2929,7 +3318,7 @@ dependencies = [ "num-traits 0.2.12", "serde_json", "surf", - "url", + "url 2.1.1", ] [[package]] @@ -2945,6 +3334,18 @@ dependencies = [ "nu-source", ] +[[package]] +name = "nu_plugin_s3" +version = "0.18.1" +dependencies = [ + "futures 0.3.5", + "nu-errors", + "nu-plugin", + "nu-protocol", + "nu-source", + "s3handler", +] + [[package]] name = "nu_plugin_start" version = "0.18.1" @@ -2955,7 +3356,7 @@ dependencies = [ "nu-protocol", "nu-source", "open", - "url", + "url 2.1.1", ] [[package]] @@ -2987,7 +3388,7 @@ dependencies = [ "nu-source", "syntect", "term_size", - "url", + "url 2.1.1", ] [[package]] @@ -3050,10 +3451,10 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg", + "autocfg 1.0.0", "num-integer", "num-traits 0.2.12", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -3062,7 +3463,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ - "autocfg", + "autocfg 1.0.0", "num-traits 0.2.12", ] @@ -3083,7 +3484,7 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ - "autocfg", + "autocfg 1.0.0", "num-traits 0.2.12", ] @@ -3093,7 +3494,7 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" dependencies = [ - "autocfg", + "autocfg 1.0.0", "num-integer", "num-traits 0.2.12", ] @@ -3104,7 +3505,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg", + "autocfg 1.0.0", "num-bigint", "num-integer", "num-traits 0.2.12", @@ -3125,7 +3526,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ - "autocfg", + "autocfg 1.0.0", ] [[package]] @@ -3270,7 +3671,7 @@ version = "0.9.58" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" dependencies = [ - "autocfg", + "autocfg 1.0.0", "cc", "libc", "pkg-config", @@ -3294,12 +3695,12 @@ checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" [[package]] name = "os_info" -version = "2.0.7" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b045a2b6649afa9234ff4f40f84b2ea6e9bdc1a370ad9c03830c597b435953" +checksum = "d2cc1b4330bb29087e791ae2a5cf56be64fb8946a4ff5aec2ba11c6ca51f5d60" dependencies = [ - "log", - "serde 1.0.114", + "log 0.4.11", + "serde 1.0.115", "winapi 0.3.9", ] @@ -3309,6 +3710,17 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6cb300f271742d4a2a66c01b6b2fa0c83dfebd2e0bf11addb879a3547b4ed87c" +[[package]] +name = "parking_lot" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" +dependencies = [ + "lock_api 0.3.4", + "parking_lot_core 0.6.2", + "rustc_version", +] + [[package]] name = "parking_lot" version = "0.10.2" @@ -3330,6 +3742,21 @@ dependencies = [ "parking_lot_core 0.8.0", ] +[[package]] +name = "parking_lot_core" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" +dependencies = [ + "cfg-if", + "cloudabi 0.0.3", + "libc", + "redox_syscall", + "rustc_version", + "smallvec 0.6.13", + "winapi 0.3.9", +] + [[package]] name = "parking_lot_core" version = "0.7.2" @@ -3340,7 +3767,7 @@ dependencies = [ "cloudabi 0.0.3", "libc", "redox_syscall", - "smallvec", + "smallvec 1.4.2", "winapi 0.3.9", ] @@ -3355,7 +3782,7 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec", + "smallvec 1.4.2", "winapi 0.3.9", ] @@ -3365,7 +3792,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" dependencies = [ - "regex", + "regex 1.3.9", ] [[package]] @@ -3383,6 +3810,12 @@ dependencies = [ "std_prelude", ] +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + [[package]] name = "percent-encoding" version = "2.1.0" @@ -3496,7 +3929,7 @@ dependencies = [ "chrono", "indexmap", "line-wrap", - "serde 1.0.114", + "serde 1.0.115", "xml-rs", ] @@ -3546,7 +3979,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" dependencies = [ "env_logger", - "log", + "log 0.4.11", ] [[package]] @@ -3638,12 +4071,25 @@ dependencies = [ "directories 1.0.2", "isatty", "petgraph", - "serde 1.0.114", + "serde 1.0.115", "serde-value", "serde_derive", "tint", ] +[[package]] +name = "publicsuffix" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" +dependencies = [ + "error-chain", + "idna 0.2.0", + "lazy_static 1.4.0", + "regex 1.3.9", + "url 2.1.1", +] + [[package]] name = "pulldown-cmark" version = "0.7.2" @@ -3667,6 +4113,18 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-xml" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8065cbb01701c11cc195cde85cbf39d1c6a80705b67a157ebb3042e0e5777f" +dependencies = [ + "encoding_rs", + "failure", + "log 0.4.11", + "memchr", +] + [[package]] name = "quick-xml" version = "0.17.2" @@ -3693,9 +4151,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44883e74aa97ad63db83c4bf8ca490f02b2fc02f92575e720c8551e843c945f" dependencies = [ "env_logger", - "log", - "rand", - "rand_core", + "log 0.4.11", + "rand 0.7.3", + "rand_core 0.5.1", ] [[package]] @@ -3718,6 +4176,48 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi 0.3.9", +] + [[package]] name = "rand" version = "0.7.3" @@ -3726,9 +4226,19 @@ checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ "getrandom", "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] @@ -3738,9 +4248,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.5.1", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.5.1" @@ -3750,13 +4275,75 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "rand_hc" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "rand_core", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi 0.3.9", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi 0.0.3", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi 0.3.9", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", ] [[package]] @@ -3777,7 +4364,7 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" dependencies = [ - "autocfg", + "autocfg 1.0.0", "crossbeam-deque", "either", "rayon-core", @@ -3796,6 +4383,15 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "readkey" version = "0.1.7" @@ -3819,16 +4415,29 @@ dependencies = [ "rust-argon2", ] +[[package]] +name = "regex" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" +dependencies = [ + "aho-corasick 0.6.10", + "memchr", + "regex-syntax 0.5.6", + "thread_local 0.3.6", + "utf8-ranges", +] + [[package]] name = "regex" version = "1.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.13", "memchr", - "regex-syntax", - "thread_local", + "regex-syntax 0.6.18", + "thread_local 1.0.1", ] [[package]] @@ -3840,12 +4449,30 @@ dependencies = [ "byteorder", ] +[[package]] +name = "regex-syntax" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" +dependencies = [ + "ucd-util", +] + [[package]] name = "regex-syntax" version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" +[[package]] +name = "relay" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1576e382688d7e9deecea24417e350d3062d97e32e45d70b1cde65994ff1489a" +dependencies = [ + "futures 0.1.29", +] + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -3855,6 +4482,40 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "reqwest" +version = "0.9.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" +dependencies = [ + "base64 0.10.1", + "bytes 0.4.12", + "cookie", + "cookie_store", + "encoding_rs", + "flate2", + "futures 0.1.29", + "http 0.1.21", + "hyper 0.12.35", + "hyper-tls", + "log 0.4.11", + "mime", + "mime_guess", + "native-tls", + "serde 1.0.115", + "serde_json", + "serde_urlencoded 0.5.5", + "time", + "tokio", + "tokio-executor", + "tokio-io", + "tokio-threadpool", + "tokio-timer", + "url 1.7.2", + "uuid 0.7.4", + "winreg", +] + [[package]] name = "result" version = "1.0.0" @@ -3882,7 +4543,7 @@ dependencies = [ "libsqlite3-sys", "lru-cache", "memchr", - "smallvec", + "smallvec 1.4.2", "time", ] @@ -3898,6 +4559,19 @@ dependencies = [ "crossbeam-utils 0.7.2", ] +[[package]] +name = "rust-crypto" +version = "0.2.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" +dependencies = [ + "gcc", + "libc", + "rand 0.3.23", + "rustc-serialize", + "time", +] + [[package]] name = "rust-embed" version = "5.6.0" @@ -3942,7 +4616,7 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" dependencies = [ - "serde 1.0.114", + "serde 1.0.115", "serde_derive", ] @@ -3955,7 +4629,7 @@ dependencies = [ "byteorder", "lazy_static 1.4.0", "num", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -3964,6 +4638,21 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +[[package]] +name = "rustc-serialize" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + [[package]] name = "rustyline" version = "6.2.0" @@ -3973,7 +4662,7 @@ dependencies = [ "cfg-if", "dirs-next", "libc", - "log", + "log 0.4.11", "memchr", "nix 0.17.0", "scopeguard", @@ -3989,6 +4678,41 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "s3handler" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4c00aaf216bd124a14126ecf2211f34563a1c309daf822172d10c453b63f6" +dependencies = [ + "base64 0.6.0", + "chrono", + "colored", + "failure", + "failure_derive", + "hmac", + "hmac-sha1", + "http 0.1.21", + "hyper 0.11.27", + "log 0.4.11", + "md5 0.3.8", + "quick-xml 0.12.4", + "regex 0.2.11", + "reqwest", + "rust-crypto", + "rustc-serialize", + "serde 1.0.115", + "serde_derive", + "serde_json", + "sha2 0.6.0", + "url 2.1.1", +] + +[[package]] +name = "safemem" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" + [[package]] name = "safemem" version = "0.3.3" @@ -4014,6 +4738,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "scoped-tls" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" + [[package]] name = "scoped-tls" version = "1.0.0" @@ -4087,9 +4817,9 @@ checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" [[package]] name = "serde" -version = "1.0.114" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3" +checksum = "e54c9a88f2da7238af84b5101443f0c0d0a3bbdc455e34a5c9497b1903ed55d5" dependencies = [ "serde_derive", ] @@ -4103,7 +4833,7 @@ dependencies = [ "lazy_static 0.2.11", "linked-hash-map 0.3.0", "num-traits 0.1.43", - "regex", + "regex 1.3.9", "serde 0.8.23", ] @@ -4116,7 +4846,7 @@ dependencies = [ "lazy_static 1.4.0", "linked-hash-map 0.3.0", "num-traits 0.1.43", - "regex", + "regex 1.3.9", "serde 0.8.23", ] @@ -4127,7 +4857,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a663f873dedc4eac1a559d4c6bc0d0b2c34dc5ac4702e105014b8281489e44f" dependencies = [ "ordered-float", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -4136,14 +4866,14 @@ version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" dependencies = [ - "serde 1.0.114", + "serde 1.0.115", ] [[package]] name = "serde_derive" -version = "1.0.114" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e" +checksum = "609feed1d0a73cc36a0182a840a9b37b4a82f0b1150369f0536a9e3f2a31dc48" dependencies = [ "proc-macro2", "quote", @@ -4157,7 +4887,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb236687e2bb073a7521c021949be944641e671b8505a94069ca37b656c81139" dependencies = [ "result", - "serde 1.0.114", + "serde 1.0.115", "void", ] @@ -4170,7 +4900,7 @@ dependencies = [ "indexmap", "itoa", "ryu", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -4182,6 +4912,18 @@ dependencies = [ "serde 0.8.23", ] +[[package]] +name = "serde_urlencoded" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" +dependencies = [ + "dtoa", + "itoa", + "serde 1.0.115", + "url 1.7.2", +] + [[package]] name = "serde_urlencoded" version = "0.6.1" @@ -4190,8 +4932,8 @@ checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" dependencies = [ "dtoa", "itoa", - "serde 1.0.114", - "url", + "serde 1.0.115", + "url 2.1.1", ] [[package]] @@ -4202,7 +4944,7 @@ checksum = "ae3e2dd40a7cdc18ca80db804b7f461a39bb721160a85c9a1fa30134bf3c02a5" dependencies = [ "dtoa", "linked-hash-map 0.5.3", - "serde 1.0.114", + "serde 1.0.115", "yaml-rust", ] @@ -4218,6 +4960,25 @@ dependencies = [ "opaque-debug 0.2.3", ] +[[package]] +name = "sha1" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" + +[[package]] +name = "sha2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d963c78ce367df26d7ea8b8cc655c651b42e8a1e584e869c1e17dae3ccb116a" +dependencies = [ + "block-buffer 0.2.0", + "byte-tools 0.2.0", + "digest 0.6.2", + "fake-simd", + "generic-array 0.8.3", +] + [[package]] name = "sha2" version = "0.9.1" @@ -4253,20 +5014,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "604508c1418b99dfe1925ca9224829bb2a8a9a04dda655cc01fcad46f4ab05ed" dependencies = [ "libc", - "mio", + "mio 0.7.0", "signal-hook-registry", ] [[package]] name = "signal-hook-registry" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" +checksum = "a3e12110bc539e657a646068aaf5eb5b63af9d0c1f7b29c97113fad80e15f035" dependencies = [ "arc-swap", "libc", ] +[[package]] +name = "slab" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" + [[package]] name = "slab" version = "0.4.2" @@ -4286,9 +5053,24 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.4.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3757cb9d89161a2f24e1cf78efa0c1fcff485d18e3f55e0aa3480824ddaa0f3f" +checksum = "4c8cbcd6df1e117c2210e13ab5109635ad68a929fcbb8964dc965b76cb5ee013" + +[[package]] +name = "smallvec" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +dependencies = [ + "maybe-uninit", +] + +[[package]] +name = "smallvec" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252" [[package]] name = "smol" @@ -4304,8 +5086,8 @@ dependencies = [ "futures-util", "libc", "once_cell", - "scoped-tls", - "slab", + "scoped-tls 1.0.0", + "slab 0.4.2", "socket2", "wepoll-sys-stjepang", "winapi 0.3.9", @@ -4338,7 +5120,7 @@ dependencies = [ "dirs-next", "gethostname", "git2", - "log", + "log 0.4.11", "nom 5.1.2", "once_cell", "open", @@ -4348,7 +5130,7 @@ dependencies = [ "pest_derive", "pretty_env_logger", "rayon", - "regex", + "regex 1.3.9", "serde_json", "starship_module_config_derive", "sysinfo", @@ -4384,6 +5166,15 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe" +[[package]] +name = "string" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" +dependencies = [ + "bytes 0.4.12", +] + [[package]] name = "strip-ansi-escapes" version = "0.1.0" @@ -4409,13 +5200,13 @@ dependencies = [ "http 0.1.21", "isahc", "js-sys", - "log", + "log 0.4.11", "mime", "mime_guess", - "serde 1.0.114", + "serde 1.0.115", "serde_json", - "serde_urlencoded", - "url", + "serde_urlencoded 0.6.1", + "url 2.1.1", "wasm-bindgen", "wasm-bindgen-futures 0.3.27", "web-sys", @@ -4423,9 +5214,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cdb98bcb1f9d81d07b536179c269ea15999b5d14ea958196413869445bb5250" +checksum = "e69abc24912995b3038597a7a593be5053eb0fb44f3cc5beec0deb421790c1f4" dependencies = [ "proc-macro2", "quote", @@ -4459,8 +5250,8 @@ dependencies = [ "lazycell", "onig", "plist", - "regex-syntax", - "serde 1.0.114", + "regex-syntax 0.6.18", + "serde 1.0.115", "serde_derive", "serde_json", "walkdir", @@ -4482,6 +5273,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "take" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b157868d8ac1f56b64604539990685fa7611d8fa9e5476cf0c02cf34d32917c5" + [[package]] name = "tempfile" version = "3.1.0" @@ -4490,7 +5287,7 @@ checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ "cfg-if", "libc", - "rand", + "rand 0.7.3", "redox_syscall", "remove_dir_all", "winapi 0.3.9", @@ -4575,6 +5372,15 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +dependencies = [ + "lazy_static 1.4.0", +] + [[package]] name = "thread_local" version = "1.0.1" @@ -4609,6 +5415,102 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" +[[package]] +name = "tokio" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "mio 0.6.22", + "num_cpus", + "tokio-codec", + "tokio-current-thread", + "tokio-executor", + "tokio-fs", + "tokio-io", + "tokio-reactor", + "tokio-sync", + "tokio-tcp", + "tokio-threadpool", + "tokio-timer", + "tokio-udp", + "tokio-uds", +] + +[[package]] +name = "tokio-buf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" +dependencies = [ + "bytes 0.4.12", + "either", + "futures 0.1.29", +] + +[[package]] +name = "tokio-codec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "tokio-io", +] + +[[package]] +name = "tokio-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "iovec", + "log 0.4.11", + "mio 0.6.22", + "scoped-tls 0.1.2", + "tokio", + "tokio-executor", + "tokio-io", + "tokio-reactor", + "tokio-timer", +] + +[[package]] +name = "tokio-current-thread" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" +dependencies = [ + "futures 0.1.29", + "tokio-executor", +] + +[[package]] +name = "tokio-executor" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.29", +] + +[[package]] +name = "tokio-fs" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" +dependencies = [ + "futures 0.1.29", + "tokio-io", + "tokio-threadpool", +] + [[package]] name = "tokio-io" version = "0.1.13" @@ -4617,7 +5519,139 @@ checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes 0.4.12", "futures 0.1.29", - "log", + "log 0.4.11", +] + +[[package]] +name = "tokio-proto" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" +dependencies = [ + "futures 0.1.29", + "log 0.3.9", + "net2", + "rand 0.3.23", + "slab 0.3.0", + "smallvec 0.2.1", + "take", + "tokio-core", + "tokio-io", + "tokio-service", +] + +[[package]] +name = "tokio-reactor" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "lazy_static 1.4.0", + "log 0.4.11", + "mio 0.6.22", + "num_cpus", + "parking_lot 0.9.0", + "slab 0.4.2", + "tokio-executor", + "tokio-io", + "tokio-sync", +] + +[[package]] +name = "tokio-service" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" +dependencies = [ + "futures 0.1.29", +] + +[[package]] +name = "tokio-sync" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" +dependencies = [ + "fnv", + "futures 0.1.29", +] + +[[package]] +name = "tokio-tcp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "iovec", + "mio 0.6.22", + "tokio-io", + "tokio-reactor", +] + +[[package]] +name = "tokio-threadpool" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" +dependencies = [ + "crossbeam-deque", + "crossbeam-queue", + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "lazy_static 1.4.0", + "log 0.4.11", + "num_cpus", + "slab 0.4.2", + "tokio-executor", +] + +[[package]] +name = "tokio-timer" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" +dependencies = [ + "crossbeam-utils 0.7.2", + "futures 0.1.29", + "slab 0.4.2", + "tokio-executor", +] + +[[package]] +name = "tokio-udp" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "log 0.4.11", + "mio 0.6.22", + "tokio-codec", + "tokio-io", + "tokio-reactor", +] + +[[package]] +name = "tokio-uds" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "iovec", + "libc", + "log 0.4.11", + "mio 0.6.22", + "mio-uds", + "tokio-codec", + "tokio-io", + "tokio-reactor", ] [[package]] @@ -4626,7 +5660,7 @@ version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" dependencies = [ - "serde 1.0.114", + "serde 1.0.115", ] [[package]] @@ -4636,18 +5670,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" dependencies = [ "indexmap", - "serde 1.0.114", + "serde 1.0.115", ] [[package]] name = "trash" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d3efa66f2eb71069c3ba9582361e823626067b728ec882490e68c9c43b5e32" +checksum = "bcd4ea126e9b491aa0ee8043f5519cd56498413997a6c3859c8a9812aa300803" dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "try-lock" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2aa4715743892880f70885373966c83d73ef1b0838a664ef0c76fffd35e7c2" + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "try_from" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" +dependencies = [ + "cfg-if", +] + [[package]] name = "typed-arena" version = "1.7.0" @@ -4669,7 +5724,7 @@ dependencies = [ "erased-serde", "inventory", "lazy_static 1.4.0", - "serde 1.0.114", + "serde 1.0.115", "typetag-impl", ] @@ -4690,6 +5745,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "ucd-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85f514e095d348c279b1e5cd76795082cf15bd59b93207832abe0b1d8fed236" + [[package]] name = "umask" version = "1.0.0" @@ -4771,15 +5832,26 @@ dependencies = [ "typenum", ] +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", +] + [[package]] name = "url" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" dependencies = [ - "idna", + "idna 0.2.0", "matches", - "percent-encoding", + "percent-encoding 2.1.0", ] [[package]] @@ -4805,9 +5877,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4227e95324a443c9fcb06e03d4d85e91aabe9a5a02aa818688b6918b6af486" dependencies = [ "libc", - "log", + "log 0.4.11", ] +[[package]] +name = "utf8-ranges" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" + [[package]] name = "utf8parse" version = "0.1.1" @@ -4820,13 +5898,22 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372" +[[package]] +name = "uuid" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" +dependencies = [ + "rand 0.6.5", +] + [[package]] name = "uuid" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" dependencies = [ - "rand", + "rand 0.7.3", ] [[package]] @@ -4849,11 +5936,11 @@ checksum = "c7b77d2a6f56988f7bb54102fe73ab963df4e7374b58298a7efa1361f681e0e2" dependencies = [ "proc-macro2", "pulldown-cmark", - "regex", + "regex 1.3.9", "semver-parser 0.9.0", "syn", "toml 0.5.6", - "url", + "url 2.1.1", ] [[package]] @@ -4900,6 +5987,28 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a05d9d966753fa4b5c8db73fcab5eed4549cfe0e1e4e66911e5564a0085c35d1" +dependencies = [ + "futures 0.1.29", + "log 0.4.11", + "try-lock 0.1.0", +] + +[[package]] +name = "want" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" +dependencies = [ + "futures 0.1.29", + "log 0.4.11", + "try-lock 0.2.3", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -4924,7 +6033,7 @@ checksum = "bc71e4c5efa60fb9e74160e89b93353bc24059999c0ae0fb03affc39770310b0" dependencies = [ "bumpalo", "lazy_static 1.4.0", - "log", + "log 0.4.11", "proc-macro2", "quote", "syn", @@ -5075,6 +6184,25 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "winreg" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + [[package]] name = "x11" version = "2.18.2" @@ -5101,7 +6229,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de" dependencies = [ "libc", - "log", + "log 0.4.11", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ff7073ce7..067970e9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,6 +40,7 @@ nu_plugin_textview = {version = "0.18.1", path = "./crates/nu_plugin_textview", nu_plugin_to_bson = {version = "0.18.1", path = "./crates/nu_plugin_to_bson", optional = true} nu_plugin_to_sqlite = {version = "0.18.1", path = "./crates/nu_plugin_to_sqlite", optional = true} nu_plugin_tree = {version = "0.18.1", path = "./crates/nu_plugin_tree", optional = true} +nu_plugin_s3 = { version = "0.18.1", path = "./crates/nu_plugin_s3", optional=true } crossterm = {version = "0.17.5", optional = true} semver = {version = "0.10.0", optional = true} @@ -76,7 +77,7 @@ default = [ "term-support", "uuid-support", ] -stable = ["default", "binaryview", "match", "tree", "post", "fetch", "clipboard-cli", "trash-support", "start", "starship-prompt", "bson", "sqlite"] +stable = ["default", "binaryview", "match", "tree", "post", "fetch", "clipboard-cli", "trash-support", "start", "starship-prompt", "bson", "sqlite", "s3"] # Default inc = ["semver", "nu_plugin_inc"] @@ -94,6 +95,7 @@ sqlite = ["nu_plugin_from_sqlite", "nu_plugin_to_sqlite"] start = ["nu_plugin_start"] trace = ["nu-parser/trace"] tree = ["nu_plugin_tree"] +s3 = ["nu_plugin_s3"] clipboard-cli = ["nu-cli/clipboard-cli"] ctrlc-support = ["nu-cli/ctrlc"] @@ -160,6 +162,11 @@ name = "nu_plugin_stable_start" path = "src/plugins/nu_plugin_stable_start.rs" required-features = ["start"] +[[bin]] +name = "nu_plugin_stable_s3" +path = "src/plugins/nu_plugin_stable_s3.rs" +required-features = ["s3"] + # Main nu binary [[bin]] name = "nu" diff --git a/crates/nu_plugin_s3/Cargo.toml b/crates/nu_plugin_s3/Cargo.toml new file mode 100644 index 000000000..944ea9aa2 --- /dev/null +++ b/crates/nu_plugin_s3/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "nu_plugin_s3" +version = "0.18.1" +authors = ["The Nu Project Contributors"] +edition = "2018" +description = "An S3 plugin for Nushell" +license = "MIT" + +[lib] +doctest = false + +[dependencies] +nu-plugin = { path = "../nu-plugin", version = "0.18.1" } +nu-protocol = { path = "../nu-protocol", version = "0.18.1" } +nu-source = { path = "../nu-source", version = "0.18.1" } +nu-errors = { path = "../nu-errors", version = "0.18.1" } +futures = { version = "0.3", features = ["compat", "io-compat"] } +s3handler = "0.5.0" + +[build-dependencies] diff --git a/crates/nu_plugin_s3/README.md b/crates/nu_plugin_s3/README.md new file mode 100644 index 000000000..60ffb3320 --- /dev/null +++ b/crates/nu_plugin_s3/README.md @@ -0,0 +1,9 @@ +Nu Plugin S3 +--- + +An S3 plugin for nu shell, it can load the content of S3 objects and convert into table + +#### Snapshot +In following example, the return content from httpbin is saved before as an object in AWS S3. +![snapshot](https://raw.githubusercontent.com/yanganto/nu_plugin_s3/master/demo.png) + diff --git a/crates/nu_plugin_s3/demo.png b/crates/nu_plugin_s3/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd2a4162d5683d5bfa072a0d1d85cdab64389b8 GIT binary patch literal 81084 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

0e7U0M@Jkb z5DyRLiu&aPS14H}C1JhmLqo3@+AF=K%>ZEdj@be+_h~6dQ4xf)dIk??S!F)hVfCl) zIy{P}xC+vh<6Sw!B)ygXp=6FFyDrfbDB{OQ?f0E9K@qQ%UaL&}=Eu24GK zbhr_SHQ+qmUr=ShaoSA~G_LP8qBOFaUY6W!m2xYEH4iy8%Rh0OZP0NtqlLCneVH;DE=j|z2L&ZXlx%VpcKF21OxDEM zqtILa3(2-8o`2v)Q%#cQa%zy%VNQf}qnieDKSzKBzwG3x)E_A1sZ&S9Hl;s%V1O4t z2L02P`tiAc*-6s_=jq7jm6f72Qj(It{cZ025tvuszsC*d=1^Atha2@9;2rSSIHxR6 z1CvLU*9jS%+2jmG)PJ($r%qY^uQC2U$?#YI+rJ*aF7Y?*`d>cWUq_z$Kb*KctWipJ zKoWJ|$xVoLKHmO^y6fE1(iQ4C3q8H5fq|!YvraR;In6Xxbso$~Ym?dUgU)5Pc6Rl! z{v?fxGMJh&eX+;&>!9DCQ%mQyT>O}bKEJ~)j|1u3vC82${{FO&Qy%>7vw7+i|G%8V v%TE2{H$C<7%s, + pub tag: Tag, + pub has_raw: bool, + pub config: CredentialConfig, +} + +impl Handler { + pub fn new() -> Handler { + Handler { + tag: Tag::unknown(), + config: CredentialConfig { + host: String::new(), + access_key: String::new(), + secret_key: String::new(), + user: None, + region: None, + s3_type: None, + secure: None, + }, + resource: None, + has_raw: false, + } + } + + pub fn setup(&mut self, call_info: CallInfo) -> ReturnValue { + self.resource = { + let r = call_info.args.nth(0).ok_or_else(|| { + ShellError::labeled_error( + "No obj or directory specified", + "for command", + &call_info.name_tag, + ) + })?; + Some(r.clone()) + }; + self.tag = call_info.name_tag.clone(); + self.has_raw = call_info.args.has("raw"); + + if let Some(e) = call_info.args.get("endpoint") { + self.config.host = e.as_string()? + } else { + return Err(ShellError::labeled_error( + "No endpoint provided", + "for command", + &call_info.name_tag, + )); + } + + if let Some(access_key) = call_info.args.get("access_key") { + self.config.access_key = access_key.as_string()? + } else { + return Err(ShellError::labeled_error( + "No access key provided", + "for command", + &call_info.name_tag, + )); + } + + if let Some(secret_key) = call_info.args.get("secret_key") { + self.config.secret_key = secret_key.as_string()? + } else { + return Err(ShellError::labeled_error( + "No secret key provided", + "for command", + &call_info.name_tag, + )); + } + + if let Some(region) = call_info.args.get("region") { + self.config.region = Some(region.as_string()?) + } + + ReturnSuccess::value(UntaggedValue::nothing().into_untagged_value()) + } +} + +impl Default for Handler { + fn default() -> Self { + Self::new() + } +} + +pub async fn s3_helper(resource: &Value, has_raw: bool, config: &CredentialConfig) -> ReturnValue { + let resource_str = resource.as_string()?; + let mut handler = S3Handler::from(config); + let (output, content_type) = handler + .cat(&resource_str) + .map_err(|e| ShellError::unexpected(e.to_string()))?; + + let extension = if has_raw { + None + } else { + fn get_accept_ext(s: String) -> Option { + if s.contains("json") { + Some("json".to_string()) + } else if s.contains("xml") { + Some("xml".to_string()) + } else if s.contains("svg") { + Some("svg".to_string()) + } else if s.contains("html") { + Some("html".to_string()) + } else { + None + } + } + // If the extension could not provide when uploading, + // try to use the resource extension. + content_type.and_then(get_accept_ext).or_else(|| { + resource_str + .split('.') + .last() + .map(String::from) + .and_then(get_accept_ext) + }) + }; + + if let Some(e) = extension { + Ok(ReturnSuccess::Action(CommandAction::AutoConvert( + UntaggedValue::string(output).into_value(Tag { + span: resource.tag.span, + anchor: Some(AnchorLocation::Url(resource_str)), + }), + e, + ))) + } else { + ReturnSuccess::value(UntaggedValue::string(output)) + } +} diff --git a/crates/nu_plugin_s3/src/lib.rs b/crates/nu_plugin_s3/src/lib.rs new file mode 100644 index 000000000..c90621639 --- /dev/null +++ b/crates/nu_plugin_s3/src/lib.rs @@ -0,0 +1,4 @@ +pub mod handler; +mod nu; + +pub use handler::Handler; diff --git a/crates/nu_plugin_s3/src/main.rs b/crates/nu_plugin_s3/src/main.rs new file mode 100644 index 000000000..e3d0a5841 --- /dev/null +++ b/crates/nu_plugin_s3/src/main.rs @@ -0,0 +1,6 @@ +use nu_plugin::serve_plugin; +use nu_plugin_s3::handler; + +fn main() { + serve_plugin(&mut handler::Handler::new()) +} diff --git a/crates/nu_plugin_s3/src/nu/mod.rs b/crates/nu_plugin_s3/src/nu/mod.rs new file mode 100644 index 000000000..f3333734b --- /dev/null +++ b/crates/nu_plugin_s3/src/nu/mod.rs @@ -0,0 +1,60 @@ +use futures::executor::block_on; +use nu_errors::ShellError; +use nu_plugin::Plugin; +use nu_protocol::{CallInfo, ReturnValue, Signature, SyntaxShape}; + +use crate::handler; +use crate::handler::s3_helper; + +impl Plugin for handler::Handler { + fn config(&mut self) -> Result { + Ok(Signature::build("s3") + .desc("Load S3 resource into a cell, convert to table if possible (avoid by appending '--raw' or '-R')") + .required( + "RESOURCE", + SyntaxShape::String, + "the RESOURCE to fetch the contents from", + ) + .named( + "endpoint", + SyntaxShape::Any, + "the enpoint info for the S3 resource, i.g., s3.ap-northeast-1.amazonaws.com or 10.1.1.1", + Some('e'), + ) + .named( + "access_key", + SyntaxShape::Any, + "the accessy key when authenticating", + Some('a'), + ) + .named( + "secret_key", + SyntaxShape::Any, + "the secret key when authenticating", + Some('s'), + ) + .named( + "region", + SyntaxShape::Any, + "the region of the resource, default will use us-east-1", + Some('r'), + ) + .switch("raw", "fetch contents as text rather than a table", Some('R')) + .filter()) + } + + fn begin_filter(&mut self, callinfo: CallInfo) -> Result, ShellError> { + self.setup(callinfo)?; + Ok(vec![block_on(s3_helper( + &self.resource.clone().ok_or_else(|| { + ShellError::labeled_error( + "internal error: resource not set", + "resource not set", + &self.tag, + ) + })?, + self.has_raw, + &self.config, + ))]) + } +} diff --git a/src/plugins/nu_plugin_stable_s3.rs b/src/plugins/nu_plugin_stable_s3.rs new file mode 100644 index 000000000..6765c28eb --- /dev/null +++ b/src/plugins/nu_plugin_stable_s3.rs @@ -0,0 +1,6 @@ +use nu_plugin::serve_plugin; +use nu_plugin_s3::Handler; + +fn main() { + serve_plugin(&mut Handler::new()); +}