use std::env::VarError; use std::ffi::{OsStr, OsString}; use std::path::PathBuf; use std::{env, io}; pub trait Environment { fn args_os(&self) -> Vec; fn var(&self, key: K) -> Result where K: AsRef; fn set_var(&mut self, key: K, value: V) where K: AsRef, V: AsRef; fn get_home_directory(&self) -> Option; fn read_line(&mut self) -> Result; } #[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(&mut 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() } fn read_line(&mut self) -> Result { let mut buffer = String::new(); io::stdin().read_line(&mut buffer)?; Ok(buffer.trim().to_string()) } }