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