From b15b8b2ae1473f83c24731cbad565a0e92def532 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 19 Jul 2026 10:00:07 -0400 Subject: [PATCH] Move load_config to Config::from_env --- src/server/config.rs | 50 +++++++++++++++++++++++--------------------- src/server/main.rs | 4 ++-- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/server/config.rs b/src/server/config.rs index 97f4753..77ff2a7 100644 --- a/src/server/config.rs +++ b/src/server/config.rs @@ -201,32 +201,34 @@ pub struct Config { pub server: ServerConfig, } -/// Parse configuration from the expected files and environment variables -pub fn load_config() -> Result { - use config::{Environment, File}; +impl Config { + /// Parse configuration from the expected files and environment variables + pub fn from_env() -> Result { + use config::{Environment, File}; - let pkg_name = env!("CARGO_PKG_NAME"); + let pkg_name = env!("CARGO_PKG_NAME"); - config::Config::builder() - .set_default( - "server.port", - dioxus::cli_config::server_port().unwrap_or(8080), - )? - .set_default( - "server.host", - dioxus::cli_config::server_ip() - .unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED)) - .to_string(), - )? - .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() + config::Config::builder() + .set_default( + "server.port", + dioxus::cli_config::server_port().unwrap_or(8080), + )? + .set_default( + "server.host", + dioxus::cli_config::server_ip() + .unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED)) + .to_string(), + )? + .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() + } } /// Provide a sane default for the public path, using the same sources as Dioxus does internally. diff --git a/src/server/main.rs b/src/server/main.rs index 95ea582..d216947 100644 --- a/src/server/main.rs +++ b/src/server/main.rs @@ -10,7 +10,7 @@ use tower_http::services::ServeFile; use crate::App; use crate::app::LOGO_ICO; use crate::server::{ - auth::build_auth_layer, config, database, key_val_store, + auth::build_auth_layer, config::Config, database, key_val_store, require_auth_mw::require_auth_middleware, }; use crate::util::error::{Contextualize, Error, ErrorType, Result}; @@ -21,7 +21,7 @@ pub async fn main() -> Result { } tracing::debug!("Loading configuration..."); - let config = config::load_config() + let config = Config::from_env() .map_err(|e| Error::message_here(e.to_string())) .err_context("Failed to load config")?;