From 771b8e5ce4cfebad752cbabe6469deae95951e2f Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 19 Jul 2026 10:06:33 -0400 Subject: [PATCH] Initialize config defaults in separate function --- src/server/config.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/server/config.rs b/src/server/config.rs index 77ff2a7..674a9af 100644 --- a/src/server/config.rs +++ b/src/server/config.rs @@ -1,6 +1,7 @@ use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::path::PathBuf; +use config::{ConfigBuilder, ConfigError, builder::DefaultState}; use serde::Deserialize; /// Enable secure cookies by default only in release mode @@ -203,11 +204,22 @@ pub struct Config { impl Config { /// Parse configuration from the expected files and environment variables - pub fn from_env() -> Result { + pub fn from_env() -> Result { use config::{Environment, File}; let pkg_name = env!("CARGO_PKG_NAME"); + Self::defaults()? + .add_source(File::with_name(&format!("/etc/{pkg_name}/config")).required(false)) + .add_source(File::with_name(&format!("/etc/{pkg_name}")).required(false)) + .add_source(File::with_name("config").required(false)) + .add_source(Environment::with_prefix(pkg_name).separator("_")) + .build()? + .try_deserialize() + } + + /// Generate a `config::ConfigBuilder` from default values + fn defaults() -> Result, ConfigError> { config::Config::builder() .set_default( "server.port", @@ -221,13 +233,7 @@ impl Config { )? .set_default("auth.open_signup", false)? .set_default("auth.cookies_secure", DEFAULT_COOKIES_SECURE)? - .set_default("server.public_path", default_public_dir())? - .add_source(File::with_name(&format!("/etc/{pkg_name}/config")).required(false)) - .add_source(File::with_name(&format!("/etc/{pkg_name}")).required(false)) - .add_source(File::with_name("config").required(false)) - .add_source(Environment::with_prefix(pkg_name).separator("_")) - .build()? - .try_deserialize() + .set_default("server.public_path", default_public_dir()) } }