use std::{io, fs}; use std::path::PathBuf; use std::collections::HashMap; use expanduser::expanduser; use serde::Deserialize; use serde_yaml; pub fn load_config() -> Config { Config::new("~/.up.yml") } #[derive(Deserialize)] pub struct Config { download_path: String, upload_path: String, pub web_port: u16, pub shell_port: u16, shells: HashMap } impl Config { pub fn new(path: &str) -> Self { let exp_path = expanduser(path) .expect(&format!("Failed to expand path, {}", path)); let file = fs::File::open(&exp_path) .expect(&format!("Failed to open config path, {}", exp_path.display())); let reader = io::BufReader::new(file); serde_yaml::from_reader(reader).unwrap() } pub fn get_download_path(&self) -> PathBuf { expanduser(self.download_path.clone()).unwrap() } pub fn get_upload_path(&self) -> PathBuf { expanduser(self.upload_path.clone()).unwrap() } pub fn get_shell>(&self, key: S) -> Option { let key_str = key.into(); self.shells.get(&key_str).cloned() } }