From e38fa9ac0eb87044d5b9d74c30047826e4faf4a7 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Tue, 23 Jun 2026 21:16:32 -0400 Subject: [PATCH] Create Config and config_load --- src/server/config.rs | 21 +++++++++++++++++++++ src/server/mod.rs | 1 + 2 files changed, 22 insertions(+) create mode 100644 src/server/config.rs diff --git a/src/server/config.rs b/src/server/config.rs new file mode 100644 index 0000000..6d0aed7 --- /dev/null +++ b/src/server/config.rs @@ -0,0 +1,21 @@ +use serde::Deserialize; + +#[derive(Debug, Clone, Deserialize)] +/// Top-level application configuration +pub struct Config {} + +/// Parse configuration from the expected files and environment variables +pub fn load_config() -> Result { + use config::{Environment, File}; + + let pkg_name = env!("CARGO_PKG_NAME"); + + config::Config::builder() + .set_default("server.port", 8080)? + .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() +} diff --git a/src/server/mod.rs b/src/server/mod.rs index 244576d..aa12a48 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,3 +1,4 @@ +pub mod config; pub mod main; pub use main::main;