mirror of
https://github.com/nushell/nushell
synced 2025-01-28 21:05:48 +00:00
Reduce code duplication in to json
command (#4551)
This commit is contained in:
parent
ac99ac003a
commit
efd62f917f
1 changed files with 20 additions and 41 deletions
|
@ -30,10 +30,27 @@ impl Command for ToJson {
|
||||||
input: PipelineData,
|
input: PipelineData,
|
||||||
) -> Result<nu_protocol::PipelineData, ShellError> {
|
) -> Result<nu_protocol::PipelineData, ShellError> {
|
||||||
let raw = call.has_flag("raw");
|
let raw = call.has_flag("raw");
|
||||||
if raw {
|
|
||||||
to_json_raw(call, input)
|
let json_function = if raw {
|
||||||
|
nu_json::to_string_raw
|
||||||
} else {
|
} else {
|
||||||
to_json(call, input)
|
nu_json::to_string
|
||||||
|
};
|
||||||
|
|
||||||
|
let span = call.head;
|
||||||
|
let value = input.into_value(span);
|
||||||
|
let json_value = value_to_json_value(&value)?;
|
||||||
|
|
||||||
|
match json_function(&json_value) {
|
||||||
|
Ok(serde_json_string) => Ok(Value::String {
|
||||||
|
val: serde_json_string,
|
||||||
|
span,
|
||||||
|
}
|
||||||
|
.into_pipeline_data()),
|
||||||
|
_ => Ok(Value::Error {
|
||||||
|
error: ShellError::CantConvert("JSON".into(), value.get_type().to_string(), span),
|
||||||
|
}
|
||||||
|
.into_pipeline_data()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,44 +111,6 @@ fn json_list(input: &[Value]) -> Result<Vec<nu_json::Value>, ShellError> {
|
||||||
Ok(out)
|
Ok(out)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_json(call: &Call, input: PipelineData) -> Result<PipelineData, ShellError> {
|
|
||||||
let span = call.head;
|
|
||||||
|
|
||||||
let value = input.into_value(span);
|
|
||||||
|
|
||||||
let json_value = value_to_json_value(&value)?;
|
|
||||||
match nu_json::to_string(&json_value) {
|
|
||||||
Ok(serde_json_string) => Ok(Value::String {
|
|
||||||
val: serde_json_string,
|
|
||||||
span,
|
|
||||||
}
|
|
||||||
.into_pipeline_data()),
|
|
||||||
_ => Ok(Value::Error {
|
|
||||||
error: ShellError::CantConvert("JSON".into(), value.get_type().to_string(), span),
|
|
||||||
}
|
|
||||||
.into_pipeline_data()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn to_json_raw(call: &Call, input: PipelineData) -> Result<PipelineData, ShellError> {
|
|
||||||
let span = call.head;
|
|
||||||
|
|
||||||
let value = input.into_value(span);
|
|
||||||
|
|
||||||
let json_value = value_to_json_value(&value)?;
|
|
||||||
match nu_json::to_string_raw(&json_value) {
|
|
||||||
Ok(serde_json_string) => Ok(Value::String {
|
|
||||||
val: serde_json_string,
|
|
||||||
span,
|
|
||||||
}
|
|
||||||
.into_pipeline_data()),
|
|
||||||
_ => Ok(Value::Error {
|
|
||||||
error: ShellError::CantConvert("JSON".into(), value.get_type().to_string(), span),
|
|
||||||
}
|
|
||||||
.into_pipeline_data()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
Loading…
Reference in a new issue