From ade293cf524e9cd66db8416dd3417077eb11ed07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Sat, 2 Feb 2019 17:45:25 +0100 Subject: [PATCH] Save config --- src/api/admin.rs | 2 +- src/config.rs | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/api/admin.rs b/src/api/admin.rs index a9ad767..84b3fbc 100644 --- a/src/api/admin.rs +++ b/src/api/admin.rs @@ -98,7 +98,7 @@ impl AdminTemplateData { Self { users, page_content: String::from("admin/page"), - config: serde_json::to_string_pretty(&CONFIG.get_config()).unwrap(), + config: CONFIG.get_config(), } } diff --git a/src/config.rs b/src/config.rs index ff65d46..945fa76 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,6 +10,7 @@ lazy_static! { println!("Error loading config:\n\t{:?}\n", e); exit(12) }); + pub static ref CONFIG_PATH: String = "data/config.json".into(); } macro_rules! make_config { @@ -86,7 +87,7 @@ macro_rules! make_config { // TODO: Get config.json from CONFIG_PATH env var or -c console option // Loading from file - let mut builder = match ConfigBuilder::from_file("data/config.json") { + let mut builder = match ConfigBuilder::from_file(&CONFIG_PATH) { Ok(builder) => builder, Err(_) => ConfigBuilder::default() }; @@ -200,17 +201,23 @@ fn validate_config(cfg: &ConfigItems) -> Result<(), Error> { } impl Config { - pub fn get_config(&self) -> ConfigItems { - self.inner.read().unwrap().config.clone() + pub fn get_config(&self) -> String { + let cfg = &self.inner.read().unwrap().config; + serde_json::to_string_pretty(cfg).unwrap() } - + pub fn update_config(&self, other: ConfigBuilder) -> Result<(), Error> { let config = other.build(); validate_config(&config)?; - self.inner.write().unwrap().config = config; + let config_str = serde_json::to_string_pretty(&config)?; - // TODO: Save to file + self.inner.write().unwrap().config = config.clone(); + + //Save to file + use std::{fs::File, io::Write}; + let mut file = File::create(&*CONFIG_PATH)?; + file.write_all(config_str.as_bytes())?; Ok(()) }