use std::{env, net::IpAddr, str::FromStr, fmt::Display}; #[derive(Clone)] pub struct Config { pub dns_fallback: IpAddr, pub dns_port: u16, pub dns_cache_size: u64, pub db_host: String, pub db_port: u16, pub db_user: String, pub db_pass: String, pub web_user: String, pub web_pass: String, pub web_port: u16, } impl Config { pub fn new() -> Self { let dns_port = Self::get_var::("WRAPPER_DNS_PORT", 53); let dns_fallback = Self::get_var::("WRAPPER_FALLBACK_DNS", [9, 9, 9, 9].into()); let dns_cache_size = Self::get_var::("WRAPPER_CACHE_SIZE", 1000); let db_host = Self::get_var::("WRAPPER_DB_HOST", String::from("localhost")); let db_port = Self::get_var::("WRAPPER_DB_PORT", 27017); let db_user = Self::get_var::("WRAPPER_DB_USER", String::from("root")); let db_pass = Self::get_var::("WRAPPER_DB_PASS", String::from("")); let web_user = Self::get_var::("WRAPPER_WEB_USER", String::from("admin")); let web_pass = Self::get_var::("WRAPPER_WEB_PASS", String::from("wrapper")); let web_port = Self::get_var::("WRAPPER_WEB_PORT", 80); Self { dns_fallback, dns_port, dns_cache_size, db_host, db_port, db_user, db_pass, web_user, web_pass, web_port, } } fn get_var(name: &str, default: T) -> T where T: FromStr + Display, { let env = env::var(name).unwrap_or(format!("{default}")); env.parse::().unwrap_or(default) } }