use std::fs; use std::env; use serde::{Deserialize, Serialize}; use toml; #[derive(Debug, Deserialize, Serialize)] #[serde(rename_all = "lowercase")] pub enum Loglevel { Trace, Debug, Info, Warn, Error } #[derive(Deserialize, Debug, Serialize)] pub struct Config { repo: Repo, log: Log, paths: Paths, } #[derive(Deserialize, Debug, Serialize)] pub struct Log { logfile: String, loglevel: Loglevel, } #[derive(Deserialize, Debug, Serialize)] pub struct Repo { #[serde(rename = "repo_url")] repo_url: String, #[serde(rename = "auto_update")] auto_update: bool, } #[derive(Deserialize, Debug, Serialize)] pub struct Paths { #[serde(rename = "cachedir")] cachedir: String, #[serde(rename = "builddir")] builddir: String, } impl Config { pub fn parse() -> Result { let contents = fs::read_to_string("/etc/mesk.toml").unwrap(); let result: Config = toml::from_str(&contents)?; Ok(result) } pub fn default() -> Result { let default: Config = Config { repo: Repo { repo_url: format!("https://mesk.anthrill.i2p/repo/{}/", std::env::consts::ARCH), auto_update: true, }, log: Log { logfile: String::from("/var/log/mesk.log"), loglevel: Loglevel::Info, }, paths: Paths { cachedir: String::from("/var/cache/mesk"), builddir: String::from("/var/lib/mesk"), }, }; let toml_str = toml::to_string(&default)?; Ok(toml_str) } }