Skip to main content

renec_cli_config/
lib.rs

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}