use crate::{Hook, IpFilter}; use anyhow::{bail, Result}; use log::info; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, fs::File}; #[derive(Debug, Deserialize, Serialize)] #[serde(deny_unknown_fields)] pub struct MetricsConfig { pub enabled: bool, pub ip_filter: Option, } #[derive(Debug, Deserialize, Serialize)] #[serde(deny_unknown_fields)] pub struct Config { pub metrics: Option, pub hooks: BTreeMap, } pub fn get_config() -> Result { // Look for config in CWD.. if let Ok(config) = File::open("config.yml") { info!("Loading configuration from `./config.yml`"); return Ok(config); } // ..look for user path config.. if let Some(mut path) = dirs::config_dir() { path.push("webhookey/config.yml"); if let Ok(config) = File::open(&path) { info!( "Loading configuration from `{}`", path.to_str().unwrap_or(""), ); return Ok(config); } } // ..look for systemwide config.. if let Ok(config) = File::open("/etc/webhookey/config.yml") { info!("Loading configuration from `/etc/webhookey/config.yml`"); return Ok(config); } // ..you had your chance. bail!("No configuration file found."); }