Ctrl K
ComunidadGuías…

src/config.rs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
use std::path::PathBuf;

#[derive(Debug, Clone)]
pub struct Settings {
    pub music_dir: PathBuf,
    pub search_size: usize,
    pub cache_ttl: u64,
    pub search_timeout: f64,
    pub meta_ttl: u64,
    pub match_threshold: f64,
    pub music_sources: Vec<String>,
    pub port: u16,
    pub static_dir: PathBuf,
}

fn env_or(name: &str, default: &str) -> String {
    std::env::var(name)
        .ok()
        .map(|s| s.trim().to_string())
        .filter(|s| !s.is_empty())
        .unwrap_or_else(|| default.to_string())
}

impl Settings {
    pub fn from_env() -> Self {
        let music_sources = env_or(
            "MUSIC_SOURCES",
            "MiguMusicClient,NeteaseMusicClient,QQMusicClient,KuwoMusicClient,QianqianMusicClient",
        )
        .split(',')
        .map(|s| s.trim().to_string())
        .filter(|s| !s.is_empty())
        .collect();
        Settings {
            music_dir: PathBuf::from(env_or("MUSIC_DIR", "./music")),
            search_size: env_or("SEARCH_SIZE", "10").parse().unwrap_or(10),
            cache_ttl: env_or("CACHE_TTL", "1800").parse().unwrap_or(1800),
            search_timeout: env_or("SEARCH_TIMEOUT", "30").parse().unwrap_or(30.0),
            meta_ttl: env_or("META_TTL", "3600").parse().unwrap_or(3600),
            match_threshold: env_or("MATCH_THRESHOLD", "0.45").parse().unwrap_or(0.45),
            music_sources,
            port: env_or("PORT", "8000").parse().unwrap_or(8000),
            static_dir: PathBuf::from(env_or("STATIC_DIR", "./static")),
        }
    }
}