From ae5b781159a3d54279db36f15db1163ffd53a906 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Tue, 6 Aug 2019 15:03:13 +1200 Subject: [PATCH] More touchups to errors --- src/commands/from_toml.rs | 6 +++--- src/commands/open.rs | 2 +- src/commands/split_row.rs | 2 +- src/commands/to_csv.rs | 8 +++++--- src/commands/to_json.rs | 8 +++++--- src/commands/to_toml.rs | 10 ++++++---- src/commands/to_yaml.rs | 8 +++++--- src/object/types.rs | 2 +- 8 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/commands/from_toml.rs b/src/commands/from_toml.rs index 79a138b8cb..d6d39ede39 100644 --- a/src/commands/from_toml.rs +++ b/src/commands/from_toml.rs @@ -59,12 +59,12 @@ pub fn from_toml(args: CommandArgs) -> Result { )), } } - _ => Err(ShellError::labeled_error_with_secondary( + x => Err(ShellError::labeled_error_with_secondary( "Expected a string from pipeline", "requires string input", span, - "value originates from here", - a.span(), + format!("{} originates from here", x.type_name()), + value_tag.span, )), } }) diff --git a/src/commands/open.rs b/src/commands/open.rs index 933e743288..70059ccf9c 100644 --- a/src/commands/open.rs +++ b/src/commands/open.rs @@ -20,7 +20,7 @@ command! { let full_path = PathBuf::from(cwd); - let path_str = path.to_str().ok_or(ShellError::type_error("Path", "invalid path".simple_spanned(path.span())))?; + let path_str = path.to_str().ok_or(ShellError::type_error("Path", "invalid path".tagged(path.tag())))?; let (file_extension, contents, contents_tag, span_source) = fetch(&full_path, path_str, path.span())?; diff --git a/src/commands/split_row.rs b/src/commands/split_row.rs index b327bc2b6c..acd898a289 100644 --- a/src/commands/split_row.rs +++ b/src/commands/split_row.rs @@ -30,7 +30,7 @@ pub fn split_row(args: CommandArgs) -> Result { let mut result = VecDeque::new(); for s in split_result { result.push_back(ReturnSuccess::value( - Value::Primitive(Primitive::String(s.into())).simple_spanned(v.span()), + Value::Primitive(Primitive::String(s.into())).tagged(v.tag()), )); } result diff --git a/src/commands/to_csv.rs b/src/commands/to_csv.rs index d25fe85704..017a4a2497 100644 --- a/src/commands/to_csv.rs +++ b/src/commands/to_csv.rs @@ -45,10 +45,12 @@ pub fn to_csv(args: CommandArgs) -> Result { Ok(x) => ReturnSuccess::value( Value::Primitive(Primitive::String(x)).simple_spanned(name_span), ), - Err(_) => Err(ShellError::labeled_error( - "Can not convert to CSV string", - "can not convert piped data to CSV string", + _ => Err(ShellError::labeled_error_with_secondary( + "Expected an object with CSV-compatible structure from pipeline", + "requires CSV-compatible input", name_span, + format!("{} originates from here", a.item.type_name()), + a.span(), )), }) .to_output_stream()) diff --git a/src/commands/to_json.rs b/src/commands/to_json.rs index 9b0bece427..75bd6085ec 100644 --- a/src/commands/to_json.rs +++ b/src/commands/to_json.rs @@ -51,10 +51,12 @@ pub fn to_json(args: CommandArgs) -> Result { Ok(x) => ReturnSuccess::value( Value::Primitive(Primitive::String(x)).simple_spanned(name_span), ), - Err(_) => Err(ShellError::labeled_error( - "Can not convert to JSON string", - "can not convert piped data to JSON string", + _ => Err(ShellError::labeled_error_with_secondary( + "Expected an object with JSON-compatible structure from pipeline", + "requires JSON-compatible input", name_span, + format!("{} originates from here", a.item.type_name()), + a.span(), )), }, ) diff --git a/src/commands/to_toml.rs b/src/commands/to_toml.rs index 7ec161dc1a..b228e243e3 100644 --- a/src/commands/to_toml.rs +++ b/src/commands/to_toml.rs @@ -45,10 +45,12 @@ pub fn to_toml(args: CommandArgs) -> Result { Value::Primitive(Primitive::String(val)).simple_spanned(name_span), ) } - - Err(err) => Err(ShellError::type_error( - "Can not convert to a TOML string", - format!("{:?} - {:?}", a.type_name(), err).simple_spanned(name_span), + _ => Err(ShellError::labeled_error_with_secondary( + "Expected an object with TOML-compatible structure from pipeline", + "requires TOML-compatible input", + name_span, + format!("{} originates from here", a.item.type_name()), + a.span(), )), }) .to_output_stream()) diff --git a/src/commands/to_yaml.rs b/src/commands/to_yaml.rs index 6937462e74..a1b190ae5d 100644 --- a/src/commands/to_yaml.rs +++ b/src/commands/to_yaml.rs @@ -49,10 +49,12 @@ pub fn to_yaml(args: CommandArgs) -> Result { Ok(x) => ReturnSuccess::value( Value::Primitive(Primitive::String(x)).simple_spanned(name_span), ), - Err(_) => Err(ShellError::labeled_error( - "Can not convert to YAML string", - "can not convert piped data to YAML string", + _ => Err(ShellError::labeled_error_with_secondary( + "Expected an object with YAML-compatible structure from pipeline", + "requires YAML-compatible input", name_span, + format!("{} originates from here", a.item.type_name()), + a.span(), )), }, ) diff --git a/src/object/types.rs b/src/object/types.rs index efa1d44bf0..6cdc0d7d2e 100644 --- a/src/object/types.rs +++ b/src/object/types.rs @@ -21,7 +21,7 @@ pub trait ExtractType: Sized { impl ExtractType for Tagged { fn extract(value: &Tagged) -> Result, ShellError> { - Ok(T::extract(value)?.simple_spanned(value.span())) + Ok(T::extract(value)?.tagged(value.tag())) } fn check(value: &'value Tagged) -> Result<&'value Tagged, ShellError> {