From 0515548682a95db643a008146105d8ecdb446e58 Mon Sep 17 00:00:00 2001 From: FxQnLr Date: Mon, 26 Dec 2022 21:57:03 +0100 Subject: changed config to toml, autocreate config; better error handling --- src/config.rs | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'src/config.rs') diff --git a/src/config.rs b/src/config.rs index ad59963..99d2ec2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,27 +1,39 @@ -use config::{Config, File, FileFormat}; -use serde::Deserialize; +use std::{fs::File, io::{Read, Write}}; -#[derive(Debug, Clone, Deserialize)] +use serde::{Serialize, Deserialize}; + +use crate::error::MLE; + +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Cfg { pub data: String, - pub downloads: String, - pub clean_remove: bool, pub apis: Apis, } -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Apis { pub modrinth: String, } impl Cfg { - pub fn init(path: &str) -> Self { - //TODO Error Handling - Config::builder() - .add_source(File::new(path, FileFormat::Ini)) - .build() - .unwrap() - .try_deserialize() - .unwrap() + pub fn init(path: &str) -> MLE { + let mut file = match File::open(path) { + Ok(file) => file, + Err(err) => { + if err.kind() == std::io::ErrorKind::NotFound { + println!("No config file found, creating one"); + let default_cfg = Cfg { data: String::from("./"), apis: Apis { modrinth: String::from("https://api.modrinth.com/v2/") } }; + let mut file = File::create(path)?; + file.write_all(&toml::to_string(&default_cfg)?.as_bytes())?; + File::open(path)? + } else { + return Err(err.into()); + } + } + }; + let mut content = String::new(); + file.read_to_string(&mut content)?; + let config = toml::from_str::(&content)?; + Ok(config) } } -- cgit v1.2.3