use std::{env, process};
pub struct Helpers;
impl Helpers {
pub fn run_oneshot(program: &str) -> Result<(), String> {
match process::Command::new(program)
.stdout(process::Stdio::null())
.stderr(process::Stdio::null())
.output()
{
Ok(_) => Ok(()),
Err(_) => return Err(format!("failed to run {}", program)),
}
}
pub fn pid_exists(program: &str) -> Result<bool, String> {
match process::Command::new("pidof")
.arg(program)
.stdout(process::Stdio::null())
.status()
{
Ok(status) => {
return Ok(status.success());
}
Err(_) => return Err("pidof failed".to_string()),
}
}
pub fn force_restart(program: &str, arguments: Vec<&str>) -> Result<(), String> {
if Self::pid_exists(program)? {
process::Command::new("pkill")
.arg(program)
.stdout(process::Stdio::null())
.output()
.map_err(|_| format!("pkill failed: {}", program))?;
}
process::Command::new(program)
.args(arguments)
.stdout(process::Stdio::null())
.stderr(process::Stdio::null())
.spawn()
.map_err(|_| format!("failed to spawn: {}", program))?;
Ok(())
}
pub fn soft_restart(program: &str, arguments: Vec<&str>) -> Result<(), String> {
if !Self::pid_exists(program)? {
process::Command::new(program)
.args(arguments)
.stdout(process::Stdio::null())
.stderr(process::Stdio::null())
.spawn()
.map_err(|_| format!("failed to spawn: {}", program))?;
}
Ok(())
}
pub fn is_installed(program: &str) -> bool {
if let Some(path) = env::var_os("PATH") {
for path in env::split_paths(&path) {
let full_path = path.join(program);
if full_path.exists() {
return true;
}
}
}
false
}
pub fn round_2(n: u32) -> u32 {
if n % 2 == 0 { n } else { n - 1 }
}
}