use std::path::PathBuf;
use std::process::Command;
pub trait CommandOps {
fn run(&mut self);
fn stdout_string(&mut self) -> String;
fn stdout_pathbuf(&mut self) -> Option<PathBuf>;
}
impl CommandOps for Command {
fn run(&mut self) {
self.spawn().and_then(|mut v| v.wait()).ok();
}
fn stdout_string(&mut self) -> String {
self.output().map_or("".to_string(), |v| {
String::from_utf8_lossy(&v.stdout).to_string()
})
}
fn stdout_pathbuf(&mut self) -> Option<PathBuf> {
let output = self.output().ok()?;
if !output.status.success() {
return None;
}
match String::from_utf8_lossy(&output.stdout).trim() {
v if v.is_empty() => None,
v => Some(PathBuf::from(v)),
}
}
}