axe_cli/
cmd_exe.rs

1use std::process::Command;
2
3use crate::cli::Cli;
4
5pub fn execute_cmd(cli: &Cli, cmd_args: Vec<String>) {
6    let output = if cli.debug {
7        print_command(cli, &cmd_args)
8    } else {
9        run_command(cli, &cmd_args)
10    };
11    match output {
12        Ok(output) => println!("{}", output.trim()),
13        Err(error) => eprintln!("Failed to execute command:\n{}", error),
14    }
15}
16
17fn print_command(cli: &Cli, cmd_args: &[String]) -> Result<String, String> {
18    Ok(format!("{} {}", cli.cmd, cmd_args.join(" ")))
19}
20
21fn run_command(cli: &Cli, cmd_args: &[String]) -> Result<String, String> {
22    let output = Command::new(&cli.cmd)
23        .args(cmd_args)
24        .output()
25        .expect("Failed to execute command");
26    match output.status.success() {
27        true => String::from_utf8(output.stdout)
28            .map_err(|e| format!("Invalid UTF-8 command output: {}", e)),
29        false => Err(String::from_utf8(output.stderr).unwrap()),
30    }
31}