From ba83881350c0f469f203efe157522b2d98fba4b4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 23 Aug 2020 21:23:57 +0100 Subject: [PATCH] new config defaulting --- src/bin/server.rs | 3 ++- src/global.rs | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index 1e23ef66..2a7dd26c 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -75,7 +75,8 @@ fn main() { .unwrap_or(DEFAULT_CONFIG_FILENAME.to_owned()); let mut buf = String::new(); File::open(config_filename)?.read_to_string(&mut buf)?; - let config = toml::de::from_str(&buf)?; + let config : ServerConfigSpec = toml::de::from_str(&buf)?; + let config = config.try_into()?; set_config(config); }; diff --git a/src/global.rs b/src/global.rs index fc6867fb..efe34a75 100644 --- a/src/global.rs +++ b/src/global.rs @@ -924,12 +924,25 @@ pub fn client_expire_old_clients() { const DEFAULT_SAVE_DIRECTORY : &str = "save"; #[derive(Deserialize,Debug,Clone)] +pub struct ServerConfigSpec { + pub save_directory: Option, +} + +#[derive(Debug,Clone)] pub struct ServerConfig { - #[serde(default="default_save_directory")] pub save_directory: String, } -fn default_save_directory() -> String { DEFAULT_SAVE_DIRECTORY.to_owned() } +impl TryFrom for ServerConfig { + type Error = AE; + #[throws(Self::Error)] + fn try_from(spec: ServerConfigSpec) -> ServerConfig { + let ServerConfigSpec { save_directory } = spec; + let save_directory = save_directory + .unwrap_or_else(|| DEFAULT_SAVE_DIRECTORY.to_owned()); + ServerConfig { save_directory } + } +} pub fn config() -> Arc { GLOBAL.config.read().unwrap().clone() @@ -941,6 +954,8 @@ pub fn set_config(config: ServerConfig) { impl Default for ServerConfig { fn default() -> ServerConfig { - toml::de::from_str("").expect("parse empty string as ServerConfig") + let spec : ServerConfigSpec = toml::de::from_str("") + .expect("parse empty string as ServerConfigSpec"); + spec.try_into().expect("empty spec into config") } } -- 2.30.2