#[cfg(not(all(target_arch = "aarch64", target_os = "linux")))]
mod args;
#[cfg(not(all(target_arch = "aarch64", target_os = "linux")))]
mod modules;
use std::env;
use std::iter;
use std::path::Path;
use std::process::Command;
pub fn update_path(new_path: &Path) {
let path = env::var_os("PATH").unwrap();
let paths = iter::once(new_path.to_path_buf())
.chain(env::split_paths(&path))
.collect::<Vec<_>>();
let new_path = env::join_paths(paths).unwrap();
unsafe {
env::set_var("PATH", new_path);
}
}
pub fn execute_rash(args: &[&str]) -> (String, String) {
execute_rash_with_env(args, &[])
}
pub fn execute_rash_with_env(args: &[&str], env_vars: &[(&str, &str)]) -> (String, String) {
let bin_path = Path::new(env!("CARGO_BIN_EXE_rash"));
update_path(bin_path.parent().unwrap());
let mocks_path = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/mocks");
update_path(&mocks_path);
let mut cmd = Command::new(bin_path);
cmd.args(args);
for (key, value) in env_vars {
cmd.env(key, value);
}
let output = cmd.output().unwrap();
let stdout = String::from_utf8_lossy(&output.stdout).to_string();
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
dbg!(&stdout);
dbg!(&stderr);
(stdout, stderr)
}