diff options
Diffstat (limited to 'atuin-server/src/settings.rs')
-rw-r--r-- | atuin-server/src/settings.rs | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs index 7364656ed..04799a775 100644 --- a/atuin-server/src/settings.rs +++ b/atuin-server/src/settings.rs @@ -2,12 +2,12 @@ use std::fs::{create_dir_all, File}; use std::io::prelude::*; use std::path::PathBuf; -use config::{Config, Environment, File as ConfigFile}; +use config::{Config, Environment, File as ConfigFile, FileFormat}; use eyre::{eyre, Result}; pub const HISTORY_PAGE_SIZE: i64 = 100; -#[derive(Clone, Debug, Deserialize)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub struct Settings { pub host: String, pub port: u16, @@ -33,25 +33,30 @@ impl Settings { config_file.push("server.toml"); // create the config file if it does not exist - - let mut s = Config::new(); - - if config_file.exists() { - s.merge(ConfigFile::with_name(config_file.to_str().unwrap()))?; + let mut config_builder = Config::builder() + .set_default("host", "127.0.0.1")? + .set_default("port", 8888)? + .set_default("open_registration", false)? + .set_default("db_uri", "default_uri")? + .add_source(Environment::with_prefix("atuin").separator("_")); + + config_builder = if config_file.exists() { + config_builder.add_source(ConfigFile::new( + config_file.to_str().unwrap(), + FileFormat::Toml, + )) } else { let example_config = include_bytes!("../server.toml"); let mut file = File::create(config_file)?; file.write_all(example_config)?; - } - s.set_default("host", "127.0.0.1")?; - s.set_default("port", 8888)?; - s.set_default("open_registration", false)?; - s.set_default("db_uri", "default_uri")?; + config_builder + }; - s.merge(Environment::with_prefix("atuin").separator("_"))?; + let config = config_builder.build()?; - s.try_into() + config + .try_deserialize() .map_err(|e| eyre!("failed to deserialize: {}", e)) } } |