From c80a9585b0569e9489ac93c47048cb39e295aa17 Mon Sep 17 00:00:00 2001 From: Fernando Herrera Date: Wed, 12 May 2021 02:01:31 +0100 Subject: [PATCH] Complete Dataframe MVP (#3373) * Dataframe MVP * Removed test csv file * Dataframe MVP * Removed test csv file * New revision polars * New revision polars * csv file reader * argument parser for file reader * Parser from Row primitive * Column conversion * Added as f32 and f64 * Parsing row to dataframe * Removed repeated push to vector * Accept table values to create dataframe * Removed default serde * Dataframe to rows to show data * Save name of file with dataframe * Usage example * Upgrade polars version * Clippy changes * Added print function with head and tail * Move dataframe struct to folder * Lock file after running tests and merge * Optional feature for dataframe * Removed dataframe from plugins * Update primitive.rs Co-authored-by: JT --- Cargo.lock | 1180 +++++++++++------ Cargo.toml | 9 + crates/nu-command/Cargo.toml | 3 + crates/nu-command/src/commands.rs | 4 + crates/nu-command/src/commands/all.rs | 2 +- .../src/commands/autoview/command.rs | 14 + crates/nu-command/src/commands/dataframe.rs | 139 ++ .../src/commands/default_context.rs | 2 + crates/nu-command/src/commands/to_json.rs | 2 + crates/nu-command/src/commands/to_toml.rs | 4 +- crates/nu-command/src/commands/to_yaml.rs | 2 + crates/nu-command/src/commands/uniq.rs | 8 + crates/nu-data/Cargo.toml | 1 + crates/nu-data/src/base/shape.rs | 8 + crates/nu-data/src/config.rs | 2 + crates/nu-protocol/Cargo.toml | 5 + crates/nu-protocol/src/dataframe/mod.rs | 3 + .../nu-protocol/src/dataframe/nu_dataframe.rs | 432 ++++++ crates/nu-protocol/src/lib.rs | 3 + crates/nu-protocol/src/type_shape.rs | 8 + crates/nu-protocol/src/value.rs | 25 + crates/nu-protocol/src/value/debug.rs | 2 + crates/nu-protocol/src/value/primitive.rs | 57 +- crates/nu-value-ext/Cargo.toml | 3 + crates/nu-value-ext/src/lib.rs | 4 + 25 files changed, 1474 insertions(+), 448 deletions(-) create mode 100644 crates/nu-command/src/commands/dataframe.rs create mode 100644 crates/nu-protocol/src/dataframe/mod.rs create mode 100644 crates/nu-protocol/src/dataframe/nu_dataframe.rs diff --git a/Cargo.lock b/Cargo.lock index 5e76a45bd..d89de780d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,7 +7,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" dependencies = [ "lazy_static 1.4.0", - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -91,6 +91,17 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" +[[package]] +name = "ahash" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f200cbb1e856866d9eade941cf3aa0c5d7dd36f74311c4273b494f4ef036957" +dependencies = [ + "getrandom 0.2.2", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.6.10" @@ -102,9 +113,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] @@ -138,28 +149,28 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" [[package]] name = "arboard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85149eb4159516fbc261f362153822672e4bdb5b3accc863a5777627c6d9fe72" +checksum = "c3ac39a01d5684967619a6755f3cfc397e5202b5f012d0954ac5016f4b2a33eb" dependencies = [ "clipboard-win", "core-graphics", "image 0.23.14", "lazy_static 1.4.0", - "libc", + "log 0.4.14", "objc", "objc-foundation", "objc_id", "scopeguard", "thiserror", "winapi 0.3.9", - "xcb", + "x11rb", ] [[package]] @@ -183,6 +194,28 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "arrow" +version = "4.0.0-SNAPSHOT" +source = "git+https://github.com/apache/arrow-rs?rev=d008f31b107c1030a1f5144c164e8ca8bf543576#d008f31b107c1030a1f5144c164e8ca8bf543576" +dependencies = [ + "cfg_aliases", + "chrono", + "csv", + "flatbuffers", + "hex 0.4.3", + "indexmap", + "lazy_static 1.4.0", + "lexical-core", + "multiversion", + "num 0.3.1", + "rand 0.7.3", + "regex 1.5.3", + "serde 1.0.125", + "serde_derive", + "serde_json", +] + [[package]] name = "as-slice" version = "0.1.5" @@ -208,16 +241,16 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", "once_cell", - "vec-arena", + "slab 0.4.3", ] [[package]] @@ -239,29 +272,29 @@ dependencies = [ [[package]] name = "async-io" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" +checksum = "4bbfd5cf2794b1e908ea8457e6c45f8f8f1f6ec5f74617bf4662623f47503c3b" dependencies = [ "concurrent-queue", "fastrand", "futures-lite", "libc", "log 0.4.14", - "nb-connect", "once_cell", "parking", "polling", - "vec-arena", + "slab 0.4.3", + "socket2 0.4.0", "waker-fn", "winapi 0.3.9", ] [[package]] name = "async-lock" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb" +checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" dependencies = [ "event-listener", ] @@ -283,7 +316,7 @@ checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -296,7 +329,7 @@ dependencies = [ "async-global-executor", "async-io", "async-lock", - "crossbeam-utils 0.8.3", + "crossbeam-utils 0.8.4", "futures-channel", "futures-core", "futures-io", @@ -309,8 +342,8 @@ dependencies = [ "once_cell", "pin-project-lite 0.2.6", "pin-utils", - "slab 0.4.2", - "wasm-bindgen-futures 0.4.21", + "slab 0.4.3", + "wasm-bindgen-futures 0.4.23", ] [[package]] @@ -321,13 +354,13 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" [[package]] name = "async-trait" -version = "0.1.48" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ea56748e10732c49404c153638a15ec3d6211ec5ff35d9bb20e13b93576adf" +checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -355,11 +388,12 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "88fb5a785d6b44fd9d6700935608639af1b8356de1e55d5f7c2740f4faa15d82" dependencies = [ "addr2line", + "cc", "cfg-if 1.0.0", "libc", "miniz_oxide 0.4.4", @@ -411,7 +445,7 @@ dependencies = [ "clap", "console", "content_inspector", - "dirs", + "dirs 3.0.2", "encoding", "error-chain", "git2", @@ -419,7 +453,7 @@ dependencies = [ "lazy_static 1.4.0", "path_abs", "semver 0.11.0", - "serde 1.0.124", + "serde 1.0.125", "serde_yaml", "shell-words", "syntect", @@ -436,17 +470,16 @@ dependencies = [ "num-bigint 0.3.2", "num-integer", "num-traits 0.2.14", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] name = "bincode" -version = "1.3.1" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "byteorder", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -534,21 +567,21 @@ dependencies = [ "linked-hash-map 0.5.4", "md5 0.6.1", "rand 0.7.3", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "time 0.1.44", ] [[package]] name = "bstr" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" +checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" dependencies = [ "lazy_static 1.4.0", "memchr", "regex-automata", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -565,9 +598,9 @@ checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" [[package]] name = "byte-unit" -version = "4.0.10" +version = "4.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9520900471c3a9bbcfe0fd4c7b6bcfeff41b20a76cf91c59b7474b09be1ee27" +checksum = "26d98e67b09c0321733bef2f3b879832afa6197e9ea58f32e72c316df2ffe743" dependencies = [ "utf8-width", ] @@ -644,7 +677,7 @@ dependencies = [ "encoding_rs", "log 0.4.14", "quick-xml 0.19.0", - "serde 1.0.124", + "serde 1.0.125", "zip", ] @@ -675,6 +708,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "chrono" version = "0.4.19" @@ -684,7 +723,7 @@ dependencies = [ "libc", "num-integer", "num-traits 0.2.14", - "serde 1.0.124", + "serde 1.0.125", "time 0.1.44", "winapi 0.3.9", ] @@ -726,9 +765,9 @@ dependencies = [ [[package]] name = "clipboard-win" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5123c6b97286809fea9e38d2c9bf530edbcb9fc0d8f8272c28b0c95f067fa92d" +checksum = "9dc138eac3ade40f10cb7aee8b27e6aed1342d8788c40e66eb52914009d160ed" dependencies = [ "error-code", "str-buf", @@ -759,7 +798,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ - "serde 1.0.124", + "serde 1.0.125", "termcolor", "unicode-width", ] @@ -805,7 +844,7 @@ dependencies = [ "lazy_static 1.4.0", "nom 5.1.2", "rust-ini", - "serde 1.0.124", + "serde 1.0.125", "serde-hjson", "serde_json", "toml", @@ -821,7 +860,7 @@ dependencies = [ "encode_unicode", "lazy_static 1.4.0", "libc", - "regex 1.4.3", + "regex 1.5.3", "terminal_size", "unicode-width", "winapi 0.3.9", @@ -830,9 +869,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" +checksum = "402da840495de3f976eaefc3485b7f5eb5b0bf9761f9a47be27fe975b3b8c2ec" [[package]] name = "constant_time_eq" @@ -849,6 +888,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "cookie" version = "0.14.4" @@ -862,7 +907,7 @@ dependencies = [ "percent-encoding 2.1.0", "rand 0.8.3", "sha2 0.9.3", - "time 0.2.25", + "time 0.2.26", "version_check", ] @@ -926,12 +971,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.3", + "crossbeam-utils 0.8.4", ] [[package]] @@ -952,8 +997,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ "cfg-if 1.0.0", - "crossbeam-epoch 0.9.3", - "crossbeam-utils 0.8.3", + "crossbeam-epoch 0.9.4", + "crossbeam-utils 0.8.4", ] [[package]] @@ -973,14 +1018,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12" +checksum = "52fb27eab85b17fbb9f6fd667089e07d6a2eb8743d02639ee7f6a7a7729c9c94" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.3", + "crossbeam-utils 0.8.4", "lazy_static 1.4.0", - "memoffset 0.6.1", + "memoffset 0.6.3", "scopeguard", ] @@ -1018,9 +1063,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" dependencies = [ "autocfg", "cfg-if 1.0.0", @@ -1037,7 +1082,7 @@ dependencies = [ "crossterm_winapi 0.6.2", "lazy_static 1.4.0", "libc", - "mio 0.7.9", + "mio 0.7.11", "parking_lot 0.11.1", "signal-hook", "winapi 0.3.9", @@ -1053,7 +1098,7 @@ dependencies = [ "crossterm_winapi 0.7.0", "lazy_static 1.4.0", "libc", - "mio 0.7.9", + "mio 0.7.11", "parking_lot 0.11.1", "signal-hook", "winapi 0.3.9", @@ -1111,7 +1156,7 @@ dependencies = [ "proc-macro2", "quote 1.0.9", "smallvec 1.6.1", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -1121,7 +1166,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" dependencies = [ "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -1134,7 +1179,7 @@ dependencies = [ "csv-core", "itoa", "ryu", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -1148,12 +1193,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" dependencies = [ "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -1167,9 +1212,9 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.1.8" +version = "3.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15b8ec3b5755a188c141c1f6a98e76de31b936209bf066b647979e2a84764a9" +checksum = "232295399409a8b7ae41276757b5a1cc21032848d42bff2352261f958b3ca29a" dependencies = [ "nix", "winapi 0.3.9", @@ -1177,24 +1222,24 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.35" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a872858e9cb9e3b96c80dd78774ad9e32e44d3b05dc31e142b858d14aebc82c" +checksum = "d0bac9f84ca0977c4d9b8db998689de55b9e976656a6bc87fada2ca710d504c7" dependencies = [ "curl-sys", "libc", "openssl-probe", "openssl-sys", "schannel", - "socket2", + "socket2 0.4.0", "winapi 0.3.9", ] [[package]] name = "curl-sys" -version = "0.4.41+curl-7.75.0" +version = "0.4.42+curl-7.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec466abd277c7cab2905948f3e94d10bc4963f1f5d47921c1cc4ffd2028fe65" +checksum = "4636d8d6109c842707018a104051436bffb8991ea20b2d1293db70b6e0ee4c7c" dependencies = [ "cc", "libc", @@ -1261,7 +1306,7 @@ checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -1277,13 +1322,14 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.11" +version = "0.99.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" +checksum = "f82b1b72f1263f214c0f823371768776c4f5841b942c9883aa8e5ec584fd0ba6" dependencies = [ + "convert_case", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -1306,11 +1352,10 @@ dependencies = [ [[package]] name = "directories" -version = "2.0.2" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c" +checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" dependencies = [ - "cfg-if 0.1.10", "dirs-sys", ] @@ -1326,9 +1371,20 @@ dependencies = [ [[package]] name = "dirs" -version = "3.0.1" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142995ed02755914747cc6ca76fc7e4583cd18578746716d0508ea6ed558b9ff" +checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +dependencies = [ + "libc", + "redox_users 0.3.5", + "winapi 0.3.9", +] + +[[package]] +name = "dirs" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" dependencies = [ "dirs-sys", ] @@ -1345,12 +1401,12 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", - "redox_users 0.3.5", + "redox_users 0.4.0", "winapi 0.3.9", ] @@ -1379,9 +1435,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "dtoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d7ed2934d741c6b37e33e3832298e8850b53fd2d2bea03873375596c7cea4e" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" [[package]] name = "dtoa-short" @@ -1429,7 +1485,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "031fe36712cec8b81c5b76b555666ce855a4dfc2dcc35bb907046bf2ef545578" dependencies = [ - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -1526,7 +1582,7 @@ dependencies = [ "atty", "humantime", "log 0.4.14", - "regex 1.4.3", + "regex 1.5.3", "termcolor", ] @@ -1537,7 +1593,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" dependencies = [ "log 0.4.14", - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -1551,9 +1607,9 @@ dependencies = [ [[package]] name = "error-code" -version = "2.0.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49c94f66f2d2c5ee8685039e458b4e6c9f13af7c28736baf10ce42966a5ab52" +checksum = "1d4871041f3339e2cd4a23c698f89519e1ca62aa73190eddcc18dde4ee11e8ff" dependencies = [ "libc", "str-buf", @@ -1583,7 +1639,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", "synstructure", ] @@ -1612,14 +1668,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae91abf6555234338687bb47913978d275539235fcb77ba9863b779090b42b14" dependencies = [ "bit-set", - "regex 1.4.3", + "regex 1.5.3", ] [[package]] -name = "fastrand" -version = "1.4.0" +name = "fast-float" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" +checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" + +[[package]] +name = "fastrand" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb" dependencies = [ "instant", ] @@ -1640,15 +1702,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" [[package]] -name = "flate2" -version = "1.0.14" +name = "flatbuffers" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" +checksum = "c3c502342b7d6d73beb1b8bab39dc01deba0c8ef66f4e6f1eba7c69ee6b38069" dependencies = [ - "cfg-if 0.1.10", + "bitflags", + "smallvec 1.6.1", + "thiserror", +] + +[[package]] +name = "flate2" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0" +dependencies = [ + "cfg-if 1.0.0", "crc32fast", "libc", - "miniz_oxide 0.3.7", + "miniz_oxide 0.4.4", ] [[package]] @@ -1749,9 +1822,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1" +checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" dependencies = [ "futures-channel", "futures-core", @@ -1764,9 +1837,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939" +checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" dependencies = [ "futures-core", "futures-sink", @@ -1784,9 +1857,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94" +checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" [[package]] name = "futures-core-preview" @@ -1806,9 +1879,9 @@ dependencies = [ [[package]] name = "futures-executor" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1" +checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" dependencies = [ "futures-core", "futures-task", @@ -1828,9 +1901,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59" +checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" [[package]] name = "futures-io-preview" @@ -1855,14 +1928,14 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7" +checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" dependencies = [ "proc-macro-hack", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -1881,9 +1954,9 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3" +checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" [[package]] name = "futures-sink-preview" @@ -1893,9 +1966,9 @@ checksum = "86f148ef6b69f75bb610d4f9a2336d4fc88c4b5b67129d1a340dd0fd362efeec" [[package]] name = "futures-task" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80" +checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" [[package]] name = "futures-timer" @@ -1905,9 +1978,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1" +checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" dependencies = [ "futures 0.1.31", "futures-channel", @@ -1921,7 +1994,7 @@ dependencies = [ "pin-utils", "proc-macro-hack", "proc-macro-nested", - "slab 0.4.2", + "slab 0.4.3", "tokio-io", ] @@ -1938,7 +2011,7 @@ dependencies = [ "futures-sink-preview", "memchr", "pin-utils", - "slab 0.4.2", + "slab 0.4.3", "tokio-io", ] @@ -1949,9 +2022,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b" dependencies = [ "bytes 0.5.6", - "futures 0.3.13", + "futures 0.3.14", "memchr", - "pin-project 0.4.27", + "pin-project 0.4.28", ] [[package]] @@ -2007,6 +2080,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e692e296bfac1d2533ef168d0b60ff5897b8b70a4009276834014dd8924cc028" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -2038,7 +2121,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -2059,9 +2142,9 @@ checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" [[package]] name = "git2" -version = "0.13.17" +version = "0.13.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d250f5f82326884bd39c2853577e70a121775db76818ffa452ed1e80de12986" +checksum = "b483c6c2145421099df1b4efd50e0f6205479a072199460eff852fa15e5603c7" dependencies = [ "bitflags", "libc", @@ -2072,9 +2155,9 @@ dependencies = [ [[package]] name = "gjson" -version = "0.7.1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864178e25a00c41404f1728997c9a21a7b746be1faefe6ce4dc41eb48bb4234f" +checksum = "205c41cae258334004939aa09ae377372968c2b6241bae6266fa1c0589cf0a6e" [[package]] name = "glob" @@ -2088,11 +2171,11 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a" dependencies = [ - "aho-corasick 0.7.15", + "aho-corasick 0.7.18", "bstr", "fnv", "log 0.4.14", - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -2119,9 +2202,9 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.3", + "http 0.2.4", "indexmap", - "slab 0.4.2", + "slab 0.4.3", "tokio 0.2.25", "tokio-util", "tracing", @@ -2134,8 +2217,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f837c62de05dc9cc71ff6486cd85de8856a330395ae338a04bfcefe5e91075" dependencies = [ - "num", - "regex 1.4.3", + "num 0.2.1", + "regex 1.5.3", ] [[package]] @@ -2153,7 +2236,17 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" dependencies = [ - "ahash", + "ahash 0.4.7", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.2", + "rayon", ] [[package]] @@ -2162,7 +2255,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d99cf782f0dc4372d26846bec3de7804ceb5df083c2d4462c0b8d2330e894fa8" dependencies = [ - "hashbrown", + "hashbrown 0.9.1", ] [[package]] @@ -2258,7 +2351,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -2280,9 +2373,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" +checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" dependencies = [ "bytes 1.0.1", "fnv", @@ -2296,14 +2389,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ "bytes 0.5.6", - "http 0.2.3", + "http 0.2.4", ] [[package]] name = "http-client" -version = "6.3.4" +version = "6.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c12a6a451357392f3307325e9a15cbd27451abdaad96e74c30ea8786f615c4" +checksum = "5566ecc26bc6b04e773e680d66141fced78e091ad818e420d726c152b05a64ff" dependencies = [ "async-std", "async-trait", @@ -2319,9 +2412,9 @@ dependencies = [ [[package]] name = "http-types" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32613ebb139d1d430ef5783676f84abfa06fc5f2b4b5a25220cdeeff7e16ef5c" +checksum = "686f600cccfb9d96c45550bac47b592bc88191a0dd965e9d55848880c2c5a45f" dependencies = [ "anyhow", "async-channel", @@ -2329,11 +2422,11 @@ dependencies = [ "base64 0.13.0", "cookie", "futures-lite", - "http 0.2.3", + "http 0.2.4", "infer", "pin-project-lite 0.2.6", "rand 0.7.3", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "serde_qs", "serde_urlencoded 0.7.0", @@ -2342,9 +2435,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.3.5" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615caabe2c3160b313d52ccc905335f4ed5f10881dd63dc5699d47e90be85691" +checksum = "4a1ce40d6fc9764887c2fdc7305c3dcc429ba11ff981c1509416afd5697e4437" [[package]] name = "httpdate" @@ -2399,13 +2492,13 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 0.2.3", + "http 0.2.4", "http-body", "httparse", "httpdate", "itoa", - "pin-project 1.0.5", - "socket2", + "pin-project 1.0.7", + "socket2 0.3.19", "tokio 0.2.25", "tower-service", "tracing", @@ -2436,9 +2529,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -2482,8 +2575,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ "autocfg", - "hashbrown", - "serde 1.0.124", + "hashbrown 0.9.1", + "serde 1.0.125", ] [[package]] @@ -2541,7 +2634,7 @@ dependencies = [ "http 0.1.21", "lazy_static 1.4.0", "log 0.4.14", - "slab 0.4.2", + "slab 0.4.3", "sluice 0.4.2", ] @@ -2552,15 +2645,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" dependencies = [ "bytes 0.5.6", - "crossbeam-utils 0.8.3", + "crossbeam-utils 0.8.4", "curl", "curl-sys", "flume", "futures-lite", - "http 0.2.3", + "http 0.2.4", "log 0.4.14", "once_cell", - "slab 0.4.2", + "slab 0.4.3", "sluice 0.5.4", "tracing", "tracing-futures", @@ -2585,9 +2678,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "jobserver" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd" dependencies = [ "libc", ] @@ -2600,9 +2693,9 @@ checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" [[package]] name = "js-sys" -version = "0.3.48" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78" +checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" dependencies = [ "wasm-bindgen", ] @@ -2651,10 +2744,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "lexical-core" -version = "0.7.5" +name = "lexical" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21f866863575d0e1d654fbeeabdc927292fdf862873dc3c96c6f753357e13374" +checksum = "f404a90a744e32e8be729034fc33b90cf2a56418fbf594d69aa3c0214ad414e5" +dependencies = [ + "cfg-if 1.0.0", + "lexical-core", +] + +[[package]] +name = "lexical-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" dependencies = [ "arrayvec 0.5.2", "bitflags", @@ -2665,15 +2768,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.88" +version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a" +checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e" [[package]] name = "libgit2-sys" -version = "0.12.18+1.1.0" +version = "0.12.19+1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da6a42da88fc37ee1ecda212ffa254c25713532980005d5f7c0b0fbe7e6e885" +checksum = "f322155d574c8b9ebe991a04f6908bb49e68a79463338d24a43d6274cb6443e6" dependencies = [ "cc", "libc", @@ -2704,9 +2807,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" +checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" dependencies = [ "cc", "libc", @@ -2739,8 +2842,8 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" dependencies = [ - "serde 1.0.124", - "serde_test 1.0.124", + "serde 1.0.125", + "serde_test 1.0.125", ] [[package]] @@ -2754,9 +2857,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" dependencies = [ "scopeguard", ] @@ -2797,16 +2900,13 @@ dependencies = [ [[package]] name = "markup5ever" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae38d669396ca9b707bfc3db254bc382ddb94f57cc5c235f34623a669a01dab" +checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" dependencies = [ "log 0.4.14", "phf", "phf_codegen", - "serde 1.0.124", - "serde_derive", - "serde_json", "string_cache", "string_cache_codegen", "tendril", @@ -2844,9 +2944,18 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + +[[package]] +name = "memmap2" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397d1a6d6d0563c0f5462bbdae662cf6c784edf5e828e40c7257f85d82bf56dd" +dependencies = [ + "libc", +] [[package]] name = "memoffset" @@ -2859,9 +2968,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d" dependencies = [ "autocfg", ] @@ -2913,13 +3022,13 @@ dependencies = [ [[package]] name = "minus" -version = "3.3.0" +version = "3.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaddc201fbde99703a9a33c1909b9cc5a8ff57dd6237e014fd04b03b30e8b3b8" +checksum = "b330d6d62e75bece2022e09c468e54d612c46ea2e43a29721204c357e34d612d" dependencies = [ "async-std", "crossterm 0.19.0", - "regex 1.4.3", + "regex 1.5.3", "thiserror", ] @@ -2938,19 +3047,19 @@ dependencies = [ "log 0.4.14", "miow 0.2.2", "net2", - "slab 0.4.2", + "slab 0.4.3", "winapi 0.2.8", ] [[package]] name = "mio" -version = "0.7.9" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5dede4e2065b3842b8b0af444119f3aa331cc7cc2dd20388bfb0f5d5a38823a" +checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956" dependencies = [ "libc", "log 0.4.14", - "miow 0.3.6", + "miow 0.3.7", "ntapi", "winapi 0.3.9", ] @@ -2980,14 +3089,33 @@ dependencies = [ [[package]] name = "miow" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "socket2", "winapi 0.3.9", ] +[[package]] +name = "multiversion" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025c962a3dd3cc5e0e520aa9c612201d127dcdf28616974961a649dca64f5373" +dependencies = [ + "multiversion-macros", +] + +[[package]] +name = "multiversion-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af" +dependencies = [ + "proc-macro2", + "quote 1.0.9", + "syn 1.0.71", +] + [[package]] name = "native-tls" version = "0.2.7" @@ -3006,16 +3134,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nb-connect" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670361df1bc2399ee1ff50406a0d422587dd3bb0da596e1978fe8e05dabddf4f" -dependencies = [ - "libc", - "socket2", -] - [[package]] name = "neso" version = "0.5.0" @@ -3025,7 +3143,7 @@ dependencies = [ "bincode", "cfg-if 0.1.10", "log 0.4.14", - "serde 1.0.124", + "serde 1.0.125", "serde_derive", "wasm-bindgen", ] @@ -3058,9 +3176,9 @@ dependencies = [ [[package]] name = "nipper" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576d0e437aa08b447a207584463febe639d00b26b63121a9c038eff8371e0050" +checksum = "761382864693f4bb171abf9e8de181a320b00464a83a9a5071059057b1fe0116" dependencies = [ "cssparser", "html5ever", @@ -3120,7 +3238,7 @@ dependencies = [ "clap", "ctrlc", "dunce", - "futures 0.3.13", + "futures 0.3.14", "hamcrest2", "itertools", "log 0.4.14", @@ -3172,8 +3290,8 @@ name = "nu-ansi-term" version = "0.31.0" dependencies = [ "doc-comment", - "regex 1.4.3", - "serde 1.0.124", + "regex 1.5.3", + "serde 1.0.125", "serde_json", "winapi 0.3.9", ] @@ -3206,7 +3324,7 @@ dependencies = [ "encoding_rs", "filesize", "fs_extra", - "futures 0.3.13", + "futures 0.3.14", "futures-util", "futures_codec", "getset", @@ -3245,12 +3363,12 @@ dependencies = [ "quickcheck_macros", "rand 0.8.3", "rayon", - "regex 1.4.3", + "regex 1.5.3", "roxmltree", "rusqlite", "rust-embed", "rustyline", - "serde 1.0.124", + "serde 1.0.125", "serde_bytes", "serde_ini", "serde_json", @@ -3263,7 +3381,7 @@ dependencies = [ "sxd-document", "sxd-xpath", "tempfile", - "term", + "term 0.7.0", "term_size", "termcolor", "titlecase", @@ -3305,7 +3423,7 @@ dependencies = [ "encoding_rs", "filesize", "fs_extra", - "futures 0.3.13", + "futures 0.3.14", "getset", "glob", "hamcrest2", @@ -3337,6 +3455,7 @@ dependencies = [ "num-traits 0.2.14", "parking_lot 0.11.1", "pin-utils", + "polars", "ptree", "query_interface", "quick-xml 0.21.0", @@ -3344,12 +3463,12 @@ dependencies = [ "quickcheck_macros", "rand 0.7.3", "rayon", - "regex 1.4.3", + "regex 1.5.3", "roxmltree", "rusqlite", "rust-embed", "rustyline", - "serde 1.0.124", + "serde 1.0.125", "serde_bytes", "serde_ini", "serde_json", @@ -3362,7 +3481,7 @@ dependencies = [ "sxd-document", "sxd-xpath", "tempfile", - "term", + "term 0.7.0", "term_size", "termcolor", "titlecase", @@ -3402,7 +3521,7 @@ dependencies = [ "num-format", "num-traits 0.2.14", "query_interface", - "serde 1.0.124", + "serde 1.0.125", "sha2 0.9.3", "toml", "users", @@ -3426,7 +3545,7 @@ dependencies = [ "encoding_rs", "filesize", "fs_extra", - "futures 0.3.13", + "futures 0.3.14", "futures-util", "futures_codec", "getset", @@ -3450,7 +3569,7 @@ dependencies = [ "num-traits 0.2.14", "parking_lot 0.11.1", "rayon", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "tempfile", "term_size", @@ -3474,7 +3593,7 @@ dependencies = [ "nu-source", "num-bigint 0.3.2", "num-traits 0.2.14", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "serde_yaml", "toml", @@ -3489,8 +3608,8 @@ dependencies = [ "linked-hash-map 0.5.4", "nu-test-support", "num-traits 0.2.14", - "regex 1.4.3", - "serde 1.0.124", + "regex 1.5.3", + "serde 1.0.125", "serde_json", ] @@ -3512,7 +3631,7 @@ dependencies = [ "nu-test-support", "num-bigint 0.3.2", "num-traits 0.2.14", - "serde 1.0.124", + "serde 1.0.125", "shellexpand", "smart-default", ] @@ -3529,7 +3648,7 @@ dependencies = [ "nu-test-support", "nu-value-ext", "num-bigint 0.3.2", - "serde 1.0.124", + "serde 1.0.125", "serde_json", ] @@ -3558,7 +3677,8 @@ dependencies = [ "num-bigint 0.3.2", "num-integer", "num-traits 0.2.14", - "serde 1.0.124", + "polars", + "serde 1.0.125", "serde_bytes", "serde_json", "serde_yaml", @@ -3572,7 +3692,7 @@ dependencies = [ "derive-new", "getset", "pretty", - "serde 1.0.124", + "serde 1.0.125", "termcolor", ] @@ -3580,7 +3700,7 @@ dependencies = [ name = "nu-stream" version = "0.31.0" dependencies = [ - "futures 0.3.13", + "futures 0.3.14", "nu-errors", "nu-protocol", "nu-source", @@ -3590,8 +3710,9 @@ dependencies = [ name = "nu-table" version = "0.31.0" dependencies = [ + "nu-ansi-term 0.31.0", - "regex 1.4.3", + "regex 1.5.3", "unicode-width", ] @@ -3662,7 +3783,7 @@ name = "nu_plugin_fetch" version = "0.31.0" dependencies = [ "base64 0.13.0", - "futures 0.3.13", + "futures 0.3.14", "mime", "nu-errors", "nu-plugin", @@ -3722,7 +3843,7 @@ dependencies = [ "nu-plugin", "nu-protocol", "nu-source", - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -3730,7 +3851,7 @@ name = "nu_plugin_post" version = "0.31.0" dependencies = [ "base64 0.13.0", - "futures 0.3.13", + "futures 0.3.14", "nu-errors", "nu-plugin", "nu-protocol", @@ -3745,7 +3866,7 @@ dependencies = [ name = "nu_plugin_ps" version = "0.31.0" dependencies = [ - "futures 0.3.13", + "futures 0.3.14", "futures-timer", "nu-errors", "nu-plugin", @@ -3771,7 +3892,7 @@ dependencies = [ name = "nu_plugin_s3" version = "0.31.0" dependencies = [ - "futures 0.3.13", + "futures 0.3.14", "nu-errors", "nu-plugin", "nu-protocol", @@ -3809,7 +3930,7 @@ dependencies = [ name = "nu_plugin_sys" version = "0.31.0" dependencies = [ - "futures 0.3.13", + "futures 0.3.14", "futures-util", "nu-errors", "nu-plugin", @@ -3896,13 +4017,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" dependencies = [ "num-bigint 0.2.6", - "num-complex", + "num-complex 0.2.4", "num-integer", "num-iter", "num-rational 0.2.4", "num-traits 0.2.14", ] +[[package]] +name = "num" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f" +dependencies = [ + "num-bigint 0.3.2", + "num-complex 0.3.1", + "num-integer", + "num-iter", + "num-rational 0.3.2", + "num-traits 0.2.14", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint 0.4.0", + "num-complex 0.4.0", + "num-integer", + "num-iter", + "num-rational 0.4.0", + "num-traits 0.2.14", +] + [[package]] name = "num-bigint" version = "0.2.6" @@ -3923,7 +4072,18 @@ dependencies = [ "autocfg", "num-integer", "num-traits 0.2.14", - "serde 1.0.124", + "serde 1.0.125", +] + +[[package]] +name = "num-bigint" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.14", ] [[package]] @@ -3936,6 +4096,24 @@ dependencies = [ "num-traits 0.2.14", ] +[[package]] +name = "num-complex" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" +dependencies = [ + "num-traits 0.2.14", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits 0.2.14", +] + [[package]] name = "num-format" version = "0.4.0" @@ -3987,6 +4165,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" dependencies = [ "autocfg", + "num-bigint 0.3.2", + "num-integer", + "num-traits 0.2.14", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint 0.4.0", "num-integer", "num-traits 0.2.14", ] @@ -4090,9 +4281,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "open" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e9f1bdf15cd1f5a00cc9002a733a6ee6d0ff562491852d59652471c4a389f7" +checksum = "1711eb4b31ce4ad35b0f316d8dfba4fe5c7ad601c448446d84aae7a896627b20" dependencies = [ "which", "winapi 0.3.9", @@ -4100,15 +4291,15 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.32" +version = "0.10.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70" +checksum = "6d7830286ad6a3973c0f1d9b73738f69c76b739301d0229c4b96501695cbe4c8" dependencies = [ "bitflags", "cfg-if 1.0.0", "foreign-types", - "lazy_static 1.4.0", "libc", + "once_cell", "openssl-sys", ] @@ -4120,9 +4311,9 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-sys" -version = "0.9.60" +version = "0.9.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6" +checksum = "fa52160d45fa2e7608d504b7c3a3355afed615e6d8b627a74458634ba21b69bd" dependencies = [ "autocfg", "cc", @@ -4164,7 +4355,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", - "lock_api 0.4.2", + "lock_api 0.4.4", "parking_lot_core 0.8.3", ] @@ -4192,7 +4383,7 @@ dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.2.5", + "redox_syscall 0.2.7", "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4203,7 +4394,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" dependencies = [ - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -4294,7 +4485,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -4308,42 +4499,42 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" +checksum = "918192b5c59119d51e0cd221f4d49dde9112824ba717369e903c97d076083d0f" dependencies = [ - "pin-project-internal 0.4.27", + "pin-project-internal 0.4.28", ] [[package]] name = "pin-project" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63" +checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" dependencies = [ - "pin-project-internal 1.0.5", + "pin-project-internal 1.0.7", ] [[package]] name = "pin-project-internal" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" +checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] name = "pin-project-internal" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b" +checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -4380,7 +4571,7 @@ dependencies = [ "chrono", "indexmap", "line-wrap", - "serde 1.0.124", + "serde 1.0.125", "xml-rs", ] @@ -4409,12 +4600,89 @@ dependencies = [ ] [[package]] -name = "polling" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" +name = "polars" +version = "0.13.1" +source = "git+https://github.com/ritchie46/polars?rev=3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0#3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0" dependencies = [ - "cfg-if 0.1.10", + "polars-core", + "polars-io", + "polars-lazy", +] + +[[package]] +name = "polars-arrow" +version = "0.13.0" +source = "git+https://github.com/ritchie46/polars?rev=3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0#3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0" +dependencies = [ + "arrow", + "num 0.4.0", + "thiserror", +] + +[[package]] +name = "polars-core" +version = "0.13.2" +source = "git+https://github.com/ritchie46/polars?rev=3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0#3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0" +dependencies = [ + "ahash 0.7.2", + "anyhow", + "arrow", + "chrono", + "hashbrown 0.11.2", + "itertools", + "lazy_static 1.4.0", + "num 0.4.0", + "num_cpus", + "polars-arrow", + "prettytable-rs", + "rayon", + "regex 1.5.3", + "thiserror", + "unsafe_unwrap", +] + +[[package]] +name = "polars-io" +version = "0.13.0" +source = "git+https://github.com/ritchie46/polars?rev=3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0#3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0" +dependencies = [ + "ahash 0.7.2", + "anyhow", + "arrow", + "csv", + "csv-core", + "fast-float", + "lazy_static 1.4.0", + "lexical", + "memmap2", + "num 0.4.0", + "num_cpus", + "polars-arrow", + "polars-core", + "rayon", + "regex 1.5.3", +] + +[[package]] +name = "polars-lazy" +version = "0.13.0" +source = "git+https://github.com/ritchie46/polars?rev=3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0#3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0" +dependencies = [ + "ahash 0.7.2", + "itertools", + "polars-arrow", + "polars-core", + "polars-io", + "rayon", +] + +[[package]] +name = "polling" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc12d774e799ee9ebae13f4076ca003b40d18a11ac0f3641e6f899618580b7b" +dependencies = [ + "cfg-if 1.0.0", "libc", "log 0.4.14", "wepoll-sys", @@ -4463,6 +4731,20 @@ dependencies = [ "log 0.4.14", ] +[[package]] +name = "prettytable-rs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fd04b170004fa2daccf418a7f8253aaf033c27760b5f225889024cf66d7ac2e" +dependencies = [ + "atty", + "csv", + "encode_unicode", + "lazy_static 1.4.0", + "term 0.5.2", + "unicode-width", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -4472,7 +4754,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", "version_check", ] @@ -4501,25 +4783,25 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" dependencies = [ - "unicode-xid 0.2.1", + "unicode-xid 0.2.2", ] [[package]] name = "ptree" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fd400102d16e4e90e0735c0eb1808ae569a4e62fb8e65a7d1e700611cae6ae" +checksum = "beb17280503804146233f15c98385d3c65f0330663ce0b602a1e4c9379e96b4d" dependencies = [ "ansi_term 0.12.1", "atty", "config", "directories", "petgraph", - "serde 1.0.124", + "serde 1.0.125", "serde-value", "tint", ] @@ -4586,7 +4868,7 @@ checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -4773,9 +5055,9 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" dependencies = [ - "crossbeam-channel 0.5.0", + "crossbeam-channel 0.5.1", "crossbeam-deque 0.8.0", - "crossbeam-utils 0.8.3", + "crossbeam-utils 0.8.4", "lazy_static 1.4.0", "num_cpus", ] @@ -4803,9 +5085,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +checksum = "85dd92e586f7355c633911e11f77f3d12f04b1b1bd76a198bd34ae3af8341ef2" dependencies = [ "bitflags", ] @@ -4828,7 +5110,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ "getrandom 0.2.2", - "redox_syscall 0.2.5", + "redox_syscall 0.2.7", ] [[package]] @@ -4840,20 +5122,19 @@ dependencies = [ "aho-corasick 0.6.10", "memchr", "regex-syntax 0.5.6", - "thread_local 0.3.6", + "thread_local", "utf8-ranges", ] [[package]] name = "regex" -version = "1.4.3" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "ce5f1ceb7f74abbce32601642fcf8e8508a8a8991e0621c7d750295b9095702b" dependencies = [ - "aho-corasick 0.7.15", + "aho-corasick 0.7.18", "memchr", - "regex-syntax 0.6.22", - "thread_local 1.1.3", + "regex-syntax 0.6.25", ] [[package]] @@ -4876,9 +5157,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.22" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "relay" @@ -4909,7 +5190,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "http 0.2.3", + "http 0.2.4", "http-body", "hyper 0.13.10", "hyper-tls", @@ -4922,13 +5203,13 @@ dependencies = [ "native-tls", "percent-encoding 2.1.0", "pin-project-lite 0.2.6", - "serde 1.0.124", + "serde 1.0.125", "serde_urlencoded 0.7.0", "tokio 0.2.25", "tokio-tls", "url", "wasm-bindgen", - "wasm-bindgen-futures 0.4.21", + "wasm-bindgen-futures 0.4.23", "web-sys", "winreg", ] @@ -4941,9 +5222,9 @@ checksum = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560" [[package]] name = "roxmltree" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf58a7d05b28e14b1e8902fa04c4d5d6109f5450ef71a5e6597f66e53f541504" +checksum = "921904a62e410e37e215c40381b7117f830d9d89ba60ab5236170541dd25646b" dependencies = [ "xmlparser", ] @@ -4972,7 +5253,7 @@ dependencies = [ "base64 0.13.0", "blake2b_simd", "constant_time_eq", - "crossbeam-utils 0.8.3", + "crossbeam-utils 0.8.4", ] [[package]] @@ -5008,7 +5289,7 @@ dependencies = [ "proc-macro2", "quote 1.0.9", "rust-embed-utils", - "syn 1.0.63", + "syn 1.0.71", "walkdir", ] @@ -5035,8 +5316,8 @@ checksum = "a93c95e3d5c1d997e6e4ba9bda898f4e1d73934cd05510c972f10087d0ef00c1" dependencies = [ "byteorder", "lazy_static 1.4.0", - "num", - "serde 1.0.124", + "num 0.2.1", + "serde 1.0.125", ] [[package]] @@ -5109,10 +5390,10 @@ dependencies = [ "dyn-clone", "failure", "failure_derive", - "futures 0.3.13", + "futures 0.3.14", "hmac 0.4.2", "hmac-sha1", - "http 0.2.3", + "http 0.2.4", "hyper 0.11.27", "log 0.4.14", "md5 0.3.8", @@ -5122,7 +5403,7 @@ dependencies = [ "reqwest", "rust-crypto", "rustc-serialize", - "serde 1.0.124", + "serde 1.0.125", "serde_derive", "serde_json", "sha2 0.6.0", @@ -5175,9 +5456,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "security-framework" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d493c5f39e02dfb062cd8f33301f90f9b13b650e8c1b1d0fd75c19dd64bff69d" +checksum = "3670b1d2fdf6084d192bc71ead7aabe6c06aa2ea3fbd9cc3ac111fa5c2b1bd84" dependencies = [ "bitflags", "core-foundation", @@ -5188,9 +5469,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee48cdde5ed250b0d3252818f646e174ab414036edb884dde62d80a3ac6082d" +checksum = "3676258fd3cfe2c9a0ec99ce3038798d847ce3e4bb17746373eb9f0f1ac16339" dependencies = [ "core-foundation-sys", "libc", @@ -5257,9 +5538,9 @@ checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" [[package]] name = "serde" -version = "1.0.124" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f" +checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" dependencies = [ "serde_derive", ] @@ -5273,7 +5554,7 @@ dependencies = [ "lazy_static 1.4.0", "linked-hash-map 0.3.0", "num-traits 0.1.43", - "regex 1.4.3", + "regex 1.5.3", "serde 0.8.23", ] @@ -5284,7 +5565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a65a7291a8a568adcae4c10a677ebcedbc6c9cec91c054dee2ce40b0e3290eb" dependencies = [ "ordered-float", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -5293,18 +5574,18 @@ version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" dependencies = [ - "serde 1.0.124", + "serde 1.0.125", ] [[package]] name = "serde_derive" -version = "1.0.124" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b" +checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -5314,7 +5595,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb236687e2bb073a7521c021949be944641e671b8505a94069ca37b656c81139" dependencies = [ "result", - "serde 1.0.124", + "serde 1.0.125", "void", ] @@ -5327,7 +5608,7 @@ dependencies = [ "indexmap", "itoa", "ryu", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -5338,7 +5619,7 @@ checksum = "5af82de3c6549b001bec34961ff2d6a54339a87bab37ce901b693401f27de6cb" dependencies = [ "data-encoding", "percent-encoding 2.1.0", - "serde 1.0.124", + "serde 1.0.125", "thiserror", ] @@ -5353,11 +5634,11 @@ dependencies = [ [[package]] name = "serde_test" -version = "1.0.124" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c59238fc0762e8aee0c6ec5f1a2e61d580d94f6274b9fcc91dc51d03fb40ba" +checksum = "b4bb5fef7eaf5a97917567183607ac4224c5b451c15023930f23b937cce879fe" dependencies = [ - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -5368,7 +5649,7 @@ checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" dependencies = [ "dtoa", "itoa", - "serde 1.0.124", + "serde 1.0.125", "url", ] @@ -5381,7 +5662,7 @@ dependencies = [ "form_urlencoded", "itoa", "ryu", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -5392,7 +5673,7 @@ checksum = "15654ed4ab61726bf918a39cb8d98a2e2995b002387807fa6ba58fdf7f59bb23" dependencies = [ "dtoa", "linked-hash-map 0.5.4", - "serde 1.0.124", + "serde 1.0.125", "yaml-rust", ] @@ -5415,7 +5696,7 @@ checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -5468,9 +5749,9 @@ dependencies = [ [[package]] name = "shadow-rs" -version = "0.5.24" +version = "0.5.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d24431d84176415baccf1a5f4996365fbe619ed0797131d84627f00f568de2" +checksum = "110e0e7bde3d3f0f2a4284f250c40f1f6ed7ef1eef281598f8eb76838ac42305" dependencies = [ "chrono", "git2", @@ -5498,7 +5779,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" dependencies = [ "libc", - "mio 0.7.9", + "mio 0.7.11", "signal-hook-registry", ] @@ -5513,9 +5794,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" +checksum = "cbce6d4507c7e4a3962091436e56e95290cb71fa302d0d270e32130b75fbff27" [[package]] name = "slab" @@ -5525,9 +5806,9 @@ checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" [[package]] name = "slab" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" [[package]] name = "sluice" @@ -5580,7 +5861,7 @@ checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -5595,12 +5876,22 @@ dependencies = [ ] [[package]] -name = "spinning_top" -version = "0.2.2" +name = "socket2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e529d73e80d64b5f2631f9035113347c578a1c9c7774b83a2b880788459ab36" +checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" dependencies = [ - "lock_api 0.4.2", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "spinning_top" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd0ab6b8c375d2d963503b90d3770010d95bc3b5f98036f948dee24bf4e8879" +dependencies = [ + "lock_api 0.4.4", ] [[package]] @@ -5611,9 +5902,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "standback" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2beb4d1860a61f571530b3f855a1b538d0200f7871c63331ecd6f17b1f014f8" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" dependencies = [ "version_check", ] @@ -5652,9 +5943,9 @@ checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ "proc-macro2", "quote 1.0.9", - "serde 1.0.124", + "serde 1.0.125", "serde_derive", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -5666,11 +5957,11 @@ dependencies = [ "base-x", "proc-macro2", "quote 1.0.9", - "serde 1.0.124", + "serde 1.0.125", "serde_derive", "serde_json", "sha1 0.6.0", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -5681,9 +5972,9 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" [[package]] name = "str-buf" -version = "1.0.5" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a" +checksum = "a66ae6a6cd930c97707cb3f1b62aadb8ddddd2fefa9df539564b3bfaa15dd31f" [[package]] name = "string_cache" @@ -5695,7 +5986,7 @@ dependencies = [ "new_debug_unreachable", "phf_shared", "precomputed-hash", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -5744,7 +6035,7 @@ dependencies = [ "log 0.4.14", "mime", "mime_guess", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "serde_urlencoded 0.6.1", "url", @@ -5770,7 +6061,7 @@ dependencies = [ "mime_guess", "once_cell", "pin-project-lite 0.2.6", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "web-sys", ] @@ -5809,13 +6100,13 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.63" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd9bc7ccc2688b3344c2f48b9b546648b25ce0b20fc717ee7fa7981a8ca9717" +checksum = "ad184cc9470f9117b2ac6817bfe297307418819ba40552f9b3846f05c33d5373" dependencies = [ "proc-macro2", "quote 1.0.9", - "unicode-xid 0.2.1", + "unicode-xid 0.2.2", ] [[package]] @@ -5835,8 +6126,8 @@ checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", - "unicode-xid 0.2.1", + "syn 1.0.71", + "unicode-xid 0.2.2", ] [[package]] @@ -5854,8 +6145,8 @@ dependencies = [ "lazycell", "onig", "plist", - "regex-syntax 0.6.22", - "serde 1.0.124", + "regex-syntax 0.6.25", + "serde 1.0.125", "serde_derive", "serde_json", "walkdir", @@ -5893,7 +6184,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "rand 0.8.3", - "redox_syscall 0.2.5", + "redox_syscall 0.2.7", "remove_dir_all", "winapi 0.3.9", ] @@ -5909,6 +6200,17 @@ dependencies = [ "utf-8", ] +[[package]] +name = "term" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +dependencies = [ + "byteorder", + "dirs 1.0.5", + "winapi 0.3.9", +] + [[package]] name = "term" version = "0.7.0" @@ -5982,7 +6284,7 @@ checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -5994,15 +6296,6 @@ dependencies = [ "lazy_static 1.4.0", ] -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - [[package]] name = "tiff" version = "0.6.1" @@ -6027,9 +6320,9 @@ dependencies = [ [[package]] name = "time" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7" +checksum = "08a8cbfbf47955132d0202d1662f49b2423ae35862aee471f3ba4b133358f372" dependencies = [ "const_fn", "libc", @@ -6060,7 +6353,7 @@ dependencies = [ "proc-macro2", "quote 1.0.9", "standback", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -6074,9 +6367,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" dependencies = [ "tinyvec_macros", ] @@ -6094,7 +6387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f565e410cfc24c2f2a89960b023ca192689d7f77d3f8d4f4af50c2d8affe1117" dependencies = [ "lazy_static 1.4.0", - "regex 1.4.3", + "regex 1.5.3", ] [[package]] @@ -6136,7 +6429,7 @@ dependencies = [ "mio 0.6.23", "num_cpus", "pin-project-lite 0.1.12", - "slab 0.4.2", + "slab 0.4.3", "tokio-macros", ] @@ -6220,7 +6513,7 @@ checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] @@ -6254,7 +6547,7 @@ dependencies = [ "mio 0.6.23", "num_cpus", "parking_lot 0.9.0", - "slab 0.4.2", + "slab 0.4.3", "tokio-executor", "tokio-io", "tokio-sync", @@ -6306,7 +6599,7 @@ dependencies = [ "lazy_static 1.4.0", "log 0.4.14", "num_cpus", - "slab 0.4.2", + "slab 0.4.3", "tokio-executor", ] @@ -6318,7 +6611,7 @@ checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ "crossbeam-utils 0.7.2", "futures 0.1.31", - "slab 0.4.2", + "slab 0.4.3", "tokio-executor", ] @@ -6385,7 +6678,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" dependencies = [ - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -6396,9 +6689,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" dependencies = [ "cfg-if 1.0.0", "log 0.4.14", @@ -6409,20 +6702,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41768be5b9f3489491825f56f01f25290aa1d3e7cc97e182d4d34360493ba6fa" +checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", ] [[package]] name = "tracing-core" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" dependencies = [ "lazy_static 1.4.0", ] @@ -6433,7 +6726,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 1.0.5", + "pin-project 1.0.7", "tracing", ] @@ -6479,9 +6772,9 @@ checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" [[package]] name = "typenum" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" [[package]] name = "ucd-trie" @@ -6512,9 +6805,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" dependencies = [ "matches", ] @@ -6548,9 +6841,9 @@ checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "universal-hash" @@ -6562,6 +6855,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "unsafe_unwrap" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1230ec65f13e0f9b28d789da20d2d419511893ea9dac2c1f4ef67b8b14e5da80" + [[package]] name = "url" version = "2.2.1" @@ -6572,7 +6871,7 @@ dependencies = [ "idna", "matches", "percent-encoding 2.1.0", - "serde 1.0.124", + "serde 1.0.125", ] [[package]] @@ -6597,9 +6896,9 @@ dependencies = [ [[package]] name = "utf-8" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8-ranges" @@ -6609,9 +6908,9 @@ checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" [[package]] name = "utf8-width" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9071ac216321a4470a69fb2b28cfc68dcd1a39acd877c8be8e014df6772d8efa" +checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" [[package]] name = "utf8parse" @@ -6645,15 +6944,9 @@ dependencies = [ [[package]] name = "vcpkg" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" - -[[package]] -name = "vec-arena" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +checksum = "cbdbff6266a24120518560b5dc983096efb98462e51d0d68169895b237be3e5d" [[package]] name = "vec_map" @@ -6663,9 +6956,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "void" @@ -6690,9 +6983,9 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", "winapi 0.3.9", @@ -6734,28 +7027,28 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7" +checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" dependencies = [ "cfg-if 1.0.0", - "serde 1.0.124", + "serde 1.0.125", "serde_json", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8" +checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" dependencies = [ "bumpalo", "lazy_static 1.4.0", "log 0.4.14", "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", "wasm-bindgen-shared", ] @@ -6777,9 +7070,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.21" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e67a5806118af01f0d9045915676b22aaebecf4178ae7021bc171dab0b897ab" +checksum = "81b8b767af23de6ac18bf2168b690bed2902743ddf0fb39252e36f9e2bfc63ea" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -6789,9 +7082,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b" +checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" dependencies = [ "quote 1.0.9", "wasm-bindgen-macro-support", @@ -6799,28 +7092,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e" +checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" dependencies = [ "proc-macro2", "quote 1.0.9", - "syn 1.0.63", + "syn 1.0.71", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.71" +version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1" +checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" [[package]] name = "web-sys" -version = "0.3.48" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b" +checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" dependencies = [ "js-sys", "wasm-bindgen", @@ -6839,9 +7132,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a32b378380f4e9869b22f0b5177c68a5519f03b3454fde0b291455ddbae266c" +checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" [[package]] name = "wepoll-sys" @@ -6914,6 +7207,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -6950,13 +7252,15 @@ dependencies = [ ] [[package]] -name = "xcb" -version = "0.9.0" +name = "x11rb" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62056f63138b39116f82a540c983cc11f1c90cd70b3d492a70c25eaa50bd22a6" +checksum = "6ffb080b3f2f616242a4eb8e7d325035312127901025b0052bc3154a282d0f19" dependencies = [ - "libc", - "log 0.4.14", + "gethostname", + "nix", + "winapi 0.3.9", + "winapi-wsapoll", ] [[package]] @@ -6982,9 +7286,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8264fcea9b7a036a4a5103d7153e988dbc2ebbafb34f68a3c2d404b6b82d74b6" +checksum = "9c83dc9b784d252127720168abd71ea82bf8c3d96b17dc565b5e2a02854f2b27" dependencies = [ "byteorder", "bzip2", diff --git a/Cargo.toml b/Cargo.toml index 7e6fd678b..6680516d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -158,6 +158,15 @@ zip-support = ["nu-cli/zip", "nu-command/zip"] #This is disabled in extra for now table-pager = ["nu-command/table-pager"] +#dataframe feature for nushell +dataframe = [ + "nu-protocol/dataframe", + "nu-command/dataframe", + "nu-value-ext/dataframe", + "nu-data/dataframe" +] + + [profile.release] #strip = "symbols" #Couldn't get working +nightly codegen-units = 1 #Reduce parallel codegen units diff --git a/crates/nu-command/Cargo.toml b/crates/nu-command/Cargo.toml index 20f6de122..4a493abeb 100644 --- a/crates/nu-command/Cargo.toml +++ b/crates/nu-command/Cargo.toml @@ -99,6 +99,8 @@ uuid_crate = { package = "uuid", version = "0.8.2", features = ["v4"], optional which = { version = "4.1.0", optional = true } zip = { version = "0.5.9", optional = true } +polars = {version="0.13.1", git = "https://github.com/ritchie46/polars", rev = "3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0", optional = true} + [target.'cfg(unix)'.dependencies] umask = "1.0.0" users = "0.11.0" @@ -130,3 +132,4 @@ trash-support = ["trash"] directories = ["directories-next"] dirs = ["dirs-next"] table-pager = ["minus", "crossterm"] +dataframe = ["nu-protocol/dataframe", "polars"] diff --git a/crates/nu-command/src/commands.rs b/crates/nu-command/src/commands.rs index 0bd50be64..4654a1f01 100644 --- a/crates/nu-command/src/commands.rs +++ b/crates/nu-command/src/commands.rs @@ -26,6 +26,8 @@ pub(crate) mod compact; pub(crate) mod config; pub(crate) mod constants; pub(crate) mod cp; +#[cfg(feature = "dataframe")] +pub(crate) mod dataframe; pub(crate) mod date; pub(crate) mod debug; pub(crate) mod def; @@ -184,6 +186,8 @@ pub(crate) use clear::Clear; pub(crate) mod touch; pub(crate) use all::Command as All; pub(crate) use any::Command as Any; +#[cfg(feature = "dataframe")] +pub(crate) use dataframe::Dataframe; pub(crate) use enter::Enter; pub(crate) use every::Every; pub(crate) use exec::Exec; diff --git a/crates/nu-command/src/commands/all.rs b/crates/nu-command/src/commands/all.rs index d570d5319..d66ea1959 100644 --- a/crates/nu-command/src/commands/all.rs +++ b/crates/nu-command/src/commands/all.rs @@ -89,7 +89,7 @@ fn all(args: CommandArgs) -> Result { UntaggedValue::boolean(true).into_value(&tag), )); - // Variables in nu are immutable. Having the same variable accross invocations + // Variables in nu are immutable. Having the same variable across invocations // of evaluate_baseline_expr does not mutate the variables and those each // invocations are independent of each other! scope.enter_scope(); diff --git a/crates/nu-command/src/commands/autoview/command.rs b/crates/nu-command/src/commands/autoview/command.rs index b2fe059f4..3fce37da8 100644 --- a/crates/nu-command/src/commands/autoview/command.rs +++ b/crates/nu-command/src/commands/autoview/command.rs @@ -228,6 +228,20 @@ pub fn autoview(args: CommandArgs) -> Result { out!("{:?}", row); } } + #[cfg(feature = "dataframe")] + Value { + value: UntaggedValue::Dataframe(df), + .. + } => { + if let Some(table) = table { + // TODO. Configure the parameter rows from file. It can be + // adjusted to see a certain amount of values in the head + let command_args = + create_default_command_args(&context, df.print()?.into(), tag); + let result = table.run(command_args)?; + let _ = result.collect::>(); + } + } Value { value: UntaggedValue::Primitive(Primitive::Nothing), .. diff --git a/crates/nu-command/src/commands/dataframe.rs b/crates/nu-command/src/commands/dataframe.rs new file mode 100644 index 000000000..e2769a51a --- /dev/null +++ b/crates/nu-command/src/commands/dataframe.rs @@ -0,0 +1,139 @@ +use std::path::PathBuf; + +use crate::prelude::*; +use nu_engine::WholeStreamCommand; +use nu_errors::ShellError; +use nu_protocol::{dataframe::NuDataFrame, hir::NamedValue, Signature, SyntaxShape, UntaggedValue}; + +use nu_source::Tagged; +use polars::prelude::{CsvReader, SerReader}; + +pub struct Dataframe; + +#[derive(Deserialize)] +pub struct OpenArgs { + file: Tagged, +} + +impl WholeStreamCommand for Dataframe { + fn name(&self) -> &str { + "dataframe" + } + + fn usage(&self) -> &str { + "Creates a dataframe from a csv file" + } + + fn signature(&self) -> Signature { + Signature::build("dataframe").named( + "file", + SyntaxShape::FilePath, + "the file path to load values from", + Some('f'), + ) + } + + fn run(&self, args: CommandArgs) -> Result { + load_dataframe(args) + } + + fn examples(&self) -> Vec { + vec![ + Example { + description: "Takes a file name and creates a dataframe", + example: "dataframe -f test.csv", + result: None, + }, + Example { + description: "Takes an input stream and converts it to a dataframe", + example: "echo [[a b];[1 2] [3 4]] | dataframe", + result: None, + }, + ] + } +} + +// Creates a dataframe from either a file or a table. +// If both options are found, then an error is returned to the user. +// The InputStream can have a table and a dictionary as input variable. +fn load_dataframe(args: CommandArgs) -> Result { + // The file has priority over stream input + if let Some(NamedValue::Value(_, _)) = args + .call_info() + .args + .named + .as_ref() + .map(|named| named.named.get("file")) + .flatten() + { + return create_from_file(args); + } + + create_from_input(args) +} + +fn create_from_file(args: CommandArgs) -> Result { + // Command Tag. This marks where the command is located and the name + // of the command used + let tag = args.call_info.name_tag.clone(); + + // Parsing the arguments that the function uses + let (OpenArgs { file }, _) = args.process()?; + + // Needs more detail and arguments while loading the dataframe + // Options: + // - has header + // - infer schema + // - delimiter + // - csv or parquet <- extracted from extension + let csv_reader = match CsvReader::from_path(&file.item) { + Ok(csv_reader) => csv_reader, + Err(e) => { + return Err(ShellError::labeled_error( + "Unable to parse file", + format!("{}", e), + &file.tag, + )) + } + }; + + let df = match csv_reader.infer_schema(None).has_header(true).finish() { + Ok(csv_reader) => csv_reader, + Err(e) => { + return Err(ShellError::labeled_error( + "Error while parsing dataframe", + format!("{}", e), + &file.tag, + )) + } + }; + + let file_name = match file.item.into_os_string().into_string() { + Ok(name) => name, + Err(e) => { + return Err(ShellError::labeled_error( + "Error with file name", + format!("{:?}", e), + &file.tag, + )) + } + }; + + let nu_dataframe = NuDataFrame { + dataframe: Some(df), + name: file_name, + }; + + let init = InputStream::one(UntaggedValue::Dataframe(nu_dataframe).into_value(&tag)); + + Ok(init.to_output_stream()) +} + +fn create_from_input(args: CommandArgs) -> Result { + let tag = args.call_info.name_tag.clone(); + let args = args.evaluate_once()?; + let df = NuDataFrame::try_from_iter(args.input, &tag)?; + let init = InputStream::one(UntaggedValue::Dataframe(df).into_value(&tag)); + + Ok(init.to_output_stream()) +} diff --git a/crates/nu-command/src/commands/default_context.rs b/crates/nu-command/src/commands/default_context.rs index 1d14e763a..b17f1bb33 100644 --- a/crates/nu-command/src/commands/default_context.rs +++ b/crates/nu-command/src/commands/default_context.rs @@ -251,6 +251,8 @@ pub fn create_default_context(interactive: bool) -> Result Result { UntaggedValue::Block(_) | UntaggedValue::Primitive(Primitive::Range(_)) => { serde_json::Value::Null } + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => serde_json::Value::Null, UntaggedValue::Primitive(Primitive::Binary(b)) => serde_json::Value::Array( b.iter() .map(|x| { diff --git a/crates/nu-command/src/commands/to_toml.rs b/crates/nu-command/src/commands/to_toml.rs index b0cd99d68..741a6c88a 100644 --- a/crates/nu-command/src/commands/to_toml.rs +++ b/crates/nu-command/src/commands/to_toml.rs @@ -75,6 +75,8 @@ fn helper(v: &Value) -> Result { UntaggedValue::Table(l) => toml::Value::Array(collect_values(l)?), UntaggedValue::Error(e) => return Err(e.clone()), UntaggedValue::Block(_) => toml::Value::String("".to_string()), + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => toml::Value::String("".to_string()), UntaggedValue::Primitive(Primitive::Range(_)) => toml::Value::String("".to_string()), UntaggedValue::Primitive(Primitive::Binary(b)) => { toml::Value::Array(b.iter().map(|x| toml::Value::Integer(*x as i64)).collect()) @@ -218,7 +220,7 @@ mod tests { [owner] name = "Tom Preston-Werner" dob = 1979-05-27T07:32:00-08:00 # First class dates - + [dependencies] rustyline = "4.1.0" sysinfo = "0.8.4" diff --git a/crates/nu-command/src/commands/to_yaml.rs b/crates/nu-command/src/commands/to_yaml.rs index 7668d3e75..bd7a9bcec 100644 --- a/crates/nu-command/src/commands/to_yaml.rs +++ b/crates/nu-command/src/commands/to_yaml.rs @@ -95,6 +95,8 @@ pub fn value_to_yaml_value(v: &Value) -> Result { UntaggedValue::Block(_) | UntaggedValue::Primitive(Primitive::Range(_)) => { serde_yaml::Value::Null } + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => serde_yaml::Value::Null, UntaggedValue::Primitive(Primitive::Binary(b)) => serde_yaml::Value::Sequence( b.iter() .map(|x| serde_yaml::Value::Number(serde_yaml::Number::from(*x))) diff --git a/crates/nu-command/src/commands/uniq.rs b/crates/nu-command/src/commands/uniq.rs index 5598dba12..69cebbd79 100644 --- a/crates/nu-command/src/commands/uniq.rs +++ b/crates/nu-command/src/commands/uniq.rs @@ -155,6 +155,14 @@ fn uniq(args: CommandArgs) -> Result { item.0.tag.span, )) } + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => { + return Err(ShellError::labeled_error( + "uniq -c cannot operate on dataframes.", + "source", + item.0.tag.span, + )) + } UntaggedValue::Error(_) | UntaggedValue::Block(_) => item.0, } }; diff --git a/crates/nu-data/Cargo.toml b/crates/nu-data/Cargo.toml index 7f222ba27..f0e0bffae 100644 --- a/crates/nu-data/Cargo.toml +++ b/crates/nu-data/Cargo.toml @@ -43,3 +43,4 @@ users = "0.11.0" [features] directories = ["directories-next"] dirs = ["dirs-next"] +dataframe = ["nu-protocol/dataframe"] diff --git a/crates/nu-data/src/base/shape.rs b/crates/nu-data/src/base/shape.rs index 41a167427..9afbe09f0 100644 --- a/crates/nu-data/src/base/shape.rs +++ b/crates/nu-data/src/base/shape.rs @@ -43,6 +43,10 @@ pub enum InlineShape { // TODO: Error type Error, + // TODO: Dataframe type + #[cfg(feature = "dataframe")] + Dataframe, + // Stream markers (used as bookend markers rather than actual values) BeginningOfStream, EndOfStream, @@ -123,6 +127,8 @@ impl InlineShape { UntaggedValue::Table(table) => InlineShape::from_table(table.iter()), UntaggedValue::Error(_) => InlineShape::Error, UntaggedValue::Block(_) => InlineShape::Block, + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => InlineShape::Dataframe, } } @@ -312,6 +318,8 @@ impl PrettyDebug for FormatInlineShape { .group(), InlineShape::Block => DbgDocBldr::opaque("block"), InlineShape::Error => DbgDocBldr::error("error"), + #[cfg(feature = "dataframe")] + InlineShape::Dataframe => DbgDocBldr::error("dataframe_pretty_FormatInlineShape"), InlineShape::BeginningOfStream => DbgDocBldr::blank(), InlineShape::EndOfStream => DbgDocBldr::blank(), } diff --git a/crates/nu-data/src/config.rs b/crates/nu-data/src/config.rs index b9f0b452f..0667d6c84 100644 --- a/crates/nu-data/src/config.rs +++ b/crates/nu-data/src/config.rs @@ -118,6 +118,8 @@ fn helper(v: &Value) -> Result { UntaggedValue::Table(l) => toml::Value::Array(collect_values(l)?), UntaggedValue::Error(e) => return Err(e.clone()), UntaggedValue::Block(_) => toml::Value::String("".to_string()), + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => toml::Value::String("".to_string()), UntaggedValue::Primitive(Primitive::Range(_)) => toml::Value::String("".to_string()), UntaggedValue::Primitive(Primitive::Binary(b)) => { toml::Value::Array(b.iter().map(|x| toml::Value::Integer(*x as i64)).collect()) diff --git a/crates/nu-protocol/Cargo.toml b/crates/nu-protocol/Cargo.toml index 11133cb56..c6f1a57b6 100644 --- a/crates/nu-protocol/Cargo.toml +++ b/crates/nu-protocol/Cargo.toml @@ -25,9 +25,14 @@ num-traits = "0.2.14" serde = { version = "1.0", features = ["derive"] } serde_bytes = "0.11.5" +polars = {version="0.13.1", git = "https://github.com/ritchie46/polars", rev = "3efad9a5c380c64a5eb78b4b7ad257e1e606b9f0", optional = true} + # implement conversions serde_json = "1.0" serde_yaml = "0.8.16" toml = "0.5.8" +[features] +dataframe = ["polars"] + [build-dependencies] diff --git a/crates/nu-protocol/src/dataframe/mod.rs b/crates/nu-protocol/src/dataframe/mod.rs new file mode 100644 index 000000000..2b1699b7b --- /dev/null +++ b/crates/nu-protocol/src/dataframe/mod.rs @@ -0,0 +1,3 @@ +pub mod nu_dataframe; + +pub use nu_dataframe::NuDataFrame; diff --git a/crates/nu-protocol/src/dataframe/nu_dataframe.rs b/crates/nu-protocol/src/dataframe/nu_dataframe.rs new file mode 100644 index 000000000..512631281 --- /dev/null +++ b/crates/nu-protocol/src/dataframe/nu_dataframe.rs @@ -0,0 +1,432 @@ +use std::hash::{Hash, Hasher}; +use std::{cmp::Ordering, collections::hash_map::Entry, collections::HashMap}; + +use bigdecimal::FromPrimitive; +use chrono::{DateTime, FixedOffset, NaiveDateTime}; +use nu_errors::ShellError; +use nu_source::Tag; +use num_bigint::BigInt; +use polars::prelude::{AnyValue, DataFrame, NamedFrom, Series, TimeUnit}; +use serde::de::{Deserialize, Deserializer, Visitor}; +use serde::Serialize; + +use std::fmt; + +use crate::{Dictionary, Primitive, UntaggedValue, Value}; + +const SECS_PER_DAY: i64 = 86_400; + +#[derive(Debug)] +enum InputValue { + Integer, + Decimal, + String, +} + +#[derive(Debug)] +struct ColumnValues { + pub value_type: InputValue, + pub values: Vec, +} + +impl Default for ColumnValues { + fn default() -> Self { + Self { + value_type: InputValue::Integer, + values: Vec::new(), + } + } +} + +type ColumnMap = HashMap; + +// TODO. Using Option to help with deserialization. It will be better to find +// a way to use serde with dataframes +#[derive(Debug, Clone, Serialize)] +pub struct NuDataFrame { + #[serde(skip_serializing)] + pub dataframe: Option, + pub name: String, +} + +impl Default for NuDataFrame { + fn default() -> Self { + NuDataFrame { + dataframe: None, + name: String::from("From Stream"), + } + } +} + +impl NuDataFrame { + fn new() -> Self { + Self::default() + } +} + +// TODO. Better definition of equality and comparison for a dataframe. +// Probably it make sense to have a name field and use it for comparisons +impl PartialEq for NuDataFrame { + fn eq(&self, _: &Self) -> bool { + false + } +} + +impl Eq for NuDataFrame {} + +impl PartialOrd for NuDataFrame { + fn partial_cmp(&self, _: &Self) -> Option { + Some(Ordering::Equal) + } +} + +impl Ord for NuDataFrame { + fn cmp(&self, _: &Self) -> Ordering { + Ordering::Equal + } +} + +impl Hash for NuDataFrame { + fn hash(&self, _: &mut H) {} +} + +impl<'de> Visitor<'de> for NuDataFrame { + type Value = Self; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("an integer between -2^31 and 2^31") + } +} + +impl<'de> Deserialize<'de> for NuDataFrame { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + deserializer.deserialize_i32(NuDataFrame::new()) + } +} + +impl NuDataFrame { + pub fn try_from_iter(iter: T, tag: &Tag) -> Result + where + T: Iterator, + { + // Dictionary to store the columnar data extracted from + // the input. During the iteration we will sort if the values + // have different type + let mut column_values: ColumnMap = HashMap::new(); + + for value in iter { + match value.value { + UntaggedValue::Row(dictionary) => insert_row(&mut column_values, dictionary)?, + UntaggedValue::Table(table) => insert_table(&mut column_values, table)?, + _ => { + return Err(ShellError::labeled_error( + "Format not supported", + "Value not supported for conversion", + &value.tag, + )); + } + } + } + + from_parsed_columns(column_values, tag) + } + + // Print is made out a head and if the dataframe is too large, then a tail + pub fn print(&self) -> Result, ShellError> { + if let Some(df) = &self.dataframe { + let size: usize = 5; + let mut values = self.head(Some(size))?; + + if df.height() > size { + add_separator(&mut values, df); + + let remaining = df.height() - size; + let tail_size = remaining.min(size); + let mut tail_values = self.tail(Some(tail_size))?; + + values.append(&mut tail_values); + } + + Ok(values) + } else { + unreachable!() + } + } + + pub fn head(&self, rows: Option) -> Result, ShellError> { + let to_row = rows.unwrap_or(5); + let values = self.to_rows(0, to_row)?; + + Ok(values) + } + + pub fn tail(&self, rows: Option) -> Result, ShellError> { + if let Some(df) = &self.dataframe { + let to_row = df.height(); + let size = rows.unwrap_or(5); + let from_row = to_row.saturating_sub(size); + + let values = self.to_rows(from_row, to_row)?; + + Ok(values) + } else { + unreachable!() + } + } + + pub fn to_rows(&self, from_row: usize, to_row: usize) -> Result, ShellError> { + if let Some(df) = &self.dataframe { + let column_names = df.get_column_names(); + + let mut values: Vec = Vec::new(); + + let upper_row = to_row.min(df.height()); + for i in from_row..upper_row { + let row = df.get_row(i); + let mut dictionary_row = Dictionary::default(); + + for (val, name) in row.0.iter().zip(column_names.iter()) { + let untagged_val = anyvalue_to_untagged(val)?; + + let dict_val = Value { + value: untagged_val, + tag: Tag::unknown(), + }; + + dictionary_row.insert(name.to_string(), dict_val); + } + + let value = Value { + value: UntaggedValue::Row(dictionary_row), + tag: Tag::unknown(), + }; + + values.push(value); + } + + Ok(values) + } else { + unreachable!() + } + } +} + +// Adds a separator to the vector of values using the column names from the +// dataframe to create the Values Row +fn add_separator(values: &mut Vec, df: &DataFrame) { + let column_names = df.get_column_names(); + + let mut dictionary = Dictionary::default(); + for name in column_names { + let indicator = Value { + value: UntaggedValue::Primitive(Primitive::String("...".to_string())), + tag: Tag::unknown(), + }; + + dictionary.insert(name.to_string(), indicator); + } + + let extra_column = Value { + value: UntaggedValue::Row(dictionary), + tag: Tag::unknown(), + }; + + values.push(extra_column); +} + +// Converts a polars AnyValue to an UntaggedValue +// This is used when printing values coming for polars dataframes +fn anyvalue_to_untagged(anyvalue: &AnyValue) -> Result { + Ok(match anyvalue { + AnyValue::Null => UntaggedValue::Primitive(Primitive::Nothing), + AnyValue::Utf8(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Boolean(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Float32(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Float64(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Int32(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Int64(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::UInt8(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::UInt16(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Int8(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Int16(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::UInt32(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::UInt64(a) => UntaggedValue::Primitive((*a).into()), + AnyValue::Date32(a) => { + // elapsed time in day since 1970-01-01 + let seconds = *a as i64 * SECS_PER_DAY; + let naive_datetime = NaiveDateTime::from_timestamp(seconds, 0); + + // Zero length offset + let offset = FixedOffset::east(0); + let datetime = DateTime::::from_utc(naive_datetime, offset); + + UntaggedValue::Primitive(Primitive::Date(datetime)) + } + AnyValue::Date64(a) => { + // elapsed time in milliseconds since 1970-01-01 + let seconds = *a / 1000; + let naive_datetime = NaiveDateTime::from_timestamp(seconds, 0); + + // Zero length offset + let offset = FixedOffset::east(0); + let datetime = DateTime::::from_utc(naive_datetime, offset); + + UntaggedValue::Primitive(Primitive::Date(datetime)) + } + AnyValue::Time64(a, _) => UntaggedValue::Primitive((*a).into()), + AnyValue::Duration(a, unit) => { + let nanoseconds = match unit { + TimeUnit::Second => *a / 1_000_000_000, + TimeUnit::Millisecond => *a / 1_000_000, + TimeUnit::Microsecond => *a / 1_000, + TimeUnit::Nanosecond => *a, + }; + + if let Some(bigint) = BigInt::from_i64(nanoseconds) { + UntaggedValue::Primitive(Primitive::Duration(bigint)) + } else { + unreachable!("Internal error: protocol did not use compatible decimal") + } + } + AnyValue::List(_) => { + return Err(ShellError::labeled_error( + "Format not supported", + "Value not supported for conversion", + Tag::unknown(), + )); + } + }) +} + +// Inserting the values found in a UntaggedValue::Row +// All the entries for the dictionary are checked in order to check if +// the column values have the same type value. +fn insert_row(column_values: &mut ColumnMap, dictionary: Dictionary) -> Result<(), ShellError> { + for (key, value) in dictionary.entries { + insert_value(value, key, column_values)?; + } + + Ok(()) +} + +// Inserting the values found in a UntaggedValue::Table +// All the entries for the table are checked in order to check if +// the column values have the same type value. +// The names for the columns are the enumerated numbers from the values +fn insert_table(column_values: &mut ColumnMap, table: Vec) -> Result<(), ShellError> { + for (index, value) in table.into_iter().enumerate() { + let key = format!("{}", index); + insert_value(value, key, column_values)?; + } + + Ok(()) +} + +fn insert_value( + value: Value, + key: String, + column_values: &mut ColumnMap, +) -> Result<(), ShellError> { + let col_val = match column_values.entry(key) { + Entry::Vacant(entry) => entry.insert(ColumnValues::default()), + Entry::Occupied(entry) => entry.into_mut(), + }; + + // Checking that the type for the value is the same + // for the previous value in the column + if col_val.values.is_empty() { + match &value.value { + UntaggedValue::Primitive(Primitive::Int(_)) => { + col_val.value_type = InputValue::Integer; + } + UntaggedValue::Primitive(Primitive::Decimal(_)) => { + col_val.value_type = InputValue::Decimal; + } + UntaggedValue::Primitive(Primitive::String(_)) => { + col_val.value_type = InputValue::String; + } + _ => { + return Err(ShellError::labeled_error( + "Only primitive values accepted", + "Not a primitive value", + &value.tag, + )); + } + } + col_val.values.push(value); + } else { + let prev_value = &col_val.values[col_val.values.len() - 1]; + + match (&prev_value.value, &value.value) { + ( + UntaggedValue::Primitive(Primitive::Int(_)), + UntaggedValue::Primitive(Primitive::Int(_)), + ) + | ( + UntaggedValue::Primitive(Primitive::Decimal(_)), + UntaggedValue::Primitive(Primitive::Decimal(_)), + ) + | ( + UntaggedValue::Primitive(Primitive::String(_)), + UntaggedValue::Primitive(Primitive::String(_)), + ) => col_val.values.push(value), + _ => { + return Err(ShellError::labeled_error( + "Different values in column", + "Value with different type", + &value.tag, + )); + } + } + } + + Ok(()) +} + +// The ColumnMap has the parsed data from the StreamInput +// This data can be used to create a Series object that can initialize +// the dataframe based on the type of data that is found +fn from_parsed_columns(column_values: ColumnMap, tag: &Tag) -> Result { + let mut df_series: Vec = Vec::new(); + for (name, column) in column_values { + match column.value_type { + InputValue::Decimal => { + let series_values: Result, _> = + column.values.iter().map(|v| v.as_f64()).collect(); + let series = Series::new(&name, series_values?); + df_series.push(series) + } + InputValue::Integer => { + let series_values: Result, _> = + column.values.iter().map(|v| v.as_f32()).collect(); + let series = Series::new(&name, series_values?); + df_series.push(series) + } + InputValue::String => { + let series_values: Result, _> = + column.values.iter().map(|v| v.as_string()).collect(); + let series = Series::new(&name, series_values?); + df_series.push(series) + } + } + } + + let df = DataFrame::new(df_series); + + match df { + Ok(df) => Ok(NuDataFrame { + dataframe: Some(df), + name: "From stream".to_string(), + }), + Err(e) => { + return Err(ShellError::labeled_error( + "Error while creating dataframe", + format!("{}", e), + tag, + )) + } + } +} diff --git a/crates/nu-protocol/src/lib.rs b/crates/nu-protocol/src/lib.rs index 33d4ab4fd..2e3ae0be6 100644 --- a/crates/nu-protocol/src/lib.rs +++ b/crates/nu-protocol/src/lib.rs @@ -12,6 +12,9 @@ mod type_name; mod type_shape; pub mod value; +#[cfg(feature = "dataframe")] +pub mod dataframe; + pub use crate::call_info::{CallInfo, EvaluatedArgs}; pub use crate::config_path::ConfigPath; pub use crate::maybe_owned::MaybeOwned; diff --git a/crates/nu-protocol/src/type_shape.rs b/crates/nu-protocol/src/type_shape.rs index ee7d039ed..30d69d78b 100644 --- a/crates/nu-protocol/src/type_shape.rs +++ b/crates/nu-protocol/src/type_shape.rs @@ -69,6 +69,10 @@ pub enum Type { BeginningOfStream, /// End of stream marker (used as bookend markers rather than actual values) EndOfStream, + + /// Dataframe + #[cfg(feature = "dataframe")] + Dataframe, } /// A shape representation of the type of a row @@ -183,6 +187,8 @@ impl Type { UntaggedValue::Table(table) => Type::from_table(table.iter()), UntaggedValue::Error(_) => Type::Error, UntaggedValue::Block(_) => Type::Block, + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => Type::Dataframe, } } } @@ -287,6 +293,8 @@ impl PrettyDebug for Type { }) } Type::Block => ty("block"), + #[cfg(feature = "dataframe")] + Type::Dataframe => ty("dataframe_pretty_debug_for_Type"), } } } diff --git a/crates/nu-protocol/src/value.rs b/crates/nu-protocol/src/value.rs index 80f99a86c..0fef1e18a 100644 --- a/crates/nu-protocol/src/value.rs +++ b/crates/nu-protocol/src/value.rs @@ -30,6 +30,9 @@ use std::hash::{Hash, Hasher}; use std::path::PathBuf; use std::time::SystemTime; +#[cfg(feature = "dataframe")] +use crate::dataframe::NuDataFrame; + /// The core structured values that flow through a pipeline #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub enum UntaggedValue { @@ -47,6 +50,10 @@ pub enum UntaggedValue { /// A block of Nu code, eg `{ ls | get name ; echo "done" }` with its captured values Block(Box), + + /// NuDataframe + #[cfg(feature = "dataframe")] + Dataframe(NuDataFrame), } impl UntaggedValue { @@ -489,6 +496,22 @@ impl Value { } } + /// View the Value as signed 32-bit float, if possible + pub fn as_f32(&self) -> Result { + match &self.value { + UntaggedValue::Primitive(primitive) => primitive.as_f32(self.tag.span), + _ => Err(ShellError::type_error("integer", self.spanned_type_name())), + } + } + + /// View the Value as signed 64-bit float, if possible + pub fn as_f64(&self) -> Result { + match &self.value { + UntaggedValue::Primitive(primitive) => primitive.as_f64(self.tag.span), + _ => Err(ShellError::type_error("integer", self.spanned_type_name())), + } + } + /// View the Value as boolean, if possible pub fn as_bool(&self) -> Result { match &self.value { @@ -634,6 +657,8 @@ impl ShellTypeName for UntaggedValue { UntaggedValue::Table(_) => "table", UntaggedValue::Error(_) => "error", UntaggedValue::Block(_) => "block", + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => "dataframe", } } } diff --git a/crates/nu-protocol/src/value/debug.rs b/crates/nu-protocol/src/value/debug.rs index f7e3c73d5..99f273954 100644 --- a/crates/nu-protocol/src/value/debug.rs +++ b/crates/nu-protocol/src/value/debug.rs @@ -24,6 +24,8 @@ impl PrettyDebug for Value { .nest(), UntaggedValue::Error(_) => DbgDocBldr::error("error"), UntaggedValue::Block(_) => DbgDocBldr::opaque("block"), + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => DbgDocBldr::opaque("dataframe_prettydebug_for_Value"), } } } diff --git a/crates/nu-protocol/src/value/primitive.rs b/crates/nu-protocol/src/value/primitive.rs index 4f890651c..c9266a164 100644 --- a/crates/nu-protocol/src/value/primitive.rs +++ b/crates/nu-protocol/src/value/primitive.rs @@ -247,6 +247,29 @@ impl Primitive { } } + pub fn as_f32(&self, span: Span) -> Result { + match self { + Primitive::Int(int) => int.to_f32().ok_or_else(|| { + ShellError::range_error( + ExpectedRange::F32, + &format!("{}", int).spanned(span), + "converting an integer into a signed 32-bit float", + ) + }), + Primitive::Decimal(decimal) => decimal.to_f32().ok_or_else(|| { + ShellError::range_error( + ExpectedRange::F32, + &format!("{}", decimal).spanned(span), + "converting a decimal into a signed 32-bit float", + ) + }), + other => Err(ShellError::type_error( + "number", + other.type_name().spanned(span), + )), + } + } + // FIXME: This is a bad name, but no other way to differentiate with our own Duration. pub fn into_chrono_duration(self, span: Span) -> Result { match self { @@ -332,17 +355,35 @@ impl From for Primitive { } } -impl From for Primitive { - /// Helper to convert from 64-bit float to a Primitive value - fn from(float: f64) -> Primitive { - if let Some(f) = BigDecimal::from_f64(float) { - Primitive::Decimal(f) - } else { - unreachable!("Internal error: protocol did not use f64-compatible decimal") +// Macro to define the From trait for native types to primitives +// The from trait requires a converter that will be applied to the +// native type. +macro_rules! from_native_to_primitive { + ($native_type:ty, $primitive_type:expr, $converter: expr) => { + // e.g. from u32 -> Primitive + impl From<$native_type> for Primitive { + fn from(int: $native_type) -> Primitive { + if let Some(i) = $converter(int) { + $primitive_type(i) + } else { + unreachable!("Internal error: protocol did not use compatible decimal") + } + } } - } + }; } +from_native_to_primitive!(i8, Primitive::Int, BigInt::from_i8); +from_native_to_primitive!(i16, Primitive::Int, BigInt::from_i16); +from_native_to_primitive!(i32, Primitive::Int, BigInt::from_i32); +from_native_to_primitive!(i64, Primitive::Int, BigInt::from_i64); +from_native_to_primitive!(u8, Primitive::Int, BigInt::from_u8); +from_native_to_primitive!(u16, Primitive::Int, BigInt::from_u16); +from_native_to_primitive!(u32, Primitive::Int, BigInt::from_u32); +from_native_to_primitive!(u64, Primitive::Int, BigInt::from_u64); +from_native_to_primitive!(f32, Primitive::Decimal, BigDecimal::from_f32); +from_native_to_primitive!(f64, Primitive::Decimal, BigDecimal::from_f64); + impl From for Primitive { fn from(duration: chrono::Duration) -> Primitive { // FIXME: This is a hack since chrono::Duration does not give access to its 'nanos' field. diff --git a/crates/nu-value-ext/Cargo.toml b/crates/nu-value-ext/Cargo.toml index 616c6f5c2..bd1369277 100644 --- a/crates/nu-value-ext/Cargo.toml +++ b/crates/nu-value-ext/Cargo.toml @@ -17,3 +17,6 @@ nu-source = { path = "../nu-source", version = "0.31.0" } indexmap = { version = "1.6.1", features = ["serde-1"] } itertools = "0.10.0" num-traits = "0.2.14" + +[features] +dataframe = ["nu-protocol/dataframe"] diff --git a/crates/nu-value-ext/src/lib.rs b/crates/nu-value-ext/src/lib.rs index caff9641e..04f9c1852 100644 --- a/crates/nu-value-ext/src/lib.rs +++ b/crates/nu-value-ext/src/lib.rs @@ -724,6 +724,10 @@ pub fn get_data<'value>(value: &'value Value, desc: &str) -> MaybeOwned<'value, UntaggedValue::Block(_) | UntaggedValue::Table(_) | UntaggedValue::Error(_) => { MaybeOwned::Owned(UntaggedValue::nothing().into_untagged_value()) } + #[cfg(feature = "dataframe")] + UntaggedValue::Dataframe(_) => { + MaybeOwned::Owned(UntaggedValue::nothing().into_untagged_value()) + } } }