src/config.rs
Rama main · réplica de lectura del repositorio original.
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")),
}
}
}