use crate::Error;
use crate::Result;
use std::{env, path::Path};
pub fn add_system_path<P>(directory: P) -> Result<()>
where
P: AsRef<Path>,
{
let path_separator = if cfg!(windows) { ';' } else { ':' };
let mut path = env::var("PATH").unwrap_or_default();
let directory_str = directory
.as_ref()
.to_str()
.ok_or_else(|| Error::Option("add_system_path 解析路径出错".into()))?
.to_string();
if directory_str.is_empty() || path.is_empty() {
return Err(Error::Empty);
}
let new_path = format!("{}{}", &directory_str, path_separator);
if path.contains(&new_path) {
return Err(Error::Exists(new_path.into()));
}
path.push_str(&new_path);
env::set_var("PATH", path);
Ok(())
}