mirror of
https://github.com/nushell/nushell.git
synced 2024-11-25 09:53:43 +01:00
give better error if required field of url join
is invalid (#10589)
# Description Fix #10506 by adding `ExpectedNonNull` `ShellError` if required field is entered as `$nothing`, `null`, " ", etc. This adds a new `ShellError`, `ExpectedNonNull`, taking the expected type and span. # User-Facing Changes Will get a more helpful error in the case described by #10506. Examples: ```nushell ➜ {scheme: "", host: "github.com"} | url join Error: nu:🐚:expected_non_null × Expected string found null. ╭─[entry #16:1:1] 1 │ {scheme: "", host: "github.com"} | url join · ─┬ · ╰── expected string, found null ╰──── ``` ```nushell ❯ {scheme: "https", host: null} | url join Error: nu:🐚:expected_non_null × Expected string found null. ╭─[entry #19:1:1] 1 │ {scheme: "https", host: null} | url join · ──┬─ · ╰── expected string, found null ╰──── ``` # Tests + Formatting All pass.
This commit is contained in:
parent
dc3c34275d
commit
1402508416
@ -223,12 +223,11 @@ impl UrlComponents {
|
||||
};
|
||||
}
|
||||
|
||||
// a part from port and params all other keys are strings.
|
||||
match value.as_string() {
|
||||
Ok(s) => {
|
||||
if s.trim().is_empty() {
|
||||
Ok(self)
|
||||
} else {
|
||||
// apart from port and params all other keys are strings.
|
||||
let s = value.as_string()?; // If value fails String conversion, just output this ShellError
|
||||
if !Self::check_empty_string_ok(&key, &s, value_span)? {
|
||||
return Ok(self);
|
||||
}
|
||||
match key.as_str() {
|
||||
"host" => Ok(Self {
|
||||
host: Some(s),
|
||||
@ -286,7 +285,7 @@ impl UrlComponents {
|
||||
engine_state,
|
||||
&ShellError::GenericError(
|
||||
format!("'{key}' is not a valid URL field"),
|
||||
format!("Remove '{key}' col from input record"),
|
||||
format!("remove '{key}' col from input record"),
|
||||
Some(span),
|
||||
None,
|
||||
vec![],
|
||||
@ -296,8 +295,24 @@ impl UrlComponents {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check if value is empty. If so, check if that is fine, i.e., not a required input
|
||||
fn check_empty_string_ok(key: &str, s: &str, value_span: Span) -> Result<bool, ShellError> {
|
||||
if !s.trim().is_empty() {
|
||||
return Ok(true);
|
||||
}
|
||||
_ => Ok(self),
|
||||
match key {
|
||||
"host" => Err(ShellError::UnsupportedConfigValue(
|
||||
"non-empty string".into(),
|
||||
"empty string".into(),
|
||||
value_span,
|
||||
)),
|
||||
"scheme" => Err(ShellError::UnsupportedConfigValue(
|
||||
"non-empty string".into(),
|
||||
"empty string".into(),
|
||||
value_span,
|
||||
)),
|
||||
_ => Ok(false),
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user