use std::str::FromStr; use chrono::Datelike; use log::LevelFilter; use simple_logger::SimpleLogger; use crate::types::Weekday; pub fn load_settings(config_name: &str, env_prefix: &str) -> T where for<'de> T: serde::Deserialize<'de>, { let default_file = config::File::with_name(&format!("emgauwa-{}", config_name)).required(false); config::Config::builder() .add_source(default_file) .add_source( config::Environment::with_prefix(&format!("EMGAUWA_{}", env_prefix)) .prefix_separator("__") .separator("__"), ) .build() .expect("Error building settings") .try_deserialize::() .expect("Error reading settings") } pub fn init_logging(level: &str) { let log_level: LevelFilter = LevelFilter::from_str(level).expect("Error parsing log level."); log::trace!("Log level set to {:?}", log_level); SimpleLogger::new() .with_level(log_level) .init() .expect("Error initializing logger."); } pub fn get_weekday() -> Weekday { (chrono::offset::Local::now() .date_naive() .weekday() .number_from_monday() - 1) as Weekday }