From 85d1a681c7eed48361224a01bdfb3c080f48e1b9 Mon Sep 17 00:00:00 2001 From: Genna Wingert Date: Fri, 11 Feb 2022 20:26:36 +0100 Subject: [PATCH] Remove stringification for binary values in `save` command (#4428) * Remove stringification for binary values in `save` * Fix typo and clippy warning --- crates/nu-command/src/filesystem/save.rs | 60 ++++++++++++------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/crates/nu-command/src/filesystem/save.rs b/crates/nu-command/src/filesystem/save.rs index fa660f04c..1f6b5a192 100644 --- a/crates/nu-command/src/filesystem/save.rs +++ b/crates/nu-command/src/filesystem/save.rs @@ -36,8 +36,6 @@ impl Command for Save { let span = call.head; - let config = stack.get_config()?; - let path = call.req::>(engine_state, stack, 0)?; let arg_span = path.span; let path = Path::new(&path.item); @@ -66,7 +64,7 @@ impl Command for Save { }; if let Some(ext) = ext { - match engine_state.find_decl(format!("to {}", ext).as_bytes()) { + let output = match engine_state.find_decl(format!("to {}", ext).as_bytes()) { Some(converter_id) => { let output = engine_state.get_decl(converter_id).run( engine_state, @@ -75,44 +73,46 @@ impl Command for Save { input, )?; - let output = output.into_value(span); - - match output { - Value::String { val, .. } => { - if let Err(err) = file.write_all(val.as_bytes()) { - return Err(ShellError::IOError(err.to_string())); - } - - Ok(PipelineData::new(span)) - } - Value::Binary { val, .. } => { - if let Err(err) = file.write_all(&val) { - return Err(ShellError::IOError(err.to_string())); - } - - Ok(PipelineData::new(span)) - } - v => Err(ShellError::UnsupportedInput(v.get_type().to_string(), span)), - } + output.into_value(span) } - None => { - let output = input.collect_string("", &config)?; + None => input.into_value(span), + }; - if let Err(err) = file.write_all(output.as_bytes()) { + match output { + Value::String { val, .. } => { + if let Err(err) = file.write_all(val.as_bytes()) { return Err(ShellError::IOError(err.to_string())); } Ok(PipelineData::new(span)) } + Value::Binary { val, .. } => { + if let Err(err) = file.write_all(&val) { + return Err(ShellError::IOError(err.to_string())); + } + + Ok(PipelineData::new(span)) + } + v => Err(ShellError::UnsupportedInput(v.get_type().to_string(), span)), } } else { - let output = input.collect_string("", &config)?; + match input.into_value(span) { + Value::String { val, .. } => { + if let Err(err) = file.write_all(val.as_bytes()) { + return Err(ShellError::IOError(err.to_string())); + } - if let Err(err) = file.write_all(output.as_bytes()) { - return Err(ShellError::IOError(err.to_string())); + Ok(PipelineData::new(span)) + } + Value::Binary { val, .. } => { + if let Err(err) = file.write_all(&val) { + return Err(ShellError::IOError(err.to_string())); + } + + Ok(PipelineData::new(span)) + } + v => Err(ShellError::UnsupportedInput(v.get_type().to_string(), span)), } - - Ok(PipelineData::new(span)) } } }