use crate::fs::dirs::DirCfg;
use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::{fs, path::PathBuf};
const CONFIGURATION_FILENAME: &str = "wefter.toml";
#[derive(Debug, Deserialize, Serialize)]
pub struct CfgFile {
pub data_dir: Option<PathBuf>,
}
impl CfgFile {
pub fn default(dircfg: &DirCfg) -> Self {
Self {
data_dir: Some(dircfg.data.clone()),
}
}
pub fn get_default_path(dircfg: &DirCfg) -> PathBuf {
let mut cfg = dircfg.cfg.clone();
cfg.push(CONFIGURATION_FILENAME);
cfg
}
pub fn create_if_not_exists(dircfg: &DirCfg) -> Result<()> {
let fpath = CfgFile::get_default_path(dircfg);
if !fpath.is_file() {
let cfgfile = CfgFile::default(dircfg);
let ftoml = toml::to_string(&cfgfile)?;
fs::write(&fpath, ftoml)?;
log::debug!("Created file: {:?}", fpath);
}
Ok(())
}
pub fn read(dircfg: &DirCfg) -> Result<Self> {
let fpath = Self::get_default_path(dircfg);
if !fpath.is_file() {
Self::create_if_not_exists(dircfg)?;
}
let fstr = fs::read_to_string(fpath)?;
let cfg = toml::from_str(&fstr)?;
Ok(cfg)
}
}