mirror of
https://github.com/nushell/nushell.git
synced 2024-11-27 02:44:01 +01:00
Merge branch 'master' of github.com:nushell/nushell
This commit is contained in:
commit
f6458b4322
56
Cargo.lock
generated
56
Cargo.lock
generated
@ -1357,9 +1357,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heim"
|
name = "heim"
|
||||||
version = "0.1.0-beta.1"
|
version = "0.1.0-beta.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c39a60e3aee8ada013ddfc5d8447d6f81011dac7ddef61a3f3d34b4be982aa79"
|
checksum = "ea9164f267a5f4325020b8a989c4b0ab06acc0685ccdb22551f59257fdf296ab"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heim-common",
|
"heim-common",
|
||||||
"heim-cpu",
|
"heim-cpu",
|
||||||
@ -1393,9 +1393,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heim-cpu"
|
name = "heim-cpu"
|
||||||
version = "0.1.0-beta.1"
|
version = "0.1.0-beta.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "020d170328cadc4d6adcf549c22983a19c35068414609c276c4db607ee295693"
|
checksum = "8b088c42ce30cf60b485df484e0aa19c31ad8663bb939180ef64ca340d15eca6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"futures 0.3.5",
|
"futures 0.3.5",
|
||||||
@ -1462,9 +1462,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heim-net"
|
name = "heim-net"
|
||||||
version = "0.1.0-beta.1"
|
version = "0.1.0-beta.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f3108a5d01cfe88042c349c93d760d2cb8d82c2131183ba6af5fc5b8a6c0a5b5"
|
checksum = "59da1108e732afcda77e1429b5d0ce648b9a31d1f8cf385108b83bea4cf91342"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@ -1477,9 +1477,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heim-process"
|
name = "heim-process"
|
||||||
version = "0.1.1-beta.1"
|
version = "0.1.1-beta.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ac9b230a6f7c9d746c12a300186d6e8cb31495cdbe3cefd7a15f969327b0d323"
|
checksum = "190f1085293c8d54060dd77c943da0d5bd1729aa00d2ac68188e26446dc0170d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@ -2175,7 +2175,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu"
|
name = "nu"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
@ -2212,7 +2212,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-build"
|
name = "nu-build"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static 1.4.0",
|
"lazy_static 1.4.0",
|
||||||
"serde 1.0.110",
|
"serde 1.0.110",
|
||||||
@ -2222,7 +2222,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-cli"
|
name = "nu-cli"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
"app_dirs",
|
"app_dirs",
|
||||||
@ -2313,7 +2313,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-errors"
|
name = "nu-errors"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
"bigdecimal",
|
"bigdecimal",
|
||||||
@ -2333,7 +2333,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-parser"
|
name = "nu-parser"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bigdecimal",
|
"bigdecimal",
|
||||||
"codespan-reporting",
|
"codespan-reporting",
|
||||||
@ -2352,7 +2352,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-plugin"
|
name = "nu-plugin"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bigdecimal",
|
"bigdecimal",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
@ -2368,7 +2368,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-protocol"
|
name = "nu-protocol"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
"bigdecimal",
|
"bigdecimal",
|
||||||
@ -2397,7 +2397,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-source"
|
name = "nu-source"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"codespan-reporting",
|
"codespan-reporting",
|
||||||
"derive-new",
|
"derive-new",
|
||||||
@ -2410,7 +2410,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-test-support"
|
name = "nu-test-support"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"directories 2.0.2",
|
"directories 2.0.2",
|
||||||
"dunce",
|
"dunce",
|
||||||
@ -2426,7 +2426,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu-value-ext"
|
name = "nu-value-ext"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"itertools",
|
"itertools",
|
||||||
@ -2440,7 +2440,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_binaryview"
|
name = "nu_plugin_binaryview"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
@ -2457,7 +2457,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_fetch"
|
name = "nu_plugin_fetch"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.12.1",
|
"base64 0.12.1",
|
||||||
"futures 0.3.5",
|
"futures 0.3.5",
|
||||||
@ -2472,7 +2472,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_inc"
|
name = "nu_plugin_inc"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nu-build",
|
"nu-build",
|
||||||
"nu-errors",
|
"nu-errors",
|
||||||
@ -2485,7 +2485,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_match"
|
name = "nu_plugin_match"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures 0.3.5",
|
"futures 0.3.5",
|
||||||
"nu-build",
|
"nu-build",
|
||||||
@ -2498,7 +2498,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_post"
|
name = "nu_plugin_post"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.12.1",
|
"base64 0.12.1",
|
||||||
"futures 0.3.5",
|
"futures 0.3.5",
|
||||||
@ -2515,7 +2515,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_ps"
|
name = "nu_plugin_ps"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures 0.3.5",
|
"futures 0.3.5",
|
||||||
"futures-timer 3.0.2",
|
"futures-timer 3.0.2",
|
||||||
@ -2529,7 +2529,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_start"
|
name = "nu_plugin_start"
|
||||||
version = "0.1.0"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glob",
|
"glob",
|
||||||
"nu-build",
|
"nu-build",
|
||||||
@ -2543,7 +2543,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_sys"
|
name = "nu_plugin_sys"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"battery",
|
"battery",
|
||||||
"futures 0.3.5",
|
"futures 0.3.5",
|
||||||
@ -2558,7 +2558,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_textview"
|
name = "nu_plugin_textview"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.12.1",
|
"ansi_term 0.12.1",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
@ -2573,7 +2573,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nu_plugin_tree"
|
name = "nu_plugin_tree"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"derive-new",
|
"derive-new",
|
||||||
"nu-build",
|
"nu-build",
|
||||||
|
40
Cargo.toml
40
Cargo.toml
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu"
|
name = "nu"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
description = "A new type of shell"
|
description = "A new type of shell"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
@ -18,23 +18,23 @@ members = ["crates/*/"]
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-cli = { version = "0.14.1", path = "./crates/nu-cli" }
|
nu-cli = { version = "0.15.0", path = "./crates/nu-cli" }
|
||||||
nu-source = { version = "0.14.1", path = "./crates/nu-source" }
|
nu-source = { version = "0.15.0", path = "./crates/nu-source" }
|
||||||
nu-plugin = { version = "0.14.1", path = "./crates/nu-plugin" }
|
nu-plugin = { version = "0.15.0", path = "./crates/nu-plugin" }
|
||||||
nu-protocol = { version = "0.14.1", path = "./crates/nu-protocol" }
|
nu-protocol = { version = "0.15.0", path = "./crates/nu-protocol" }
|
||||||
nu-errors = { version = "0.14.1", path = "./crates/nu-errors" }
|
nu-errors = { version = "0.15.0", path = "./crates/nu-errors" }
|
||||||
nu-parser = { version = "0.14.1", path = "./crates/nu-parser" }
|
nu-parser = { version = "0.15.0", path = "./crates/nu-parser" }
|
||||||
nu-value-ext = { version = "0.14.1", path = "./crates/nu-value-ext" }
|
nu-value-ext = { version = "0.15.0", path = "./crates/nu-value-ext" }
|
||||||
nu_plugin_binaryview = { version = "0.14.1", path = "./crates/nu_plugin_binaryview", optional=true }
|
nu_plugin_binaryview = { version = "0.15.0", path = "./crates/nu_plugin_binaryview", optional=true }
|
||||||
nu_plugin_fetch = { version = "0.14.1", path = "./crates/nu_plugin_fetch", optional=true }
|
nu_plugin_fetch = { version = "0.15.0", path = "./crates/nu_plugin_fetch", optional=true }
|
||||||
nu_plugin_inc = { version = "0.14.1", path = "./crates/nu_plugin_inc", optional=true }
|
nu_plugin_inc = { version = "0.15.0", path = "./crates/nu_plugin_inc", optional=true }
|
||||||
nu_plugin_match = { version = "0.14.1", path = "./crates/nu_plugin_match", optional=true }
|
nu_plugin_match = { version = "0.15.0", path = "./crates/nu_plugin_match", optional=true }
|
||||||
nu_plugin_post = { version = "0.14.1", path = "./crates/nu_plugin_post", optional=true }
|
nu_plugin_post = { version = "0.15.0", path = "./crates/nu_plugin_post", optional=true }
|
||||||
nu_plugin_ps = { version = "0.14.1", path = "./crates/nu_plugin_ps", optional=true }
|
nu_plugin_ps = { version = "0.15.0", path = "./crates/nu_plugin_ps", optional=true }
|
||||||
nu_plugin_start = { version = "0.1.0", path = "./crates/nu_plugin_start", optional=true }
|
nu_plugin_start = { version = "0.15.0", path = "./crates/nu_plugin_start", optional=true }
|
||||||
nu_plugin_sys = { version = "0.14.1", path = "./crates/nu_plugin_sys", optional=true }
|
nu_plugin_sys = { version = "0.15.0", path = "./crates/nu_plugin_sys", optional=true }
|
||||||
nu_plugin_textview = { version = "0.14.1", path = "./crates/nu_plugin_textview", optional=true }
|
nu_plugin_textview = { version = "0.15.0", path = "./crates/nu_plugin_textview", optional=true }
|
||||||
nu_plugin_tree = { version = "0.14.1", path = "./crates/nu_plugin_tree", optional=true }
|
nu_plugin_tree = { version = "0.15.0", path = "./crates/nu_plugin_tree", optional=true }
|
||||||
|
|
||||||
crossterm = { version = "0.17.5", optional = true }
|
crossterm = { version = "0.17.5", optional = true }
|
||||||
semver = { version = "0.10.0", optional = true }
|
semver = { version = "0.10.0", optional = true }
|
||||||
@ -49,12 +49,12 @@ log = "0.4.8"
|
|||||||
pretty_env_logger = "0.4.0"
|
pretty_env_logger = "0.4.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
nu-test-support = { version = "0.14.1", path = "./crates/nu-test-support" }
|
nu-test-support = { version = "0.15.0", path = "./crates/nu-test-support" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
toml = "0.5.6"
|
toml = "0.5.6"
|
||||||
serde = { version = "1.0.110", features = ["derive"] }
|
serde = { version = "1.0.110", features = ["derive"] }
|
||||||
nu-build = { version = "0.14.1", path = "./crates/nu-build" }
|
nu-build = { version = "0.15.0", path = "./crates/nu-build" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["sys", "ps", "textview", "inc"]
|
default = ["sys", "ps", "textview", "inc"]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-build"
|
name = "nu-build"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Core build system for nushell"
|
description = "Core build system for nushell"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-cli"
|
name = "nu-cli"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
description = "CLI for nushell"
|
description = "CLI for nushell"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@ -10,13 +10,13 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-source = { version = "0.14.1", path = "../nu-source" }
|
nu-source = { version = "0.15.0", path = "../nu-source" }
|
||||||
nu-plugin = { version = "0.14.1", path = "../nu-plugin" }
|
nu-plugin = { version = "0.15.0", path = "../nu-plugin" }
|
||||||
nu-protocol = { version = "0.14.1", path = "../nu-protocol" }
|
nu-protocol = { version = "0.15.0", path = "../nu-protocol" }
|
||||||
nu-errors = { version = "0.14.1", path = "../nu-errors" }
|
nu-errors = { version = "0.15.0", path = "../nu-errors" }
|
||||||
nu-parser = { version = "0.14.1", path = "../nu-parser" }
|
nu-parser = { version = "0.15.0", path = "../nu-parser" }
|
||||||
nu-value-ext = { version = "0.14.1", path = "../nu-value-ext" }
|
nu-value-ext = { version = "0.15.0", path = "../nu-value-ext" }
|
||||||
nu-test-support = { version = "0.14.1", path = "../nu-test-support" }
|
nu-test-support = { version = "0.15.0", path = "../nu-test-support" }
|
||||||
|
|
||||||
ansi_term = "0.12.1"
|
ansi_term = "0.12.1"
|
||||||
app_dirs = "1.2.1"
|
app_dirs = "1.2.1"
|
||||||
@ -101,7 +101,7 @@ version = "0.23.1"
|
|||||||
features = ["bundled", "blob"]
|
features = ["bundled", "blob"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
quickcheck = "0.9"
|
quickcheck = "0.9"
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
|
use crate::commands::{command::EvaluatedWholeStreamCommandArgs, WholeStreamCommand};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
use chrono::{Datelike, Local, NaiveDate};
|
use chrono::{Datelike, Local, NaiveDate};
|
||||||
use nu_errors::ShellError;
|
|
||||||
use nu_protocol::Dictionary;
|
|
||||||
|
|
||||||
use crate::commands::{command::EvaluatedWholeStreamCommandArgs, WholeStreamCommand};
|
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
use nu_protocol::{Signature, SyntaxShape, UntaggedValue, Value};
|
use nu_errors::ShellError;
|
||||||
|
use nu_protocol::{Dictionary, Signature, SyntaxShape, UntaggedValue, Value};
|
||||||
|
|
||||||
pub struct Cal;
|
pub struct Cal;
|
||||||
|
|
||||||
@ -250,7 +248,7 @@ fn add_month_to_table(
|
|||||||
tag: &Tag,
|
tag: &Tag,
|
||||||
selected_year: i32,
|
selected_year: i32,
|
||||||
current_month: u32,
|
current_month: u32,
|
||||||
_current_day_option: Option<u32>, // Can be used in the future to display current day
|
current_day_option: Option<u32>,
|
||||||
) -> Result<(), ShellError> {
|
) -> Result<(), ShellError> {
|
||||||
let month_helper_result = MonthHelper::new(selected_year, current_month);
|
let month_helper_result = MonthHelper::new(selected_year, current_month);
|
||||||
|
|
||||||
@ -316,14 +314,23 @@ fn add_month_to_table(
|
|||||||
}
|
}
|
||||||
|
|
||||||
for day in &days_of_the_week {
|
for day in &days_of_the_week {
|
||||||
let value = if (day_count <= day_limit)
|
let should_add_day_number_to_table =
|
||||||
&& (day_count > month_helper.day_number_month_starts_on)
|
(day_count <= day_limit) && (day_count > month_helper.day_number_month_starts_on);
|
||||||
{
|
|
||||||
UntaggedValue::int(day_count - month_helper.day_number_month_starts_on)
|
let mut value = UntaggedValue::nothing().into_value(tag);
|
||||||
.into_value(tag)
|
|
||||||
} else {
|
if should_add_day_number_to_table {
|
||||||
UntaggedValue::nothing().into_value(tag)
|
let day_count_with_offset = day_count - month_helper.day_number_month_starts_on;
|
||||||
};
|
|
||||||
|
value = UntaggedValue::int(day_count_with_offset).into_value(tag);
|
||||||
|
|
||||||
|
if let Some(current_day) = current_day_option {
|
||||||
|
if current_day == day_count_with_offset {
|
||||||
|
// TODO: Update the value here with a color when color support is added
|
||||||
|
// This colors the current day
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
indexmap.insert((*day).to_string(), value);
|
indexmap.insert((*day).to_string(), value);
|
||||||
|
|
||||||
|
@ -384,18 +384,16 @@ impl WholeStreamCommand for FnFilterCommand {
|
|||||||
|
|
||||||
async fn run(
|
async fn run(
|
||||||
&self,
|
&self,
|
||||||
args: CommandArgs,
|
CommandArgs {
|
||||||
registry: &CommandRegistry,
|
|
||||||
) -> Result<OutputStream, ShellError> {
|
|
||||||
let CommandArgs {
|
|
||||||
host,
|
host,
|
||||||
ctrl_c,
|
ctrl_c,
|
||||||
shell_manager,
|
shell_manager,
|
||||||
call_info,
|
call_info,
|
||||||
mut input,
|
mut input,
|
||||||
..
|
..
|
||||||
} = args;
|
}: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let host: Arc<parking_lot::Mutex<dyn Host>> = host.clone();
|
let host: Arc<parking_lot::Mutex<dyn Host>> = host.clone();
|
||||||
let registry: CommandRegistry = registry.clone();
|
let registry: CommandRegistry = registry.clone();
|
||||||
let func = self.func;
|
let func = self.func;
|
||||||
|
@ -37,42 +37,37 @@ impl WholeStreamCommand for EvaluateBy {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
evaluate_by(args, registry)
|
evaluate_by(args, registry).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn evaluate_by(
|
pub async fn evaluate_by(
|
||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let stream = async_stream! {
|
let name = args.call_info.name_tag.clone();
|
||||||
let name = args.call_info.name_tag.clone();
|
let (EvaluateByArgs { evaluate_with }, mut input) = args.process(®istry).await?;
|
||||||
let (EvaluateByArgs { evaluate_with }, mut input) = args.process(®istry).await?;
|
let values: Vec<Value> = input.collect().await;
|
||||||
let values: Vec<Value> = input.collect().await;
|
|
||||||
|
|
||||||
if values.is_empty() {
|
if values.is_empty() {
|
||||||
yield Err(ShellError::labeled_error(
|
Err(ShellError::labeled_error(
|
||||||
"Expected table from pipeline",
|
"Expected table from pipeline",
|
||||||
"requires a table input",
|
"requires a table input",
|
||||||
name
|
name,
|
||||||
))
|
))
|
||||||
|
} else {
|
||||||
|
let evaluate_with = if let Some(evaluator) = evaluate_with {
|
||||||
|
Some(evaluator.item().clone())
|
||||||
} else {
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let evaluate_with = if let Some(evaluator) = evaluate_with {
|
match evaluate(&values[0], evaluate_with, name) {
|
||||||
Some(evaluator.item().clone())
|
Ok(evaluated) => Ok(OutputStream::one(ReturnSuccess::value(evaluated))),
|
||||||
} else {
|
Err(err) => Err(err),
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
match evaluate(&values[0], evaluate_with, name) {
|
|
||||||
Ok(evaluated) => yield ReturnSuccess::value(evaluated),
|
|
||||||
Err(err) => yield Err(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -25,7 +25,7 @@ impl WholeStreamCommand for Exit {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
exit(args, registry)
|
exit(args, registry).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn examples(&self) -> Vec<Example> {
|
fn examples(&self) -> Vec<Example> {
|
||||||
@ -44,19 +44,20 @@ impl WholeStreamCommand for Exit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exit(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
pub async fn exit(
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let stream = async_stream! {
|
let args = args.evaluate_once(®istry).await?;
|
||||||
let args = args.evaluate_once(®istry).await?;
|
|
||||||
|
|
||||||
if args.call_info.args.has("now") {
|
let command_action = if args.call_info.args.has("now") {
|
||||||
yield Ok(ReturnSuccess::Action(CommandAction::Exit));
|
CommandAction::Exit
|
||||||
} else {
|
} else {
|
||||||
yield Ok(ReturnSuccess::Action(CommandAction::LeaveShell));
|
CommandAction::LeaveShell
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
Ok(OutputStream::one(ReturnSuccess::action(command_action)))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -40,7 +40,7 @@ impl WholeStreamCommand for FromEML {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
from_eml(args, registry)
|
from_eml(args, registry).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,46 +77,54 @@ fn headerfieldvalue_to_value(tag: &Tag, value: &HeaderFieldValue) -> UntaggedVal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_eml(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
async fn from_eml(
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let tag = args.call_info.name_tag.clone();
|
let tag = args.call_info.name_tag.clone();
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let stream = async_stream! {
|
let (eml_args, input): (FromEMLArgs, _) = args.process(®istry).await?;
|
||||||
let (eml_args, mut input): (FromEMLArgs, _) = args.process(®istry).await?;
|
let value = input.collect_string(tag.clone()).await?;
|
||||||
let value = input.collect_string(tag.clone()).await?;
|
|
||||||
|
|
||||||
let body_preview = eml_args.preview_body.map(|b| b.item).unwrap_or(DEFAULT_BODY_PREVIEW);
|
let body_preview = eml_args
|
||||||
|
.preview_body
|
||||||
|
.map(|b| b.item)
|
||||||
|
.unwrap_or(DEFAULT_BODY_PREVIEW);
|
||||||
|
|
||||||
let eml = EmlParser::from_string(value.item)
|
let eml = EmlParser::from_string(value.item)
|
||||||
.with_body_preview(body_preview)
|
.with_body_preview(body_preview)
|
||||||
.parse()
|
.parse()
|
||||||
.map_err(|_| ShellError::labeled_error("Could not parse .eml file", "could not parse .eml file", &tag))?;
|
.map_err(|_| {
|
||||||
|
ShellError::labeled_error(
|
||||||
|
"Could not parse .eml file",
|
||||||
|
"could not parse .eml file",
|
||||||
|
&tag,
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
let mut dict = TaggedDictBuilder::new(&tag);
|
let mut dict = TaggedDictBuilder::new(&tag);
|
||||||
|
|
||||||
if let Some(subj) = eml.subject {
|
if let Some(subj) = eml.subject {
|
||||||
dict.insert_untagged("Subject", UntaggedValue::string(subj));
|
dict.insert_untagged("Subject", UntaggedValue::string(subj));
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(from) = eml.from {
|
if let Some(from) = eml.from {
|
||||||
dict.insert_untagged("From", headerfieldvalue_to_value(&tag, &from));
|
dict.insert_untagged("From", headerfieldvalue_to_value(&tag, &from));
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(to) = eml.to {
|
if let Some(to) = eml.to {
|
||||||
dict.insert_untagged("To", headerfieldvalue_to_value(&tag, &to));
|
dict.insert_untagged("To", headerfieldvalue_to_value(&tag, &to));
|
||||||
}
|
}
|
||||||
|
|
||||||
for HeaderField{ name, value } in eml.headers.iter() {
|
for HeaderField { name, value } in eml.headers.iter() {
|
||||||
dict.insert_untagged(name, headerfieldvalue_to_value(&tag, &value));
|
dict.insert_untagged(name, headerfieldvalue_to_value(&tag, &value));
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(body) = eml.body {
|
if let Some(body) = eml.body {
|
||||||
dict.insert_untagged("Body", UntaggedValue::string(body));
|
dict.insert_untagged("Body", UntaggedValue::string(body));
|
||||||
}
|
}
|
||||||
|
|
||||||
yield ReturnSuccess::value(dict.into_value());
|
Ok(OutputStream::one(ReturnSuccess::value(dict.into_value())))
|
||||||
};
|
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -35,7 +35,7 @@ impl WholeStreamCommand for GroupBy {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
group_by(args, registry)
|
group_by(args, registry).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn examples(&self) -> Vec<Example> {
|
fn examples(&self) -> Vec<Example> {
|
||||||
@ -71,30 +71,27 @@ impl WholeStreamCommand for GroupBy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn group_by(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
pub async fn group_by(
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let name = args.call_info.name_tag.clone();
|
let name = args.call_info.name_tag.clone();
|
||||||
let stream = async_stream! {
|
let (GroupByArgs { column_name }, input) = args.process(®istry).await?;
|
||||||
let (GroupByArgs { column_name }, mut input) = args.process(®istry).await?;
|
let values: Vec<Value> = input.collect().await;
|
||||||
let values: Vec<Value> = input.collect().await;
|
|
||||||
|
|
||||||
if values.is_empty() {
|
|
||||||
yield Err(ShellError::labeled_error(
|
|
||||||
"Expected table from pipeline",
|
|
||||||
"requires a table input",
|
|
||||||
name
|
|
||||||
))
|
|
||||||
} else {
|
|
||||||
|
|
||||||
match crate::utils::data::group(column_name, &values, None, &name) {
|
|
||||||
Ok(grouped) => yield ReturnSuccess::value(grouped),
|
|
||||||
Err(err) => yield Err(err),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if values.is_empty() {
|
||||||
|
Err(ShellError::labeled_error(
|
||||||
|
"Expected table from pipeline",
|
||||||
|
"requires a table input",
|
||||||
|
name,
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
match crate::utils::data::group(column_name, &values, None, &name) {
|
||||||
|
Ok(grouped) => Ok(OutputStream::one(ReturnSuccess::value(grouped))),
|
||||||
|
Err(err) => Err(err),
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn group(
|
pub fn group(
|
||||||
|
@ -42,7 +42,7 @@ impl WholeStreamCommand for GroupByDate {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
group_by_date(args, registry)
|
group_by_date(args, registry).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn examples(&self) -> Vec<Example> {
|
fn examples(&self) -> Vec<Example> {
|
||||||
@ -58,50 +58,59 @@ enum Grouper {
|
|||||||
ByDate(Option<String>),
|
ByDate(Option<String>),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn group_by_date(
|
pub async fn group_by_date(
|
||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let name = args.call_info.name_tag.clone();
|
let name = args.call_info.name_tag.clone();
|
||||||
let stream = async_stream! {
|
let (
|
||||||
let (GroupByDateArgs { column_name, format }, mut input) = args.process(®istry).await?;
|
GroupByDateArgs {
|
||||||
let values: Vec<Value> = input.collect().await;
|
column_name,
|
||||||
|
format,
|
||||||
|
},
|
||||||
|
input,
|
||||||
|
) = args.process(®istry).await?;
|
||||||
|
let values: Vec<Value> = input.collect().await;
|
||||||
|
|
||||||
if values.is_empty() {
|
if values.is_empty() {
|
||||||
yield Err(ShellError::labeled_error(
|
Err(ShellError::labeled_error(
|
||||||
"Expected table from pipeline",
|
"Expected table from pipeline",
|
||||||
"requires a table input",
|
"requires a table input",
|
||||||
name
|
name,
|
||||||
))
|
))
|
||||||
|
} else {
|
||||||
|
let grouper = if let Some(Tagged { item: fmt, tag: _ }) = format {
|
||||||
|
Grouper::ByDate(Some(fmt))
|
||||||
} else {
|
} else {
|
||||||
|
Grouper::ByDate(None)
|
||||||
|
};
|
||||||
|
|
||||||
let grouper = if let Some(Tagged { item: fmt, tag }) = format {
|
match grouper {
|
||||||
Grouper::ByDate(Some(fmt))
|
Grouper::ByDate(None) => {
|
||||||
} else {
|
match crate::utils::data::group(
|
||||||
Grouper::ByDate(None)
|
column_name,
|
||||||
};
|
&values,
|
||||||
|
Some(Box::new(|row: &Value| row.format("%Y-%b-%d"))),
|
||||||
match grouper {
|
&name,
|
||||||
Grouper::ByDate(None) => {
|
) {
|
||||||
match crate::utils::data::group(column_name, &values, Some(Box::new(|row: &Value| row.format("%Y-%b-%d"))), &name) {
|
Ok(grouped) => Ok(OutputStream::one(ReturnSuccess::value(grouped))),
|
||||||
Ok(grouped) => yield ReturnSuccess::value(grouped),
|
Err(err) => Err(err),
|
||||||
Err(err) => yield Err(err),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Grouper::ByDate(Some(fmt)) => {
|
}
|
||||||
match crate::utils::data::group(column_name, &values, Some(Box::new(move |row: &Value| {
|
Grouper::ByDate(Some(fmt)) => {
|
||||||
row.format(&fmt)
|
match crate::utils::data::group(
|
||||||
})), &name) {
|
column_name,
|
||||||
Ok(grouped) => yield ReturnSuccess::value(grouped),
|
&values,
|
||||||
Err(err) => yield Err(err),
|
Some(Box::new(move |row: &Value| row.format(&fmt))),
|
||||||
}
|
&name,
|
||||||
|
) {
|
||||||
|
Ok(grouped) => Ok(OutputStream::one(ReturnSuccess::value(grouped))),
|
||||||
|
Err(err) => Err(err),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -38,42 +38,37 @@ impl WholeStreamCommand for MapMaxBy {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
map_max_by(args, registry)
|
map_max_by(args, registry).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn map_max_by(
|
pub async fn map_max_by(
|
||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let name = args.call_info.name_tag.clone();
|
let name = args.call_info.name_tag.clone();
|
||||||
let stream = async_stream! {
|
let (MapMaxByArgs { column_name }, mut input) = args.process(®istry).await?;
|
||||||
let (MapMaxByArgs { column_name }, mut input) = args.process(®istry).await?;
|
let values: Vec<Value> = input.collect().await;
|
||||||
let values: Vec<Value> = input.collect().await;
|
|
||||||
|
|
||||||
if values.is_empty() {
|
if values.is_empty() {
|
||||||
yield Err(ShellError::labeled_error(
|
Err(ShellError::labeled_error(
|
||||||
"Expected table from pipeline",
|
"Expected table from pipeline",
|
||||||
"requires a table input",
|
"requires a table input",
|
||||||
name
|
name,
|
||||||
))
|
))
|
||||||
|
} else {
|
||||||
|
let map_by_column = if let Some(column_to_map) = column_name {
|
||||||
|
Some(column_to_map.item().clone())
|
||||||
} else {
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let map_by_column = if let Some(column_to_map) = column_name {
|
match map_max(&values[0], map_by_column, name) {
|
||||||
Some(column_to_map.item().clone())
|
Ok(table_maxed) => Ok(OutputStream::one(ReturnSuccess::value(table_maxed))),
|
||||||
} else {
|
Err(err) => Err(err),
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
match map_max(&values[0], map_by_column, name) {
|
|
||||||
Ok(table_maxed) => yield ReturnSuccess::value(table_maxed),
|
|
||||||
Err(err) => yield Err(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -11,6 +11,8 @@ pub struct Mkdir;
|
|||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct MkdirArgs {
|
pub struct MkdirArgs {
|
||||||
pub rest: Vec<Tagged<PathBuf>>,
|
pub rest: Vec<Tagged<PathBuf>>,
|
||||||
|
#[serde(rename = "show-created-paths")]
|
||||||
|
pub show_created_paths: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
@ -20,7 +22,9 @@ impl WholeStreamCommand for Mkdir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn signature(&self) -> Signature {
|
fn signature(&self) -> Signature {
|
||||||
Signature::build("mkdir").rest(SyntaxShape::Path, "the name(s) of the path(s) to create")
|
Signature::build("mkdir")
|
||||||
|
.rest(SyntaxShape::Path, "the name(s) of the path(s) to create")
|
||||||
|
.switch("show-created-paths", "show the path(s) created.", Some('s'))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn usage(&self) -> &str {
|
fn usage(&self) -> &str {
|
||||||
|
@ -42,7 +42,7 @@ impl WholeStreamCommand for Open {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
open(args, registry)
|
open(args, registry).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn examples(&self) -> Vec<Example> {
|
fn examples(&self) -> Vec<Example> {
|
||||||
@ -54,39 +54,33 @@ impl WholeStreamCommand for Open {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn open(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
async fn open(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
||||||
let cwd = PathBuf::from(args.shell_manager.path());
|
let cwd = PathBuf::from(args.shell_manager.path());
|
||||||
let full_path = cwd;
|
let full_path = cwd;
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
|
|
||||||
let stream = async_stream! {
|
let (OpenArgs { path, raw }, _) = args.process(®istry).await?;
|
||||||
let (OpenArgs { path, raw }, _) = args.process(®istry).await?;
|
let result = fetch(&full_path, &path.item, path.tag.span).await;
|
||||||
let result = fetch(&full_path, &path.item, path.tag.span).await;
|
|
||||||
|
|
||||||
if let Err(e) = result {
|
let (file_extension, contents, contents_tag) = result?;
|
||||||
yield Err(e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let (file_extension, contents, contents_tag) = result?;
|
|
||||||
|
|
||||||
let file_extension = if raw.item {
|
let file_extension = if raw.item {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
// If the extension could not be determined via mimetype, try to use the path
|
// If the extension could not be determined via mimetype, try to use the path
|
||||||
// extension. Some file types do not declare their mimetypes (such as bson files).
|
// extension. Some file types do not declare their mimetypes (such as bson files).
|
||||||
file_extension.or(path.extension().map(|x| x.to_string_lossy().to_string()))
|
file_extension.or_else(|| path.extension().map(|x| x.to_string_lossy().to_string()))
|
||||||
};
|
|
||||||
|
|
||||||
let tagged_contents = contents.into_value(&contents_tag);
|
|
||||||
|
|
||||||
if let Some(extension) = file_extension {
|
|
||||||
yield Ok(ReturnSuccess::Action(CommandAction::AutoConvert(tagged_contents, extension)))
|
|
||||||
} else {
|
|
||||||
yield ReturnSuccess::value(tagged_contents);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
let tagged_contents = contents.into_value(&contents_tag);
|
||||||
|
|
||||||
|
if let Some(extension) = file_extension {
|
||||||
|
Ok(OutputStream::one(ReturnSuccess::action(
|
||||||
|
CommandAction::AutoConvert(tagged_contents, extension),
|
||||||
|
)))
|
||||||
|
} else {
|
||||||
|
Ok(OutputStream::one(ReturnSuccess::value(tagged_contents)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn fetch(
|
pub async fn fetch(
|
||||||
|
@ -27,98 +27,106 @@ impl WholeStreamCommand for ToHTML {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
to_html(args, registry)
|
to_html(args, registry).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_html(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
async fn to_html(
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let stream = async_stream! {
|
let args = args.evaluate_once(®istry).await?;
|
||||||
let args = args.evaluate_once(®istry).await?;
|
let name_tag = args.name_tag();
|
||||||
let name_tag = args.name_tag();
|
let input: Vec<Value> = args.input.collect().await;
|
||||||
let input: Vec<Value> = args.input.collect().await;
|
let headers = nu_protocol::merge_descriptors(&input);
|
||||||
let headers = nu_protocol::merge_descriptors(&input);
|
let mut output_string = "<html><body>".to_string();
|
||||||
let mut output_string = "<html><body>".to_string();
|
|
||||||
|
|
||||||
if !headers.is_empty() && (headers.len() > 1 || headers[0] != "") {
|
if !headers.is_empty() && (headers.len() > 1 || headers[0] != "") {
|
||||||
output_string.push_str("<table>");
|
output_string.push_str("<table>");
|
||||||
|
|
||||||
output_string.push_str("<tr>");
|
output_string.push_str("<tr>");
|
||||||
for header in &headers {
|
for header in &headers {
|
||||||
output_string.push_str("<th>");
|
output_string.push_str("<th>");
|
||||||
output_string.push_str(&htmlescape::encode_minimal(&header));
|
output_string.push_str(&htmlescape::encode_minimal(&header));
|
||||||
output_string.push_str("</th>");
|
output_string.push_str("</th>");
|
||||||
}
|
|
||||||
output_string.push_str("</tr>");
|
|
||||||
}
|
}
|
||||||
|
output_string.push_str("</tr>");
|
||||||
|
}
|
||||||
|
|
||||||
for row in input {
|
for row in input {
|
||||||
match row.value {
|
match row.value {
|
||||||
UntaggedValue::Primitive(Primitive::Binary(b)) => {
|
UntaggedValue::Primitive(Primitive::Binary(b)) => {
|
||||||
// This might be a bit much, but it's fun :)
|
// This might be a bit much, but it's fun :)
|
||||||
match row.tag.anchor {
|
match row.tag.anchor {
|
||||||
Some(AnchorLocation::Url(f)) |
|
Some(AnchorLocation::Url(f)) | Some(AnchorLocation::File(f)) => {
|
||||||
Some(AnchorLocation::File(f)) => {
|
let extension = f.split('.').last().map(String::from);
|
||||||
let extension = f.split('.').last().map(String::from);
|
match extension {
|
||||||
match extension {
|
Some(s)
|
||||||
Some(s) if ["png", "jpg", "bmp", "gif", "tiff", "jpeg"].contains(&s.to_lowercase().as_str()) => {
|
if ["png", "jpg", "bmp", "gif", "tiff", "jpeg"]
|
||||||
output_string.push_str("<img src=\"data:image/");
|
.contains(&s.to_lowercase().as_str()) =>
|
||||||
output_string.push_str(&s);
|
{
|
||||||
output_string.push_str(";base64,");
|
output_string.push_str("<img src=\"data:image/");
|
||||||
output_string.push_str(&base64::encode(&b));
|
output_string.push_str(&s);
|
||||||
output_string.push_str("\">");
|
output_string.push_str(";base64,");
|
||||||
}
|
output_string.push_str(&base64::encode(&b));
|
||||||
_ => {}
|
output_string.push_str("\">");
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
_ => {}
|
|
||||||
}
|
}
|
||||||
}
|
_ => {}
|
||||||
UntaggedValue::Primitive(Primitive::String(ref b)) => {
|
|
||||||
// This might be a bit much, but it's fun :)
|
|
||||||
match row.tag.anchor {
|
|
||||||
Some(AnchorLocation::Url(f)) |
|
|
||||||
Some(AnchorLocation::File(f)) => {
|
|
||||||
let extension = f.split('.').last().map(String::from);
|
|
||||||
match extension {
|
|
||||||
Some(s) if s.to_lowercase() == "svg" => {
|
|
||||||
output_string.push_str("<img src=\"data:image/svg+xml;base64,");
|
|
||||||
output_string.push_str(&base64::encode(&b.as_bytes()));
|
|
||||||
output_string.push_str("\">");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
output_string.push_str(&(htmlescape::encode_minimal(&format_leaf(&row.value).plain_string(100_000)).replace("\n", "<br>")));
|
|
||||||
}
|
|
||||||
UntaggedValue::Row(row) => {
|
|
||||||
output_string.push_str("<tr>");
|
|
||||||
for header in &headers {
|
|
||||||
let data = row.get_data(header);
|
|
||||||
output_string.push_str("<td>");
|
|
||||||
output_string.push_str(&format_leaf(data.borrow()).plain_string(100_000));
|
|
||||||
output_string.push_str("</td>");
|
|
||||||
}
|
|
||||||
output_string.push_str("</tr>");
|
|
||||||
}
|
|
||||||
p => {
|
|
||||||
output_string.push_str(&(htmlescape::encode_minimal(&format_leaf(&p).plain_string(100_000)).replace("\n", "<br>")));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
UntaggedValue::Primitive(Primitive::String(ref b)) => {
|
||||||
|
// This might be a bit much, but it's fun :)
|
||||||
|
match row.tag.anchor {
|
||||||
|
Some(AnchorLocation::Url(f)) | Some(AnchorLocation::File(f)) => {
|
||||||
|
let extension = f.split('.').last().map(String::from);
|
||||||
|
match extension {
|
||||||
|
Some(s) if s.to_lowercase() == "svg" => {
|
||||||
|
output_string.push_str("<img src=\"data:image/svg+xml;base64,");
|
||||||
|
output_string.push_str(&base64::encode(&b.as_bytes()));
|
||||||
|
output_string.push_str("\">");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
output_string.push_str(
|
||||||
|
&(htmlescape::encode_minimal(&format_leaf(&row.value).plain_string(100_000))
|
||||||
|
.replace("\n", "<br>")),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
UntaggedValue::Row(row) => {
|
||||||
|
output_string.push_str("<tr>");
|
||||||
|
for header in &headers {
|
||||||
|
let data = row.get_data(header);
|
||||||
|
output_string.push_str("<td>");
|
||||||
|
output_string.push_str(&format_leaf(data.borrow()).plain_string(100_000));
|
||||||
|
output_string.push_str("</td>");
|
||||||
|
}
|
||||||
|
output_string.push_str("</tr>");
|
||||||
|
}
|
||||||
|
p => {
|
||||||
|
output_string.push_str(
|
||||||
|
&(htmlescape::encode_minimal(&format_leaf(&p).plain_string(100_000))
|
||||||
|
.replace("\n", "<br>")),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !headers.is_empty() && (headers.len() > 1 || headers[0] != "") {
|
if !headers.is_empty() && (headers.len() > 1 || headers[0] != "") {
|
||||||
output_string.push_str("</table>");
|
output_string.push_str("</table>");
|
||||||
}
|
}
|
||||||
output_string.push_str("</body></html>");
|
output_string.push_str("</body></html>");
|
||||||
|
|
||||||
yield ReturnSuccess::value(UntaggedValue::string(output_string).into_value(name_tag));
|
Ok(OutputStream::one(ReturnSuccess::value(
|
||||||
};
|
UntaggedValue::string(output_string).into_value(name_tag),
|
||||||
|
)))
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -26,55 +26,58 @@ impl WholeStreamCommand for ToMarkdown {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
to_html(args, registry)
|
to_html(args, registry).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_html(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
async fn to_html(
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let stream = async_stream! {
|
let args = args.evaluate_once(®istry).await?;
|
||||||
let args = args.evaluate_once(®istry).await?;
|
let name_tag = args.name_tag();
|
||||||
let name_tag = args.name_tag();
|
let input: Vec<Value> = args.input.collect().await;
|
||||||
let input: Vec<Value> = args.input.collect().await;
|
let headers = nu_protocol::merge_descriptors(&input);
|
||||||
let headers = nu_protocol::merge_descriptors(&input);
|
let mut output_string = String::new();
|
||||||
let mut output_string = String::new();
|
|
||||||
|
|
||||||
if !headers.is_empty() && (headers.len() > 1 || headers[0] != "") {
|
if !headers.is_empty() && (headers.len() > 1 || headers[0] != "") {
|
||||||
|
output_string.push_str("|");
|
||||||
|
for header in &headers {
|
||||||
|
output_string.push_str(&htmlescape::encode_minimal(&header));
|
||||||
output_string.push_str("|");
|
output_string.push_str("|");
|
||||||
for header in &headers {
|
|
||||||
output_string.push_str(&htmlescape::encode_minimal(&header));
|
|
||||||
output_string.push_str("|");
|
|
||||||
}
|
|
||||||
output_string.push_str("\n|");
|
|
||||||
for _ in &headers {
|
|
||||||
output_string.push_str("-");
|
|
||||||
output_string.push_str("|");
|
|
||||||
}
|
|
||||||
output_string.push_str("\n");
|
|
||||||
}
|
}
|
||||||
|
output_string.push_str("\n|");
|
||||||
|
for _ in &headers {
|
||||||
|
output_string.push_str("-");
|
||||||
|
output_string.push_str("|");
|
||||||
|
}
|
||||||
|
output_string.push_str("\n");
|
||||||
|
}
|
||||||
|
|
||||||
for row in input {
|
for row in input {
|
||||||
match row.value {
|
match row.value {
|
||||||
UntaggedValue::Row(row) => {
|
UntaggedValue::Row(row) => {
|
||||||
|
output_string.push_str("|");
|
||||||
|
for header in &headers {
|
||||||
|
let data = row.get_data(header);
|
||||||
|
output_string.push_str(&format_leaf(data.borrow()).plain_string(100_000));
|
||||||
output_string.push_str("|");
|
output_string.push_str("|");
|
||||||
for header in &headers {
|
|
||||||
let data = row.get_data(header);
|
|
||||||
output_string.push_str(&format_leaf(data.borrow()).plain_string(100_000));
|
|
||||||
output_string.push_str("|");
|
|
||||||
}
|
|
||||||
output_string.push_str("\n");
|
|
||||||
}
|
|
||||||
p => {
|
|
||||||
output_string.push_str(&(htmlescape::encode_minimal(&format_leaf(&p).plain_string(100_000))));
|
|
||||||
output_string.push_str("\n");
|
|
||||||
}
|
}
|
||||||
|
output_string.push_str("\n");
|
||||||
|
}
|
||||||
|
p => {
|
||||||
|
output_string.push_str(
|
||||||
|
&(htmlescape::encode_minimal(&format_leaf(&p).plain_string(100_000))),
|
||||||
|
);
|
||||||
|
output_string.push_str("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
yield ReturnSuccess::value(UntaggedValue::string(output_string).into_value(name_tag));
|
Ok(OutputStream::one(ReturnSuccess::value(
|
||||||
};
|
UntaggedValue::string(output_string).into_value(name_tag),
|
||||||
|
)))
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -27,7 +27,7 @@ impl WholeStreamCommand for ToSQLite {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
to_sqlite(args, registry)
|
to_sqlite(args, registry).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_binary(&self) -> bool {
|
fn is_binary(&self) -> bool {
|
||||||
@ -56,7 +56,7 @@ impl WholeStreamCommand for ToDB {
|
|||||||
args: CommandArgs,
|
args: CommandArgs,
|
||||||
registry: &CommandRegistry,
|
registry: &CommandRegistry,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
to_sqlite(args, registry)
|
to_sqlite(args, registry).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_binary(&self) -> bool {
|
fn is_binary(&self) -> bool {
|
||||||
@ -203,26 +203,23 @@ fn sqlite_input_stream_to_bytes(values: Vec<Value>) -> Result<Value, std::io::Er
|
|||||||
Ok(UntaggedValue::binary(out).into_value(tag))
|
Ok(UntaggedValue::binary(out).into_value(tag))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_sqlite(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
|
async fn to_sqlite(
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
let registry = registry.clone();
|
let registry = registry.clone();
|
||||||
let stream = async_stream! {
|
let args = args.evaluate_once(®istry).await?;
|
||||||
let args = args.evaluate_once(®istry).await?;
|
let name_tag = args.name_tag();
|
||||||
let name_tag = args.name_tag();
|
let input: Vec<Value> = args.input.collect().await;
|
||||||
let input: Vec<Value> = args.input.collect().await;
|
|
||||||
|
|
||||||
match sqlite_input_stream_to_bytes(input) {
|
match sqlite_input_stream_to_bytes(input) {
|
||||||
Ok(out) => yield ReturnSuccess::value(out),
|
Ok(out) => Ok(OutputStream::one(ReturnSuccess::value(out))),
|
||||||
_ => {
|
_ => Err(ShellError::labeled_error(
|
||||||
yield Err(ShellError::labeled_error(
|
"Expected a table with SQLite-compatible structure from pipeline",
|
||||||
"Expected a table with SQLite-compatible structure from pipeline",
|
"requires SQLite-compatible input",
|
||||||
"requires SQLite-compatible input",
|
name_tag,
|
||||||
name_tag,
|
)),
|
||||||
))
|
}
|
||||||
},
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(stream.to_output_stream())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -26,9 +26,22 @@ impl WholeStreamCommand for ToTOML {
|
|||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
to_toml(args, registry)
|
to_toml(args, registry)
|
||||||
}
|
}
|
||||||
|
// TODO: add an example here. What commands to run to get a Row(Dictionary)?
|
||||||
|
// fn examples(&self) -> Vec<Example> {
|
||||||
|
// vec![
|
||||||
|
// Example {
|
||||||
|
// description:
|
||||||
|
// "Outputs an TOML string representing TOML document",
|
||||||
|
// example: "echo [1 2 3] | to json",
|
||||||
|
// result: Some(vec![Value::from("[1,2,3]")]),
|
||||||
|
// },
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
// Helper method to recursively convert nu_protocol::Value -> toml::Value
|
||||||
|
// This shouldn't be called at the top-level
|
||||||
|
fn helper(v: &Value) -> Result<toml::Value, ShellError> {
|
||||||
Ok(match &v.value {
|
Ok(match &v.value {
|
||||||
UntaggedValue::Primitive(Primitive::Boolean(b)) => toml::Value::Boolean(*b),
|
UntaggedValue::Primitive(Primitive::Boolean(b)) => toml::Value::Boolean(*b),
|
||||||
UntaggedValue::Primitive(Primitive::Bytes(b)) => toml::Value::Integer(*b as i64),
|
UntaggedValue::Primitive(Primitive::Bytes(b)) => toml::Value::Integer(*b as i64),
|
||||||
@ -66,7 +79,6 @@ pub fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
|||||||
})
|
})
|
||||||
.collect::<Result<Vec<toml::Value>, ShellError>>()?,
|
.collect::<Result<Vec<toml::Value>, ShellError>>()?,
|
||||||
),
|
),
|
||||||
|
|
||||||
UntaggedValue::Table(l) => toml::Value::Array(collect_values(l)?),
|
UntaggedValue::Table(l) => toml::Value::Array(collect_values(l)?),
|
||||||
UntaggedValue::Error(e) => return Err(e.clone()),
|
UntaggedValue::Error(e) => return Err(e.clone()),
|
||||||
UntaggedValue::Block(_) => toml::Value::String("<Block>".to_string()),
|
UntaggedValue::Block(_) => toml::Value::String("<Block>".to_string()),
|
||||||
@ -77,18 +89,47 @@ pub fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
|||||||
UntaggedValue::Row(o) => {
|
UntaggedValue::Row(o) => {
|
||||||
let mut m = toml::map::Map::new();
|
let mut m = toml::map::Map::new();
|
||||||
for (k, v) in o.entries.iter() {
|
for (k, v) in o.entries.iter() {
|
||||||
m.insert(k.clone(), value_to_toml_value(v)?);
|
m.insert(k.clone(), helper(v)?);
|
||||||
}
|
}
|
||||||
toml::Value::Table(m)
|
toml::Value::Table(m)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts a nu_protocol::Value into a toml::Value
|
||||||
|
/// Will return a Shell Error, if the Nu Value is not a valid top-level TOML Value
|
||||||
|
pub fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
||||||
|
match &v.value {
|
||||||
|
UntaggedValue::Row(o) => {
|
||||||
|
let mut m = toml::map::Map::new();
|
||||||
|
for (k, v) in o.entries.iter() {
|
||||||
|
m.insert(k.clone(), helper(v)?);
|
||||||
|
}
|
||||||
|
Ok(toml::Value::Table(m))
|
||||||
|
}
|
||||||
|
UntaggedValue::Primitive(Primitive::String(s)) => {
|
||||||
|
// Attempt to de-serialize the String
|
||||||
|
toml::de::from_str(s).map_err(|_| {
|
||||||
|
ShellError::labeled_error(
|
||||||
|
format!("{:?} unable to de-serialize string to TOML", s),
|
||||||
|
"invalid TOML",
|
||||||
|
v.tag(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
_ => Err(ShellError::labeled_error(
|
||||||
|
format!("{:?} is not a valid top-level TOML", v.value),
|
||||||
|
"invalid TOML",
|
||||||
|
v.tag(),
|
||||||
|
)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn collect_values(input: &[Value]) -> Result<Vec<toml::Value>, ShellError> {
|
fn collect_values(input: &[Value]) -> Result<Vec<toml::Value>, ShellError> {
|
||||||
let mut out = vec![];
|
let mut out = vec![];
|
||||||
|
|
||||||
for value in input {
|
for value in input {
|
||||||
out.push(value_to_toml_value(value)?);
|
out.push(helper(value)?);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(out)
|
Ok(out)
|
||||||
@ -141,7 +182,8 @@ fn to_toml(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::ToTOML;
|
use super::*;
|
||||||
|
use nu_protocol::Dictionary;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn examples_work_as_expected() {
|
fn examples_work_as_expected() {
|
||||||
@ -149,4 +191,60 @@ mod tests {
|
|||||||
|
|
||||||
test_examples(ToTOML {})
|
test_examples(ToTOML {})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_value_to_toml_value() {
|
||||||
|
//
|
||||||
|
// Positive Tests
|
||||||
|
//
|
||||||
|
|
||||||
|
// Dictionary -> What we do in "crates/nu-cli/src/data/config.rs" to write the config file
|
||||||
|
let mut m = indexmap::IndexMap::new();
|
||||||
|
m.insert("rust".to_owned(), Value::from("editor"));
|
||||||
|
m.insert("is".to_owned(), Value::nothing());
|
||||||
|
m.insert(
|
||||||
|
"features".to_owned(),
|
||||||
|
UntaggedValue::Table(vec![
|
||||||
|
UntaggedValue::string("hello").into_untagged_value(),
|
||||||
|
UntaggedValue::string("array").into_untagged_value(),
|
||||||
|
])
|
||||||
|
.into_untagged_value(),
|
||||||
|
);
|
||||||
|
let tv = value_to_toml_value(&UntaggedValue::Row(Dictionary::new(m)).into_untagged_value())
|
||||||
|
.expect("Expected Ok from valid TOML dictionary");
|
||||||
|
assert_eq!(
|
||||||
|
tv.get("features"),
|
||||||
|
Some(&toml::Value::Array(vec![
|
||||||
|
toml::Value::String("hello".to_owned()),
|
||||||
|
toml::Value::String("array".to_owned())
|
||||||
|
]))
|
||||||
|
);
|
||||||
|
// TOML string
|
||||||
|
let tv = value_to_toml_value(&Value::from(
|
||||||
|
r#"
|
||||||
|
title = "TOML Example"
|
||||||
|
|
||||||
|
[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"
|
||||||
|
chrono = { version = "0.4.6", features = ["serde"] }
|
||||||
|
"#,
|
||||||
|
))
|
||||||
|
.expect("Expected Ok from valid TOML string");
|
||||||
|
assert_eq!(
|
||||||
|
tv.get("title").unwrap(),
|
||||||
|
&toml::Value::String("TOML Example".to_owned())
|
||||||
|
);
|
||||||
|
//
|
||||||
|
// Negative Tests
|
||||||
|
//
|
||||||
|
value_to_toml_value(&Value::from("not_valid"))
|
||||||
|
.expect_err("Expected non-valid toml (String) to cause error!");
|
||||||
|
value_to_toml_value(&UntaggedValue::Table(vec![Value::from("1")]).into_untagged_value())
|
||||||
|
.expect_err("Expected non-valid toml (Table) to cause error!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,10 +51,10 @@ impl DirectorySpecificEnvironment {
|
|||||||
let current_dir = std::env::current_dir()?;
|
let current_dir = std::env::current_dir()?;
|
||||||
let working_dir = Some(current_dir.as_path());
|
let working_dir = Some(current_dir.as_path());
|
||||||
|
|
||||||
let keyvals_to_restore = self
|
self
|
||||||
.overwritten_env_values
|
.overwritten_env_values
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|(directory, keyvals)| {
|
.filter(|(directory, keyvals)| {
|
||||||
while let Some(wdir) = working_dir {
|
while let Some(wdir) = working_dir {
|
||||||
if &wdir == directory {
|
if &wdir == directory {
|
||||||
return false;
|
return false;
|
||||||
@ -66,6 +66,8 @@ impl DirectorySpecificEnvironment {
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
|
||||||
|
let mut keyvals_to_restore = IndexMap::new();
|
||||||
Ok(keyvals_to_restore)
|
Ok(keyvals_to_restore)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ pub use crate::data::primitive;
|
|||||||
pub use crate::data::value;
|
pub use crate::data::value;
|
||||||
pub use crate::env::environment_syncer::EnvironmentSyncer;
|
pub use crate::env::environment_syncer::EnvironmentSyncer;
|
||||||
pub use crate::env::host::BasicHost;
|
pub use crate::env::host::BasicHost;
|
||||||
pub use crate::stream::OutputStream;
|
pub use crate::stream::{InputStream, InterruptibleStream, OutputStream};
|
||||||
pub use nu_value_ext::ValueExt;
|
pub use nu_value_ext::ValueExt;
|
||||||
pub use num_traits::cast::ToPrimitive;
|
pub use num_traits::cast::ToPrimitive;
|
||||||
|
|
||||||
|
@ -396,11 +396,15 @@ impl Shell for FilesystemShell {
|
|||||||
|
|
||||||
fn mkdir(
|
fn mkdir(
|
||||||
&self,
|
&self,
|
||||||
MkdirArgs { rest: directories }: MkdirArgs,
|
MkdirArgs {
|
||||||
|
rest: directories,
|
||||||
|
show_created_paths,
|
||||||
|
}: MkdirArgs,
|
||||||
name: Tag,
|
name: Tag,
|
||||||
path: &str,
|
path: &str,
|
||||||
) -> Result<OutputStream, ShellError> {
|
) -> Result<OutputStream, ShellError> {
|
||||||
let path = Path::new(path);
|
let path = Path::new(path);
|
||||||
|
let mut stream = VecDeque::new();
|
||||||
|
|
||||||
if directories.is_empty() {
|
if directories.is_empty() {
|
||||||
return Err(ShellError::labeled_error(
|
return Err(ShellError::labeled_error(
|
||||||
@ -413,7 +417,7 @@ impl Shell for FilesystemShell {
|
|||||||
for dir in directories.iter() {
|
for dir in directories.iter() {
|
||||||
let create_at = path.join(&dir.item);
|
let create_at = path.join(&dir.item);
|
||||||
|
|
||||||
let dir_res = std::fs::create_dir_all(create_at);
|
let dir_res = std::fs::create_dir_all(&create_at);
|
||||||
if let Err(reason) = dir_res {
|
if let Err(reason) = dir_res {
|
||||||
return Err(ShellError::labeled_error(
|
return Err(ShellError::labeled_error(
|
||||||
reason.to_string(),
|
reason.to_string(),
|
||||||
@ -421,9 +425,13 @@ impl Shell for FilesystemShell {
|
|||||||
dir.tag(),
|
dir.tag(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
if show_created_paths {
|
||||||
|
let val = format!("{:}", create_at.to_string_lossy()).into();
|
||||||
|
stream.push_back(Ok(ReturnSuccess::Value(val)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(OutputStream::empty())
|
Ok(stream.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mv(
|
fn mv(
|
||||||
|
@ -24,7 +24,7 @@ fn filesystem_change_from_current_directory_using_absolute_path() {
|
|||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
cwd: dirs.test(),
|
cwd: dirs.test(),
|
||||||
r#"
|
r#"
|
||||||
cd {}
|
cd "{}"
|
||||||
pwd | echo $it
|
pwd | echo $it
|
||||||
"#,
|
"#,
|
||||||
dirs.formats()
|
dirs.formats()
|
||||||
|
@ -8,7 +8,7 @@ fn copies_a_file() {
|
|||||||
Playground::setup("cp_test_1", |dirs, _| {
|
Playground::setup("cp_test_1", |dirs, _| {
|
||||||
nu!(
|
nu!(
|
||||||
cwd: dirs.root(),
|
cwd: dirs.root(),
|
||||||
"cp {} cp_test_1/sample.ini",
|
"cp \"{}\" cp_test_1/sample.ini",
|
||||||
dirs.formats().join("sample.ini")
|
dirs.formats().join("sample.ini")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use nu_test_support::fs::files_exist_at;
|
use nu_test_support::fs::files_exist_at;
|
||||||
use nu_test_support::nu;
|
|
||||||
use nu_test_support::playground::Playground;
|
use nu_test_support::playground::Playground;
|
||||||
|
use nu_test_support::{nu, pipeline};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -61,3 +61,25 @@ fn create_directory_two_parents_up_using_multiple_dots() {
|
|||||||
assert!(expected.exists());
|
assert!(expected.exists());
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn show_created_paths() {
|
||||||
|
Playground::setup("mkdir_test_2", |dirs, _| {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: dirs.test(),
|
||||||
|
pipeline(
|
||||||
|
r#"
|
||||||
|
mkdir -s dir_1 dir_2 dir_3
|
||||||
|
| count
|
||||||
|
| echo $it
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert!(files_exist_at(
|
||||||
|
vec![Path::new("dir_1"), Path::new("dir_2"), Path::new("dir_3")],
|
||||||
|
dirs.test()
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "3");
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -37,7 +37,7 @@ fn writes_out_csv() {
|
|||||||
|
|
||||||
nu!(
|
nu!(
|
||||||
cwd: dirs.root(),
|
cwd: dirs.root(),
|
||||||
"open {}/cargo_sample.toml | get package | save save_test_2/cargo_sample.csv",
|
"open \"{}/cargo_sample.toml\" | get package | save save_test_2/cargo_sample.csv",
|
||||||
dirs.formats()
|
dirs.formats()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-errors"
|
name = "nu-errors"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Core error subsystem for Nushell"
|
description = "Core error subsystem for Nushell"
|
||||||
@ -10,7 +10,7 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
|
|
||||||
ansi_term = "0.12.1"
|
ansi_term = "0.12.1"
|
||||||
bigdecimal = { version = "0.1.2", features = ["serde"] }
|
bigdecimal = { version = "0.1.2", features = ["serde"] }
|
||||||
@ -28,4 +28,4 @@ serde_json = "1.0.53"
|
|||||||
glob = "0.3.0"
|
glob = "0.3.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-parser"
|
name = "nu-parser"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Nushell parser"
|
description = "Nushell parser"
|
||||||
@ -20,9 +20,9 @@ codespan-reporting = "0.9.4"
|
|||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
shellexpand = "2.0.0"
|
shellexpand = "2.0.0"
|
||||||
|
|
||||||
nu-source = { version = "0.14.1", path = "../nu-source" }
|
nu-source = { version = "0.15.0", path = "../nu-source" }
|
||||||
nu-protocol = { version = "0.14.1", path = "../nu-protocol" }
|
nu-protocol = { version = "0.15.0", path = "../nu-protocol" }
|
||||||
nu-errors = { version = "0.14.1", path = "../nu-errors" }
|
nu-errors = { version = "0.15.0", path = "../nu-errors" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
stable = []
|
stable = []
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-plugin"
|
name = "nu-plugin"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Nushell Plugin"
|
description = "Nushell Plugin"
|
||||||
@ -10,10 +10,10 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
nu-value-ext = { path = "../nu-value-ext", version = "0.14.1" }
|
nu-value-ext = { path = "../nu-value-ext", version = "0.15.0" }
|
||||||
|
|
||||||
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
||||||
serde = { version = "1.0.110", features = ["derive"] }
|
serde = { version = "1.0.110", features = ["derive"] }
|
||||||
@ -22,4 +22,4 @@ serde_json = "1.0.53"
|
|||||||
bigdecimal = { version = "0.1.2", features = ["serde"] }
|
bigdecimal = { version = "0.1.2", features = ["serde"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-protocol"
|
name = "nu-protocol"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Core values and protocols for Nushell"
|
description = "Core values and protocols for Nushell"
|
||||||
@ -10,8 +10,8 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
|
|
||||||
serde = { version = "1.0.110", features = ["derive"] }
|
serde = { version = "1.0.110", features = ["derive"] }
|
||||||
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
||||||
@ -37,4 +37,4 @@ toml = "0.5.6"
|
|||||||
serde_json = "1.0.53"
|
serde_json = "1.0.53"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-source"
|
name = "nu-source"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A source string characterizer for Nushell"
|
description = "A source string characterizer for Nushell"
|
||||||
@ -18,4 +18,4 @@ termcolor = "1.1.0"
|
|||||||
pretty = "0.5.2"
|
pretty = "0.5.2"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-test-support"
|
name = "nu-test-support"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A source string characterizer for Nushell"
|
description = "A source string characterizer for Nushell"
|
||||||
@ -10,9 +10,9 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-parser = { path = "../nu-parser", version = "0.14.1" }
|
nu-parser = { path = "../nu-parser", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
|
|
||||||
directories = "2.0.2"
|
directories = "2.0.2"
|
||||||
dunce = "1.0.0"
|
dunce = "1.0.0"
|
||||||
@ -22,4 +22,4 @@ tempfile = "3.1.0"
|
|||||||
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu-value-ext"
|
name = "nu-value-ext"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Extension traits for values in Nushell"
|
description = "Extension traits for values in Nushell"
|
||||||
@ -10,14 +10,14 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
nu-parser = { path = "../nu-parser", version = "0.14.1" }
|
nu-parser = { path = "../nu-parser", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
|
|
||||||
num-traits = "0.2.11"
|
num-traits = "0.2.11"
|
||||||
itertools = "0.9.0"
|
itertools = "0.9.0"
|
||||||
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
indexmap = { version = "1.3.2", features = ["serde-1"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_binaryview"
|
name = "nu_plugin_binaryview"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A binary viewer plugin for Nushell"
|
description = "A binary viewer plugin for Nushell"
|
||||||
@ -12,14 +12,14 @@ doctest = false
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
ansi_term = "0.12.1"
|
ansi_term = "0.12.1"
|
||||||
crossterm = { version = "0.17.5" }
|
crossterm = { version = "0.17.5" }
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
pretty-hex = "0.1.1"
|
pretty-hex = "0.1.1"
|
||||||
image = { version = "0.22.4", default_features = false, features = ["png_codec", "jpeg"] }
|
image = { version = "0.22.4", default_features = false, features = ["png_codec", "jpeg"] }
|
||||||
rawkey = "0.1.2"
|
rawkey = "0.1.2"
|
||||||
neso = "0.5.0"
|
neso = "0.5.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_fetch"
|
name = "nu_plugin_fetch"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A URL fetch plugin for Nushell"
|
description = "A URL fetch plugin for Nushell"
|
||||||
@ -10,14 +10,14 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
||||||
surf = "1.0.3"
|
surf = "1.0.3"
|
||||||
url = "2.1.1"
|
url = "2.1.1"
|
||||||
base64 = "0.12.1"
|
base64 = "0.12.1"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_inc"
|
name = "nu_plugin_inc"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A version incrementer plugin for Nushell"
|
description = "A version incrementer plugin for Nushell"
|
||||||
@ -10,13 +10,13 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
nu-value-ext = { path = "../nu-value-ext", version = "0.14.1" }
|
nu-value-ext = { path = "../nu-value-ext", version = "0.15.0" }
|
||||||
|
|
||||||
semver = "0.10.0"
|
semver = "0.10.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_match"
|
name = "nu_plugin_match"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A regex match plugin for Nushell"
|
description = "A regex match plugin for Nushell"
|
||||||
@ -10,12 +10,12 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
||||||
regex = "1"
|
regex = "1"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_post"
|
name = "nu_plugin_post"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "An HTTP post plugin for Nushell"
|
description = "An HTTP post plugin for Nushell"
|
||||||
@ -10,10 +10,10 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
||||||
surf = "1.0.3"
|
surf = "1.0.3"
|
||||||
url = "2.1.1"
|
url = "2.1.1"
|
||||||
@ -22,4 +22,4 @@ base64 = "0.12.1"
|
|||||||
num-traits = "0.2.11"
|
num-traits = "0.2.11"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_ps"
|
name = "nu_plugin_ps"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A process list plugin for Nushell"
|
description = "A process list plugin for Nushell"
|
||||||
@ -10,18 +10,18 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
|
|
||||||
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
||||||
futures-timer = "3.0.2"
|
futures-timer = "3.0.2"
|
||||||
|
|
||||||
[dependencies.heim]
|
[dependencies.heim]
|
||||||
version = "0.1.0-beta.1"
|
version = "0.1.0-beta.2"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["process"]
|
features = ["process"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_start"
|
name = "nu_plugin_start"
|
||||||
version = "0.1.0"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A plugin to open files/URLs directly from Nushell"
|
description = "A plugin to open files/URLs directly from Nushell"
|
||||||
@ -10,15 +10,15 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
url = "2.1.1"
|
url = "2.1.1"
|
||||||
open = "1.4.0"
|
open = "1.4.0"
|
||||||
glob = "0.3.0"
|
glob = "0.3.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
nu-errors = { version = "0.14.1", path = "../nu-errors" }
|
nu-errors = { version = "0.15.0", path = "../nu-errors" }
|
||||||
nu-source = { version = "0.14.1", path = "../nu-source" }
|
nu-source = { version = "0.15.0", path = "../nu-source" }
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_sys"
|
name = "nu_plugin_sys"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A system info plugin for Nushell"
|
description = "A system info plugin for Nushell"
|
||||||
@ -10,20 +10,20 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
|
|
||||||
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
futures = { version = "0.3", features = ["compat", "io-compat"] }
|
||||||
battery = "0.7.5"
|
battery = "0.7.5"
|
||||||
futures-util = "0.3.5"
|
futures-util = "0.3.5"
|
||||||
|
|
||||||
[dependencies.heim]
|
[dependencies.heim]
|
||||||
version = "0.1.0-beta.1"
|
version = "0.1.0-beta.2"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
features = ["host", "cpu", "memory", "disk", "net", "sensors"]
|
features = ["host", "cpu", "memory", "disk", "net", "sensors"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_textview"
|
name = "nu_plugin_textview"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Text viewer plugin for Nushell"
|
description = "Text viewer plugin for Nushell"
|
||||||
@ -10,10 +10,10 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
|
|
||||||
crossterm = "0.17.5"
|
crossterm = "0.17.5"
|
||||||
syntect = { version = "4.2", default-features = false, features = ["default-fancy"]}
|
syntect = { version = "4.2", default-features = false, features = ["default-fancy"]}
|
||||||
@ -21,4 +21,4 @@ ansi_term = "0.12.1"
|
|||||||
url = "2.1.1"
|
url = "2.1.1"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nu_plugin_tree"
|
name = "nu_plugin_tree"
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
authors = ["The Nu Project Contributors"]
|
authors = ["The Nu Project Contributors"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Tree viewer plugin for Nushell"
|
description = "Tree viewer plugin for Nushell"
|
||||||
@ -10,12 +10,12 @@ license = "MIT"
|
|||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
nu-plugin = { path = "../nu-plugin", version = "0.14.1" }
|
nu-plugin = { path = "../nu-plugin", version = "0.15.0" }
|
||||||
nu-protocol = { path = "../nu-protocol", version = "0.14.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.0" }
|
||||||
nu-source = { path = "../nu-source", version = "0.14.1" }
|
nu-source = { path = "../nu-source", version = "0.15.0" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.14.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.0" }
|
||||||
ptree = {version = "0.2" }
|
ptree = {version = "0.2" }
|
||||||
derive-new = "0.5.8"
|
derive-new = "0.5.8"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
nu-build = { version = "0.14.1", path = "../nu-build" }
|
nu-build = { version = "0.15.0", path = "../nu-build" }
|
||||||
|
@ -83,7 +83,7 @@ version = "0.4.6"
|
|||||||
[dependencies.cursive]
|
[dependencies.cursive]
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["pancurses-backend"]
|
features = ["pancurses-backend"]
|
||||||
version = "0.14.1"
|
version = "0.15.0"
|
||||||
|
|
||||||
[dependencies.futures-preview]
|
[dependencies.futures-preview]
|
||||||
features = ["compat", "io-compat"]
|
features = ["compat", "io-compat"]
|
||||||
|
Loading…
Reference in New Issue
Block a user