From 2758bb5e147af64276e61d0cac7810fc22f57804 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sat, 16 Nov 2019 08:05:27 +0100 Subject: [PATCH] Refactor `CommandExt`. --- src/extensions.rs | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/src/extensions.rs b/src/extensions.rs index c2800ba0e..96cc91cba 100644 --- a/src/extensions.rs +++ b/src/extensions.rs @@ -3,53 +3,50 @@ use std::process::{Command, ExitStatus}; use crate::errors::*; pub trait CommandExt { + fn print_verbose(&self, verbose: bool); + fn status_result(&self, status: ExitStatus) -> Result<()>; fn run(&mut self, verbose: bool) -> Result<()>; fn run_and_get_status(&mut self, verbose: bool) -> Result; fn run_and_get_stdout(&mut self, verbose: bool) -> Result; } impl CommandExt for Command { - /// Runs the command to completion - fn run(&mut self, verbose: bool) -> Result<()> { - let status = self.run_and_get_status(verbose)?; + fn print_verbose(&self, verbose: bool) { + if verbose { + println!("+ {:?}", self); + } + } + fn status_result(&self, status: ExitStatus) -> Result<()> { if status.success() { Ok(()) } else { - Err(format!("`{:?}` failed with exit code: {:?}", - self, - status.code()))? + Err(format!("`{:?}` failed with exit code: {:?}", self, status.code()).into()) } } /// Runs the command to completion - fn run_and_get_status(&mut self, verbose: bool) -> Result { - if verbose { - println!("+ {:?}", self); - } + fn run(&mut self, verbose: bool) -> Result<()> { + let status = self.run_and_get_status(verbose)?; + self.status_result(status) + } + /// Runs the command to completion + fn run_and_get_status(&mut self, verbose: bool) -> Result { + self.print_verbose(verbose); self.status() .chain_err(|| format!("couldn't execute `{:?}`", self)) } /// Runs the command to completion and returns its stdout fn run_and_get_stdout(&mut self, verbose: bool) -> Result { - if verbose { - println!("+ {:?}", self); - } - + self.print_verbose(verbose); let out = self.output() .chain_err(|| format!("couldn't execute `{:?}`", self))?; - if out.status.success() { - Ok(String::from_utf8(out.stdout).chain_err(|| { - format!("`{:?}` output was not UTF-8", - self) - })?) - } else { - Err(format!("`{:?}` failed with exit code: {:?}", - self, - out.status.code()))? - } + self.status_result(out.status)?; + + Ok(String::from_utf8(out.stdout) + .chain_err(|| format!("`{:?}` output was not UTF-8", self))?) } }