diff options
author | Ellie Huxtable <ellie@elliehuxtable.com> | 2022-03-17 21:26:57 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-17 21:26:57 +0000 |
commit | d270798277cffd63c62351a57ef48ade879e755c (patch) | |
tree | 564d0b293e962849e2e4698f6d0c78f28f504cba /atuin-server | |
parent | 32488830b81c6d1d65aee750dd349501fb4e7c14 (diff) |
Update config-rs (#280)
* Update config-rs
Also fix our call to current_dir
This should resolve #195
Thanks @conradludgate for the upstream fix!
* Format
Diffstat (limited to 'atuin-server')
-rw-r--r-- | atuin-server/Cargo.toml | 2 | ||||
-rw-r--r-- | atuin-server/src/settings.rs | 33 |
2 files changed, 20 insertions, 15 deletions
diff --git a/atuin-server/Cargo.toml b/atuin-server/Cargo.toml index 4ad048c2..b2348b6d 100644 --- a/atuin-server/Cargo.toml +++ b/atuin-server/Cargo.toml @@ -16,7 +16,7 @@ chrono = { version = "0.4", features = ["serde"] } eyre = "0.6" uuid = { version = "0.8", features = ["v4"] } whoami = "1.1.2" -config = "0.11" +config = "0.12" serde_derive = "1.0.125" serde = "1.0.126" serde_json = "1.0.75" diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs index 7364656e..04799a77 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)) } } |