chiark / gitweb /
new config defaulting
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 23 Aug 2020 20:23:57 +0000 (21:23 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 23 Aug 2020 20:23:57 +0000 (21:23 +0100)
src/bin/server.rs
src/global.rs

index 1e23ef66a6bb77489c0b77a3a22960a6b2a04e66..2a7dd26cb507874bafb4a0ff1fe6fd3c23f6a1e3 100644 (file)
@@ -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);
   };
 
index fc6867fb4ca999f44b6c8d3eac0b78635cfe6e1b..efe34a75a28d2dc76d74886b25830655358f5f7f 100644 (file)
@@ -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<String>,
+}
+
+#[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<ServerConfigSpec> 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<ServerConfig> {
   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")
   }
 }