gemachain_cli_config/
lib.rs

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