use crate::constants::DEFAULT_CONFIG; use crate::result::Result; use once_cell::sync::Lazy; use serde::Deserialize; use std::env::var; use std::fs::File; use std::io::prelude::*; use std::net::SocketAddr; use toml::from_str; pub static CONFIG_INSTANCE: Lazy = Lazy::new(|| { Config::from_toml().unwrap_or_else(|e| { eprintln!("Error parsing config: {}", e.to_string()); std::process::exit(1); }) }); #[derive(Debug, Clone, Deserialize)] pub struct Config { pub db_url: String, pub img_root: String, pub bind_addr: SocketAddr, } impl Config { pub fn from_toml() -> Result { let path = var("DICHROISM_CONFIG").unwrap_or_else(|_| String::from(DEFAULT_CONFIG)); let mut config = String::new(); File::open(path)?.read_to_string(&mut config)?; Ok(from_str(&config)?) } }