use dirs::config_dir;
use std::path::PathBuf;
use std::fs;
use crate::utils::error::Error;
use crate::utils::error::Error::FatalError;
pub struct ConfigFile {
pub path: PathBuf,
}
impl ConfigFile {
pub fn new() -> Result<ConfigFile, Error> {
let config_dir = match config_dir(){
Some(path) => path,
None => {
fs::DirBuilder::new().create("~/.config/").unwrap_or_else(|e| {
panic!("Fatal: {}", e);
});
PathBuf::from("~/.config/")
},
};
let fey_config_dir_path = config_dir.join("fey");
let fey_config_file_path = fey_config_dir_path.join("config.toml");
if !fey_config_dir_path.exists() {
match fs::DirBuilder::new().create(config_dir.join("fey")) {
Ok(()) => (),
Err(error) => {
let errormsg = format!("could not create .config/fey/: {}", error);
return Err(FatalError(errormsg))
}
}
match fs::write(&fey_config_file_path, "") {
Ok(()) => (),
Err(error) => {
let errormsg = format!("could not create config file: {}", error);
return Err(Error::FileError(errormsg))
},
};
}
Ok(ConfigFile {
path: fey_config_file_path,
})
}
}