use config::Config; use serde_derive::Deserialize; #[derive(Clone, Debug, Deserialize)] #[serde(default)] #[allow(unused)] pub struct Logging { pub level: String, pub file: String, } #[derive(Clone, Debug, Deserialize)] #[serde(default)] #[allow(unused)] pub struct Settings { pub database: String, pub port: u16, pub host: String, pub logging: Logging, } impl Default for Settings { fn default() -> Self { Settings { database: String::from("sqlite://emgauwa-controller.sqlite"), port: 5000, host: String::from("127.0.0.1"), logging: Logging::default(), } } } impl Default for Logging { fn default() -> Self { Logging { level: String::from("info"), file: String::from("stdout"), } } } pub fn init() -> Settings { Config::builder() .add_source(config::File::with_name("emgauwa-controller")) .add_source( config::Environment::with_prefix("EMGAUWA_CONTROLLER") .prefix_separator("_") .separator("__"), ) .build() .unwrap() .try_deserialize::() .unwrap_or_else(|_| panic!("Error reading settings.")) }