diff --git a/Cargo.toml b/Cargo.toml index 322238fb7e..d9658418b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -81,7 +81,7 @@ clap = "4.3.4" clru = {git = "https://github.com/marmeladema/clru-rs.git", rev = "71ca566"} color-eyre = "0.6.2" concat-idents = "1.1.2" -config = "0.11.0" +config = { git = "https://github.com/mehcode/config-rs.git", rev = "e3c1d0b452639478662a44f15ef6d5b6d969bf9b" } data-encoding = "2.3.2" derivation-path = "0.2.0" derivative = "2.2.0" diff --git a/crates/apps/src/lib/config/global.rs b/crates/apps/src/lib/config/global.rs index f6d917c770..ef1d5ecf5d 100644 --- a/crates/apps/src/lib/config/global.rs +++ b/crates/apps/src/lib/config/global.rs @@ -43,13 +43,16 @@ impl GlobalConfig { pub fn read(base_dir: impl AsRef) -> Result { let file_path = Self::file_path(base_dir.as_ref()); let file_name = file_path.to_str().expect("Expected UTF-8 file path"); - let mut config = config::Config::new(); + let mut config = config::Config::default(); if file_path.exists() { - config - .merge(config::File::with_name(file_name)) + config = config::Config::builder() + .add_source(config::File::with_name(file_name)) + .build() .map_err(Error::ReadError)?; } - config.try_into().map_err(Error::DeserializationError) + config + .try_deserialize() + .map_err(|e: config::ConfigError| Error::DeserializationError(e)) } /// Write configuration to a file. diff --git a/crates/apps/src/lib/config/mod.rs b/crates/apps/src/lib/config/mod.rs index 782ffee77d..c4292a0570 100644 --- a/crates/apps/src/lib/config/mod.rs +++ b/crates/apps/src/lib/config/mod.rs @@ -273,17 +273,17 @@ impl Config { mode, )) .map_err(Error::ReadError)?; - let mut config = config::Config::new(); + let builder = config::Config::builder() + .add_source(defaults) + .add_source(config::File::with_name(file_name)) + .add_source( + config::Environment::with_prefix("NAMADA").separator("__"), + ); + + let config = builder.build().map_err(Error::ReadError)?; config - .merge(defaults) - .and_then(|c| c.merge(config::File::with_name(file_name))) - .and_then(|c| { - c.merge( - config::Environment::with_prefix("NAMADA").separator("__"), - ) - }) - .map_err(Error::ReadError)?; - config.try_into().map_err(Error::DeserializationError) + .try_deserialize() + .map_err(Error::DeserializationError) } /// Generate configuration and write it to a file.