use std::collections::HashMap; use std::sync::OnceLock; pub static GLOBAL_CONFIG: OnceLock = OnceLock::new(); #[derive(Clone, Debug)] pub struct AppConfig { pub env: HashMap, } impl AppConfig { const ENV_FILES: &'static [&'static str] = &[".env", ".env.local"]; pub fn load() -> AppConfig { let mut env = HashMap::new(); for env_file in AppConfig::ENV_FILES { dotenvy::from_path(env_file).ok(); if let Ok(env_file_content) = std::fs::read_to_string(env_file) { for line in env_file_content.lines() { if let Some((key, value)) = line.split_once('=') { env.insert(key.to_string(), value.to_string()); } } } } env = env.into_iter().chain(std::env::vars()).collect(); let this = AppConfig { env }; if let Err(config) = GLOBAL_CONFIG.set(this) { eprintln!("Failed to set global config: {:?}", config); } if let Some(config) = GLOBAL_CONFIG.get() { config.clone() } else { panic!("Failed to get global config"); } } } pub mod ai; pub mod app; pub mod avatar; pub mod database; pub mod domain; pub mod embed; pub mod hook; pub mod logs; pub mod qdrant; pub mod redis; pub mod smtp; pub mod ssh;