1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use std::path::PathBuf; use serde_yaml::{Value, Mapping}; #[cfg(test)] mod tests { #[test] fn it_works() { assert_eq!(2 + 2, 4); } } #[derive(Debug, Clone)] pub struct Config { pub path: PathBuf, mapping: Mapping } impl Config { pub fn new(path: PathBuf) -> Self { Self { path, mapping: Mapping::new() } } pub fn init(&mut self) { if !self.path.exists() { let path_parent = self.path.parent().unwrap(); if !path_parent.exists() { std::fs::create_dir_all(path_parent).unwrap(); } std::fs::write(&self.path, serde_yaml::to_string(&Mapping::new()).unwrap()).unwrap(); } } pub fn load(&mut self) { self.mapping = serde_yaml::from_str(&std::fs::read_to_string(&self.path).unwrap()).unwrap(); } pub fn save(&mut self) { std::fs::write(&self.path, serde_yaml::to_string(&self.mapping).unwrap()).unwrap(); } pub fn set_default(&mut self, key: &str, value: Value){ let key = Value::String(key.to_owned()); if self.mapping.get(&key).is_none() { self.mapping.insert(key, value); } } pub fn get(&self, key: &str) -> Option<&Value> { let key = Value::String(key.to_owned()); self.mapping.get(&key) } pub fn set(&mut self, key: &str, value: Value) { let key = Value::String(key.to_owned()); self.mapping.insert(key, value); } }