use std::env; use std::env::VarError; use std::ffi::{OsStr, OsString}; use std::path::PathBuf; pub trait Environment { fn args_os(&self) -> Vec; fn var(&self, key: K) -> Result where K: AsRef; fn set_var(&self, key: K, value: V) where K: AsRef, V: AsRef; fn get_home_directory(&self) -> Option; } #[derive(Debug, Default)] pub struct Prod; impl Environment for Prod { fn args_os(&self) -> Vec { env::args_os().collect() } fn var(&self, key: K) -> Result where K: AsRef, { env::var(key) } fn set_var(&self, key: K, value: V) where K: AsRef, V: AsRef { env::set_var(key, value); } fn get_home_directory(&self) -> Option { homedir::my_home().ok().flatten() } }