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..4693ba2 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,3 +1,4 @@ pub mod main; +pub mod config; pub use main::main;