52 lines
1.1 KiB
Rust
52 lines
1.1 KiB
Rust
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<OsString>;
|
|
fn var<K>(&self, key: K) -> Result<String, VarError>
|
|
where
|
|
K: AsRef<OsStr>;
|
|
fn set_var<K, V>(&mut self, key: K, value: V)
|
|
where
|
|
K: AsRef<OsStr>,
|
|
V: AsRef<OsStr>;
|
|
fn get_home_directory(&self) -> Option<PathBuf>;
|
|
fn read_line(&mut self) -> Result<String, io::Error>;
|
|
}
|
|
|
|
#[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>(&mut 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()
|
|
}
|
|
|
|
fn read_line(&mut self) -> Result<String, io::Error> {
|
|
let mut buffer = String::new();
|
|
io::stdin().read_line(&mut buffer)?;
|
|
Ok(buffer.trim().to_string())
|
|
}
|
|
}
|