summaryrefslogtreecommitdiff
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs40
1 files changed, 26 insertions, 14 deletions
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 @@
1use config::{Config, File, FileFormat}; 1use std::{fs::File, io::{Read, Write}};
2use serde::Deserialize;
3 2
4#[derive(Debug, Clone, Deserialize)] 3use serde::{Serialize, Deserialize};
4
5use crate::error::MLE;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Cfg { 8pub struct Cfg {
6 pub data: String, 9 pub data: String,
7 pub downloads: String,
8 pub clean_remove: bool,
9 pub apis: Apis, 10 pub apis: Apis,
10} 11}
11 12
12#[derive(Debug, Clone, Deserialize)] 13#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct Apis { 14pub struct Apis {
14 pub modrinth: String, 15 pub modrinth: String,
15} 16}
16 17
17impl Cfg { 18impl Cfg {
18 pub fn init(path: &str) -> Self { 19 pub fn init(path: &str) -> MLE<Self> {
19 //TODO Error Handling 20 let mut file = match File::open(path) {
20 Config::builder() 21 Ok(file) => file,
21 .add_source(File::new(path, FileFormat::Ini)) 22 Err(err) => {
22 .build() 23 if err.kind() == std::io::ErrorKind::NotFound {
23 .unwrap() 24 println!("No config file found, creating one");
24 .try_deserialize() 25 let default_cfg = Cfg { data: String::from("./"), apis: Apis { modrinth: String::from("https://api.modrinth.com/v2/") } };
25 .unwrap() 26 let mut file = File::create(path)?;
27 file.write_all(&toml::to_string(&default_cfg)?.as_bytes())?;
28 File::open(path)?
29 } else {
30 return Err(err.into());
31 }
32 }
33 };
34 let mut content = String::new();
35 file.read_to_string(&mut content)?;
36 let config = toml::from_str::<Cfg>(&content)?;
37 Ok(config)
26 } 38 }
27} 39}