multi-ssh/src/environment.rs

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())
}
}