mirror of
https://github.com/nushell/nushell.git
synced 2025-08-10 00:07:46 +02:00
Remove Span::unknown (#525)
This commit is contained in:
@ -70,22 +70,22 @@ Test' | from eml",
|
||||
Value::Record {
|
||||
cols: vec!["Name".to_string(), "Address".to_string()],
|
||||
vals: vec![
|
||||
Value::nothing(Span::unknown()),
|
||||
Value::nothing(Span::test_data()),
|
||||
Value::test_string("test@email.com"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec!["Name".to_string(), "Address".to_string()],
|
||||
vals: vec![
|
||||
Value::nothing(Span::unknown()),
|
||||
Value::nothing(Span::test_data()),
|
||||
Value::test_string("someone@somewhere.com"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::test_string("Test"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
Example {
|
||||
@ -107,22 +107,22 @@ Test' | from eml -b 1",
|
||||
Value::Record {
|
||||
cols: vec!["Name".to_string(), "Address".to_string()],
|
||||
vals: vec![
|
||||
Value::nothing(Span::unknown()),
|
||||
Value::nothing(Span::test_data()),
|
||||
Value::test_string("test@email.com"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec!["Name".to_string(), "Address".to_string()],
|
||||
vals: vec![
|
||||
Value::nothing(Span::unknown()),
|
||||
Value::nothing(Span::test_data()),
|
||||
Value::test_string("someone@somewhere.com"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::test_string("T"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
]
|
||||
|
@ -57,36 +57,36 @@ END:VCALENDAR' | from ics",
|
||||
vals: vec![
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
}]
|
||||
}
|
||||
|
@ -34,16 +34,16 @@ b=2' | from ini",
|
||||
vals: vec![
|
||||
Value::String {
|
||||
val: "1".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::String {
|
||||
val: "2".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
}]
|
||||
}
|
||||
|
@ -32,9 +32,9 @@ impl Command for FromJson {
|
||||
cols: vec!["a".to_string()],
|
||||
vals: vec![Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
Example {
|
||||
@ -45,23 +45,23 @@ impl Command for FromJson {
|
||||
vals: vec![
|
||||
Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![
|
||||
Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Int {
|
||||
val: 2,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
]
|
||||
|
@ -43,7 +43,7 @@ impl Command for FromOds {
|
||||
let sel_sheets = if let Some(Value::List { vals: columns, .. }) =
|
||||
call.get_flag(engine_state, stack, "sheets")?
|
||||
{
|
||||
convert_columns(columns.as_slice())?
|
||||
convert_columns(columns.as_slice(), call.head)?
|
||||
} else {
|
||||
vec![]
|
||||
};
|
||||
@ -67,14 +67,14 @@ impl Command for FromOds {
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_columns(columns: &[Value]) -> Result<Vec<String>, ShellError> {
|
||||
fn convert_columns(columns: &[Value], span: Span) -> Result<Vec<String>, ShellError> {
|
||||
let res = columns
|
||||
.iter()
|
||||
.map(|value| match &value {
|
||||
Value::String { val: s, .. } => Ok(s.clone()),
|
||||
_ => Err(ShellError::IncompatibleParametersSingle(
|
||||
"Incorrect column format, Only string as column name".to_string(),
|
||||
value.span().unwrap_or_else(|_| Span::unknown()),
|
||||
value.span().unwrap_or(span),
|
||||
)),
|
||||
})
|
||||
.collect::<Result<Vec<String>, _>>()?;
|
||||
@ -82,7 +82,7 @@ fn convert_columns(columns: &[Value]) -> Result<Vec<String>, ShellError> {
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
fn collect_binary(input: PipelineData) -> Result<Vec<u8>, ShellError> {
|
||||
fn collect_binary(input: PipelineData, span: Span) -> Result<Vec<u8>, ShellError> {
|
||||
let mut bytes = vec![];
|
||||
let mut values = input.into_iter();
|
||||
|
||||
@ -94,7 +94,7 @@ fn collect_binary(input: PipelineData) -> Result<Vec<u8>, ShellError> {
|
||||
Some(x) => {
|
||||
return Err(ShellError::UnsupportedInput(
|
||||
"Expected binary from pipeline".to_string(),
|
||||
x.span().unwrap_or_else(|_| Span::unknown()),
|
||||
x.span().unwrap_or(span),
|
||||
))
|
||||
}
|
||||
None => break,
|
||||
@ -109,7 +109,7 @@ fn from_ods(
|
||||
head: Span,
|
||||
sel_sheets: Vec<String>,
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let bytes = collect_binary(input)?;
|
||||
let bytes = collect_binary(input, head)?;
|
||||
let buf: Cursor<Vec<u8>> = Cursor::new(bytes);
|
||||
let mut ods = Ods::<_>::new(buf)
|
||||
.map_err(|_| ShellError::UnsupportedInput("Could not load ods file".to_string(), head))?;
|
||||
|
@ -43,13 +43,13 @@ impl Command for FromSsv {
|
||||
example: r#"'FOO BAR
|
||||
1 2' | from ssv"#,
|
||||
description: "Converts ssv formatted string to table",
|
||||
result: Some(Value::List { vals: vec![Value::Record { cols: vec!["FOO".to_string(), "BAR".to_string()], vals: vec![Value::String { val: "1".to_string(), span: Span::unknown() }, Value::String { val: "2".to_string(), span: Span::unknown() }], span: Span::unknown() }], span: Span::unknown() }),
|
||||
result: Some(Value::List { vals: vec![Value::Record { cols: vec!["FOO".to_string(), "BAR".to_string()], vals: vec![Value::String { val: "1".to_string(), span: Span::test_data() }, Value::String { val: "2".to_string(), span: Span::test_data() }], span: Span::test_data() }], span: Span::test_data() }),
|
||||
}, Example {
|
||||
example: r#"'FOO BAR
|
||||
1 2' | from ssv -n"#,
|
||||
description: "Converts ssv formatted string to table but not treating the first row as column names",
|
||||
result: Some(
|
||||
Value::List { vals: vec![Value::Record { cols: vec!["Column1".to_string(), "Column2".to_string()], vals: vec![Value::String { val: "FOO".to_string(), span: Span::unknown() }, Value::String { val: "BAR".to_string(), span: Span::unknown() }], span: Span::unknown() }, Value::Record { cols: vec!["Column1".to_string(), "Column2".to_string()], vals: vec![Value::String { val: "1".to_string(), span: Span::unknown() }, Value::String { val: "2".to_string(), span: Span::unknown() }], span: Span::unknown() }], span: Span::unknown() }),
|
||||
Value::List { vals: vec![Value::Record { cols: vec!["Column1".to_string(), "Column2".to_string()], vals: vec![Value::String { val: "FOO".to_string(), span: Span::test_data() }, Value::String { val: "BAR".to_string(), span: Span::test_data() }], span: Span::test_data() }, Value::Record { cols: vec!["Column1".to_string(), "Column2".to_string()], vals: vec![Value::String { val: "1".to_string(), span: Span::test_data() }, Value::String { val: "2".to_string(), span: Span::test_data() }], span: Span::test_data() }], span: Span::test_data() }),
|
||||
}]
|
||||
}
|
||||
|
||||
|
@ -29,9 +29,9 @@ impl Command for FromToml {
|
||||
cols: vec!["a".to_string()],
|
||||
vals: vec![Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
Example {
|
||||
@ -43,23 +43,23 @@ b = [1, 2]' | from toml",
|
||||
vals: vec![
|
||||
Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::List {
|
||||
vals: vec![
|
||||
Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Int {
|
||||
val: 2,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
]
|
||||
|
@ -47,7 +47,7 @@ impl Command for FromUrl {
|
||||
Value::test_string("ham"),
|
||||
Value::test_string("butter"),
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
}]
|
||||
}
|
||||
|
@ -58,17 +58,17 @@ END:VCARD' | from vcf",
|
||||
vals: vec![
|
||||
Value::String {
|
||||
val: "N".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::String {
|
||||
val: "Foo".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Nothing {
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec![
|
||||
@ -79,17 +79,17 @@ END:VCARD' | from vcf",
|
||||
vals: vec![
|
||||
Value::String {
|
||||
val: "FN".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::String {
|
||||
val: "Bar".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Nothing {
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec![
|
||||
@ -100,24 +100,24 @@ END:VCARD' | from vcf",
|
||||
vals: vec![
|
||||
Value::String {
|
||||
val: "EMAIL".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::String {
|
||||
val: "foo@bar.com".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Nothing {
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
}]
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ impl Command for FromXlsx {
|
||||
let sel_sheets = if let Some(Value::List { vals: columns, .. }) =
|
||||
call.get_flag(engine_state, stack, "sheets")?
|
||||
{
|
||||
convert_columns(columns.as_slice())?
|
||||
convert_columns(columns.as_slice(), call.head)?
|
||||
} else {
|
||||
vec![]
|
||||
};
|
||||
@ -67,14 +67,14 @@ impl Command for FromXlsx {
|
||||
}
|
||||
}
|
||||
|
||||
fn convert_columns(columns: &[Value]) -> Result<Vec<String>, ShellError> {
|
||||
fn convert_columns(columns: &[Value], span: Span) -> Result<Vec<String>, ShellError> {
|
||||
let res = columns
|
||||
.iter()
|
||||
.map(|value| match &value {
|
||||
Value::String { val: s, .. } => Ok(s.clone()),
|
||||
_ => Err(ShellError::IncompatibleParametersSingle(
|
||||
"Incorrect column format, Only string as column name".to_string(),
|
||||
value.span().unwrap_or_else(|_| Span::unknown()),
|
||||
value.span().unwrap_or(span),
|
||||
)),
|
||||
})
|
||||
.collect::<Result<Vec<String>, _>>()?;
|
||||
@ -82,7 +82,7 @@ fn convert_columns(columns: &[Value]) -> Result<Vec<String>, ShellError> {
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
fn collect_binary(input: PipelineData) -> Result<Vec<u8>, ShellError> {
|
||||
fn collect_binary(input: PipelineData, span: Span) -> Result<Vec<u8>, ShellError> {
|
||||
let mut bytes = vec![];
|
||||
let mut values = input.into_iter();
|
||||
|
||||
@ -94,7 +94,7 @@ fn collect_binary(input: PipelineData) -> Result<Vec<u8>, ShellError> {
|
||||
Some(x) => {
|
||||
return Err(ShellError::UnsupportedInput(
|
||||
"Expected binary from pipeline".to_string(),
|
||||
x.span().unwrap_or_else(|_| Span::unknown()),
|
||||
x.span().unwrap_or(span),
|
||||
))
|
||||
}
|
||||
None => break,
|
||||
@ -109,7 +109,7 @@ fn from_xlsx(
|
||||
head: Span,
|
||||
sel_sheets: Vec<String>,
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let bytes = collect_binary(input)?;
|
||||
let bytes = collect_binary(input, head)?;
|
||||
let buf: Cursor<Vec<u8>> = Cursor::new(bytes);
|
||||
let mut xlsx = Xlsx::<_>::new(buf)
|
||||
.map_err(|_| ShellError::UnsupportedInput("Could not load xlsx file".to_string(), head))?;
|
||||
|
@ -55,31 +55,31 @@ impl Command for FromXml {
|
||||
Value::List {
|
||||
vals: vec![Value::String {
|
||||
val: "Event".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec![],
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec![],
|
||||
vals: vec![],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
}]
|
||||
}
|
||||
@ -201,26 +201,26 @@ mod tests {
|
||||
fn string(input: impl Into<String>) -> Value {
|
||||
Value::String {
|
||||
val: input.into(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}
|
||||
}
|
||||
|
||||
fn row(entries: IndexMap<String, Value>) -> Value {
|
||||
Value::from(Spanned {
|
||||
item: entries,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
})
|
||||
}
|
||||
|
||||
fn table(list: &[Value]) -> Value {
|
||||
Value::List {
|
||||
vals: list.to_vec(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}
|
||||
}
|
||||
|
||||
fn parse(xml: &str) -> Result<Value, roxmltree::Error> {
|
||||
from_xml_string_to_value(xml.to_string(), Span::unknown())
|
||||
from_xml_string_to_value(xml.to_string(), Span::test_data())
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -33,9 +33,9 @@ impl Command for FromYaml {
|
||||
cols: vec!["a".to_string()],
|
||||
vals: vec![Value::Int {
|
||||
val: 1,
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
Example {
|
||||
@ -46,18 +46,18 @@ impl Command for FromYaml {
|
||||
Value::Record {
|
||||
cols: vec!["a".to_string()],
|
||||
vals: vec![Value::test_int(1)],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec!["b".to_string()],
|
||||
vals: vec![Value::List {
|
||||
vals: vec![Value::test_int(1), Value::test_int(2)],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
]
|
||||
@ -233,9 +233,9 @@ mod test {
|
||||
cols: vec!["value".to_string()],
|
||||
vals: vec![Value::String {
|
||||
val: "{{ something }}".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
TestCase {
|
||||
@ -245,15 +245,15 @@ mod test {
|
||||
cols: vec!["value".to_string()],
|
||||
vals: vec![Value::String {
|
||||
val: "{{ something }}".to_string(),
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
},
|
||||
];
|
||||
let config = Config::default();
|
||||
for tc in tt {
|
||||
let actual = from_yaml_string_to_value(tc.input.to_owned(), Span::unknown());
|
||||
let actual = from_yaml_string_to_value(tc.input.to_owned(), Span::test_data());
|
||||
if actual.is_err() {
|
||||
assert!(
|
||||
tc.expected.is_err(),
|
||||
|
@ -7,6 +7,7 @@ fn from_value_to_delimited_string(
|
||||
value: &Value,
|
||||
separator: char,
|
||||
config: &Config,
|
||||
head: Span,
|
||||
) -> Result<String, ShellError> {
|
||||
match value {
|
||||
Value::Record { cols, vals, span } => {
|
||||
@ -19,7 +20,7 @@ fn from_value_to_delimited_string(
|
||||
for (k, v) in cols.iter().zip(vals.iter()) {
|
||||
fields.push_back(k.clone());
|
||||
|
||||
values.push_back(to_string_tagged_value(v, config)?);
|
||||
values.push_back(to_string_tagged_value(v, config, *span)?);
|
||||
}
|
||||
|
||||
wtr.write_record(fields).expect("can not write.");
|
||||
@ -44,7 +45,8 @@ fn from_value_to_delimited_string(
|
||||
wtr.write_record(
|
||||
vals.iter()
|
||||
.map(|ele| {
|
||||
to_string_tagged_value(ele, config).unwrap_or_else(|_| String::new())
|
||||
to_string_tagged_value(ele, config, *span)
|
||||
.unwrap_or_else(|_| String::new())
|
||||
})
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
@ -57,7 +59,7 @@ fn from_value_to_delimited_string(
|
||||
let mut row = vec![];
|
||||
for desc in &merged_descriptors {
|
||||
row.push(match l.to_owned().get_data_by_key(desc) {
|
||||
Some(s) => to_string_tagged_value(&s, config)?,
|
||||
Some(s) => to_string_tagged_value(&s, config, *span)?,
|
||||
None => String::new(),
|
||||
});
|
||||
}
|
||||
@ -72,11 +74,11 @@ fn from_value_to_delimited_string(
|
||||
})?;
|
||||
Ok(v)
|
||||
}
|
||||
_ => to_string_tagged_value(value, config),
|
||||
_ => to_string_tagged_value(value, config, head),
|
||||
}
|
||||
}
|
||||
|
||||
fn to_string_tagged_value(v: &Value, config: &Config) -> Result<String, ShellError> {
|
||||
fn to_string_tagged_value(v: &Value, config: &Config, span: Span) -> Result<String, ShellError> {
|
||||
match &v {
|
||||
Value::String { .. }
|
||||
| Value::Bool { .. }
|
||||
@ -94,7 +96,7 @@ fn to_string_tagged_value(v: &Value, config: &Config) -> Result<String, ShellErr
|
||||
Value::Nothing { .. } => Ok(String::new()),
|
||||
_ => Err(ShellError::UnsupportedInput(
|
||||
"Unexpected value".to_string(),
|
||||
v.span().unwrap_or_else(|_| Span::unknown()),
|
||||
v.span().unwrap_or(span),
|
||||
)),
|
||||
}
|
||||
}
|
||||
@ -126,7 +128,7 @@ pub fn to_delimited_data(
|
||||
config: Config,
|
||||
) -> Result<PipelineData, ShellError> {
|
||||
let value = input.into_value(span);
|
||||
let output = match from_value_to_delimited_string(&value, sep, &config) {
|
||||
let output = match from_value_to_delimited_string(&value, sep, &config, span) {
|
||||
Ok(mut x) => {
|
||||
if noheaders {
|
||||
if let Some(second_line) = x.find('\n') {
|
||||
@ -139,7 +141,7 @@ pub fn to_delimited_data(
|
||||
Err(_) => Err(ShellError::CantConvert(
|
||||
format_name.into(),
|
||||
value.get_type().to_string(),
|
||||
value.span().unwrap_or_else(|_| Span::unknown()),
|
||||
value.span().unwrap_or(span),
|
||||
)),
|
||||
}?;
|
||||
Ok(Value::string(output, span).into_pipeline_data())
|
||||
|
@ -352,7 +352,7 @@ mod tests {
|
||||
let value = Value::Record {
|
||||
cols: vec!["H1".to_string()],
|
||||
vals: vec![Value::test_string("Ecuador")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
};
|
||||
|
||||
assert_eq!(fragment(value, false, &Config::default()), "# Ecuador\n");
|
||||
@ -363,7 +363,7 @@ mod tests {
|
||||
let value = Value::Record {
|
||||
cols: vec!["H2".to_string()],
|
||||
vals: vec![Value::test_string("Ecuador")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
};
|
||||
|
||||
assert_eq!(fragment(value, false, &Config::default()), "## Ecuador\n");
|
||||
@ -374,7 +374,7 @@ mod tests {
|
||||
let value = Value::Record {
|
||||
cols: vec!["H3".to_string()],
|
||||
vals: vec![Value::test_string("Ecuador")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
};
|
||||
|
||||
assert_eq!(fragment(value, false, &Config::default()), "### Ecuador\n");
|
||||
@ -385,7 +385,7 @@ mod tests {
|
||||
let value = Value::Record {
|
||||
cols: vec!["BLOCKQUOTE".to_string()],
|
||||
vals: vec![Value::test_string("Ecuador")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
};
|
||||
|
||||
assert_eq!(fragment(value, false, &Config::default()), "> Ecuador\n");
|
||||
@ -398,20 +398,20 @@ mod tests {
|
||||
Value::Record {
|
||||
cols: vec!["country".to_string()],
|
||||
vals: vec![Value::test_string("Ecuador")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec!["country".to_string()],
|
||||
vals: vec![Value::test_string("New Zealand")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Value::Record {
|
||||
cols: vec!["country".to_string()],
|
||||
vals: vec![Value::test_string("USA")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
|
@ -109,7 +109,7 @@ fn toml_into_pipeline_data(
|
||||
}
|
||||
}
|
||||
|
||||
fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
||||
fn value_to_toml_value(v: &Value, head: Span) -> Result<toml::Value, ShellError> {
|
||||
match v {
|
||||
Value::Record { .. } => helper(v),
|
||||
Value::List { ref vals, span } => match &vals[..] {
|
||||
@ -130,7 +130,7 @@ fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
||||
}
|
||||
_ => Err(ShellError::UnsupportedInput(
|
||||
format!("{:?} is not a valid top-level TOML", v.get_type()),
|
||||
v.span().unwrap_or_else(|_| Span::unknown()),
|
||||
v.span().unwrap_or(head),
|
||||
)),
|
||||
}
|
||||
}
|
||||
@ -138,7 +138,7 @@ fn value_to_toml_value(v: &Value) -> Result<toml::Value, ShellError> {
|
||||
fn to_toml(input: PipelineData, span: Span) -> Result<PipelineData, ShellError> {
|
||||
let value = input.into_value(span);
|
||||
|
||||
let toml_value = value_to_toml_value(&value)?;
|
||||
let toml_value = value_to_toml_value(&value, span)?;
|
||||
match toml_value {
|
||||
toml::Value::Array(ref vec) => match vec[..] {
|
||||
[toml::Value::Table(_)] => toml_into_pipeline_data(
|
||||
@ -172,18 +172,21 @@ mod tests {
|
||||
|
||||
let mut m = indexmap::IndexMap::new();
|
||||
m.insert("rust".to_owned(), Value::test_string("editor"));
|
||||
m.insert("is".to_owned(), Value::nothing(Span::unknown()));
|
||||
m.insert("is".to_owned(), Value::nothing(Span::test_data()));
|
||||
m.insert(
|
||||
"features".to_owned(),
|
||||
Value::List {
|
||||
vals: vec![Value::test_string("hello"), Value::test_string("array")],
|
||||
span: Span::unknown(),
|
||||
span: Span::test_data(),
|
||||
},
|
||||
);
|
||||
let tv = value_to_toml_value(&Value::from(Spanned {
|
||||
item: m,
|
||||
span: Span::unknown(),
|
||||
}))
|
||||
let tv = value_to_toml_value(
|
||||
&Value::from(Spanned {
|
||||
item: m,
|
||||
span: Span::test_data(),
|
||||
}),
|
||||
Span::test_data(),
|
||||
)
|
||||
.expect("Expected Ok from valid TOML dictionary");
|
||||
assert_eq!(
|
||||
tv.get("features"),
|
||||
@ -193,8 +196,9 @@ mod tests {
|
||||
]))
|
||||
);
|
||||
// TOML string
|
||||
let tv = value_to_toml_value(&Value::test_string(
|
||||
r#"
|
||||
let tv = value_to_toml_value(
|
||||
&Value::test_string(
|
||||
r#"
|
||||
title = "TOML Example"
|
||||
|
||||
[owner]
|
||||
@ -206,7 +210,9 @@ mod tests {
|
||||
sysinfo = "0.8.4"
|
||||
chrono = { version = "0.4.6", features = ["serde"] }
|
||||
"#,
|
||||
))
|
||||
),
|
||||
Span::test_data(),
|
||||
)
|
||||
.expect("Expected Ok from valid TOML string");
|
||||
assert_eq!(
|
||||
tv.get("title").unwrap(),
|
||||
@ -215,12 +221,15 @@ mod tests {
|
||||
//
|
||||
// Negative Tests
|
||||
//
|
||||
value_to_toml_value(&Value::test_string("not_valid"))
|
||||
value_to_toml_value(&Value::test_string("not_valid"), Span::test_data())
|
||||
.expect_err("Expected non-valid toml (String) to cause error!");
|
||||
value_to_toml_value(&Value::List {
|
||||
vals: vec![Value::test_string("1")],
|
||||
span: Span::unknown(),
|
||||
})
|
||||
value_to_toml_value(
|
||||
&Value::List {
|
||||
vals: vec![Value::test_string("1")],
|
||||
span: Span::test_data(),
|
||||
},
|
||||
Span::test_data(),
|
||||
)
|
||||
.expect_err("Expected non-valid toml (Table) to cause error!");
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ fn to_url(input: PipelineData, head: Span) -> Result<PipelineData, ShellError> {
|
||||
}
|
||||
other => Err(ShellError::UnsupportedInput(
|
||||
"Expected a table from pipeline".to_string(),
|
||||
other.span().unwrap_or_else(|_| Span::unknown()),
|
||||
other.span().unwrap_or(head),
|
||||
)),
|
||||
})
|
||||
.collect();
|
||||
|
Reference in New Issue
Block a user