use std::path::PathBuf;
use std::process::{Command, Stdio};
pub fn init_cargo(proj_path: &PathBuf) -> Result<(), String> {
let mut cmd = Command::new("cargo");
cmd.arg("init").arg(proj_path);
let output = cmd
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.output();
match output {
Ok(output) => {
if !output.status.success() {
return Err("Tool cargo failed.".to_string());
}
},
Err(_) => {
return Err("Failed to run cargo tool.".to_string());
}
}
Ok(())
}
pub fn cargo_build(proj_path: &PathBuf, target: &Option<String>, show_output: &bool) -> Result<(), String> {
let mut cmd = Command::new("cargo");
cmd.current_dir(proj_path)
.args(["build", "--release"]);
if let Some(t) = target {
cmd.arg("--target").arg(t);
}
let output = if *show_output {
cmd
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.output()
} else {
cmd.output()
};
match output {
Ok(output) => {
if !output.status.success() {
return Err("Cargo build failed.".to_string());
}
},
Err(_) => {
return Err("Failed to run cargo build.".to_string());
}
}
Ok(())
}
pub fn cargo_clean(proj_path: &PathBuf, show_output: &bool) -> Result<(), String> {
let mut cmd = Command::new("cargo");
cmd.arg("clean").current_dir(proj_path);
let output = if *show_output {
cmd
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.output()
} else {
cmd.output()
};
match output {
Ok(output) => {
if !output.status.success() {
return Err("Tool cargo failed.".to_string());
}
},
Err(_) => {
return Err("Failed to run cargo clean.".to_string());
}
}
Ok(())
}