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}