pub const HIPPOX_LANG: &str = "HIPPOX_LANG";
pub const HIPPOX_PROVIDER: &str = "HIPPOX_PROVIDER";
pub const HIPPOX_ENABLE_CLI: &str = "HIPPOX_ENABLE_CLI";
pub const HIPPOX_ENABLE_TCP: &str = "HIPPOX_ENABLE_TCP";
pub const HIPPOX_ENABLE_HTTP: &str = "HIPPOX_ENABLE_HTTP";
pub const HIPPOX_ENABLE_WS: &str = "HIPPOX_ENABLE_WS";
pub const HIPPOX_SMTP_HOST: &str = "HIPPOX_SMTP_HOST";
pub const HIPPOX_SMTP_PORT: &str = "HIPPOX_SMTP_PORT";
pub const HIPPOX_SMTP_USERNAME: &str = "HIPPOX_SMTP_USERNAME";
pub const HIPPOX_SMTP_PASSWORD: &str = "HIPPOX_SMTP_PASSWORD";
pub const HIPPOX_SMTP_FROM: &str = "HIPPOX_SMTP_FROM";
pub const HIPPOX_TELEGRAM_BOT_TOKEN: &str = "HIPPOX_TELEGRAM_BOT_TOKEN";
pub const HIPPOX_DINGDING_ACCESS_TOKEN: &str = "HIPPOX_DINGDING_ACCESS_TOKEN";
pub const HIPPOX_FEISHU_WEBHOOK: &str = "HIPPOX_FEISHU_WEBHOOK";
pub const HIPPOX_WECOM_WEBHOOK: &str = "HIPPOX_WECOM_WEBHOOK";
pub const HIPPOX_FTP_HOST: &str = "HIPPOX_FTP_HOST";
pub const HIPPOX_FTP_PORT: &str = "HIPPOX_FTP_PORT";
pub const HIPPOX_FTP_USERNAME: &str = "HIPPOX_FTP_USERNAME";
pub const HIPPOX_FTP_PASSWORD: &str = "HIPPOX_FTP_PASSWORD";
pub const HIPPOX_FTP_REMOTE_DIR: &str = "HIPPOX_FTP_REMOTE_DIR";
pub const HIPPOX_FTP_TIMEOUT: &str = "HIPPOX_FTP_TIMEOUT";
pub const HIPPOX_FTP_MODE: &str = "HIPPOX_FTP_MODE";
pub const HIPPOX_TCP_HOST: &str = "HIPPOX_TCP_HOST";
pub const HIPPOX_TCP_PORT: &str = "HIPPOX_TCP_PORT";
pub const HIPPOX_TCP_TIMEOUT: &str = "HIPPOX_TCP_TIMEOUT";
pub const HIPPOX_TCP_ENCODING: &str = "HIPPOX_TCP_ENCODING";
pub const HIPPOX_UDP_HOST: &str = "HIPPOX_UDP_HOST";
pub const HIPPOX_UDP_PORT: &str = "HIPPOX_UDP_PORT";
pub const HIPPOX_UDP_TIMEOUT: &str = "HIPPOX_UDP_TIMEOUT";
pub const HIPPOX_UDP_ENCODING: &str = "HIPPOX_UDP_ENCODING";
pub const HIPPOX_UDP_BROADCAST: &str = "HIPPOX_UDP_BROADCAST";
pub const HIPPOX_PG_HOST: &str = "HIPPOX_PG_HOST";
pub const HIPPOX_PG_PORT: &str = "HIPPOX_PG_PORT";
pub const HIPPOX_PG_DATABASE: &str = "HIPPOX_PG_DATABASE";
pub const HIPPOX_PG_USERNAME: &str = "HIPPOX_PG_USERNAME";
pub const HIPPOX_PG_PASSWORD: &str = "HIPPOX_PG_PASSWORD";
pub const HIPPOX_PG_POOL_SIZE: &str = "HIPPOX_PG_POOL_SIZE";
pub const HIPPOX_PG_TIMEOUT: &str = "HIPPOX_PG_TIMEOUT";
pub const HIPPOX_MYSQL_HOST: &str = "HIPPOX_MYSQL_HOST";
pub const HIPPOX_MYSQL_PORT: &str = "HIPPOX_MYSQL_PORT";
pub const HIPPOX_MYSQL_DATABASE: &str = "HIPPOX_MYSQL_DATABASE";
pub const HIPPOX_MYSQL_USERNAME: &str = "HIPPOX_MYSQL_USERNAME";
pub const HIPPOX_MYSQL_PASSWORD: &str = "HIPPOX_MYSQL_PASSWORD";
pub const HIPPOX_MYSQL_POOL_SIZE: &str = "HIPPOX_MYSQL_POOL_SIZE";
pub const HIPPOX_MYSQL_TIMEOUT: &str = "HIPPOX_MYSQL_TIMEOUT";
pub const HIPPOX_REDIS_HOST: &str = "HIPPOX_REDIS_HOST";
pub const HIPPOX_REDIS_PORT: &str = "HIPPOX_REDIS_PORT";
pub const HIPPOX_REDIS_PASSWORD: &str = "HIPPOX_REDIS_PASSWORD";
pub const HIPPOX_REDIS_DB: &str = "HIPPOX_REDIS_DB";
pub const HIPPOX_REDIS_POOL_SIZE: &str = "HIPPOX_REDIS_POOL_SIZE";
pub const HIPPOX_REDIS_TIMEOUT: &str = "HIPPOX_REDIS_TIMEOUT";
pub const HIPPOX_SQLITE_PATH: &str = "HIPPOX_SQLITE_PATH";
pub const HIPPOX_SQLITE_POOL_SIZE: &str = "HIPPOX_SQLITE_POOL_SIZE";
pub const HIPPOX_SQLITE_TIMEOUT: &str = "HIPPOX_SQLITE_TIMEOUT";
pub const HIPPOX_GITHUB_TOKEN: &str = "HIPPOX_GITHUB_TOKEN";
pub const HIPPOX_GITHUB_API_URL: &str = "HIPPOX_GITHUB_API_URL";
pub const HIPPOX_GITHUB_TIMEOUT: &str = "HIPPOX_GITHUB_TIMEOUT";
pub fn get_env(key: &str) -> Option<String> {
std::env::var(key).ok()
}
pub fn get_env_or(key: &str, default: &str) -> String {
std::env::var(key).unwrap_or_else(|_| default.to_string())
}
pub fn is_env_true(key: &str) -> bool {
std::env::var(key).unwrap_or_else(|_| "false".to_string()) == "true"
}
pub fn get_required_env(key: &str) -> anyhow::Result<String> {
std::env::var(key).map_err(|_| anyhow::anyhow!("Environment variable '{}' is not set", key))
}