1use super::NerdctlError;
5use sal_process::CommandResult;
6use std::process::Command;
7
8pub fn execute_nerdctl_command(args: &[&str]) -> Result<CommandResult, NerdctlError> {
10 let output = Command::new("nerdctl").args(args).output();
11
12 match output {
13 Ok(output) => {
14 let stdout = String::from_utf8_lossy(&output.stdout).to_string();
15 let stderr = String::from_utf8_lossy(&output.stderr).to_string();
16
17 let result = CommandResult {
18 stdout,
19 stderr,
20 success: output.status.success(),
21 code: output.status.code().unwrap_or(-1),
22 };
23
24 if result.success {
25 Ok(result)
26 } else {
27 Err(NerdctlError::CommandFailed(format!(
28 "Command failed with code {}: {}",
29 result.code,
30 result.stderr.trim()
31 )))
32 }
33 }
34 Err(e) => Err(NerdctlError::CommandExecutionFailed(e)),
35 }
36}