pub fn var(key: &str) -> Result<String, String> {
std::env::var(key).map_err(|e| e.to_string())
}
pub fn get_or(key: &str, default: &str) -> String {
std::env::var(key).unwrap_or_else(|_| default.to_string())
}
pub fn get(key: &str) -> Option<String> {
std::env::var(key).ok()
}
pub fn set_var(key: &str, value: &str) {
std::env::set_var(key, value);
}
pub fn remove_var(key: &str) {
std::env::remove_var(key);
}
pub fn vars() -> Vec<(String, String)> {
std::env::vars().collect()
}
pub fn current_dir() -> Result<String, String> {
std::env::current_dir()
.map(|p| p.to_string_lossy().to_string())
.map_err(|e| e.to_string())
}
pub fn current_exe() -> Result<String, String> {
std::env::current_exe()
.map(|p| p.to_string_lossy().to_string())
.map_err(|e| e.to_string())
}
pub fn args() -> Vec<String> {
std::env::args().collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_set_get_var() {
set_var("WINDJAMMER_TEST", "hello");
assert_eq!(var("WINDJAMMER_TEST"), Ok("hello".to_string()));
remove_var("WINDJAMMER_TEST");
assert!(var("WINDJAMMER_TEST").is_err());
}
#[test]
fn test_current_dir() {
let dir = current_dir();
assert!(dir.is_ok());
}
#[test]
fn test_args() {
let args = args();
assert!(!args.is_empty());
}
}