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() }