Skip to main content

semver_common/utils/
run_command.rs

1use std::{ffi::OsStr, process::Command};
2
3use crate::Alert;
4
5pub fn run_command<I, S>(command: &str, args: I) -> Result<String, Alert>
6where
7    I: IntoIterator<Item = S>,
8    S: AsRef<OsStr>,
9{
10    let output = Command::new(command).args(args).output()?;
11    let stdout = String::from_utf8(output.stdout)?;
12    let stderr = String::from_utf8(output.stderr)?;
13    let status = output.status.code().ok_or(&stderr)?;
14    if status == 0 {
15        return Ok(stdout);
16    }
17    Err(Alert::from(stderr))
18}