1#[macro_use]
2extern crate lazy_static;
3
4mod config;
5pub use config::{Config, CONFIG_FILE};
6use std::{
7 fs::{create_dir_all, File},
8 io::{self, Write},
9 path::Path,
10};
11
12pub fn load_config_file<T, P>(config_file: P) -> Result<T, io::Error>
13where
14 T: serde::de::DeserializeOwned,
15 P: AsRef<Path>,
16{
17 let file = File::open(config_file)?;
18 let config = serde_yaml::from_reader(file)
19 .map_err(|err| io::Error::new(io::ErrorKind::Other, format!("{:?}", err)))?;
20 Ok(config)
21}
22
23pub fn save_config_file<T, P>(config: &T, config_file: P) -> Result<(), io::Error>
24where
25 T: serde::ser::Serialize,
26 P: AsRef<Path>,
27{
28 let serialized = serde_yaml::to_string(config)
29 .map_err(|err| io::Error::new(io::ErrorKind::Other, format!("{:?}", err)))?;
30
31 if let Some(outdir) = config_file.as_ref().parent() {
32 create_dir_all(outdir)?;
33 }
34 let mut file = File::create(config_file)?;
35 file.write_all(&serialized.into_bytes())?;
36
37 Ok(())
38}