use async_trait::async_trait;
#[derive(Debug, Clone)]
pub struct ProcessResult {
pub stdout: Vec<u8>,
pub stderr: Vec<u8>,
pub exit_code: i32,
}
#[async_trait]
pub trait ProcessRunning: Send + Sync {
async fn run(&self, launch_path: &str, arguments: &[String]) -> std::io::Result<ProcessResult>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct TokioProcessRunner;
#[async_trait]
impl ProcessRunning for TokioProcessRunner {
async fn run(&self, launch_path: &str, arguments: &[String]) -> std::io::Result<ProcessResult> {
let output = tokio::process::Command::new(launch_path).args(arguments).output().await?;
Ok(ProcessResult { stdout: output.stdout, stderr: output.stderr, exit_code: output.status.code().unwrap_or(-1) })
}
}