zik 0.1.0

A TUI web radio player with audio spectrum visualizer
use std::collections::HashMap;
use std::fs;
use std::path::PathBuf;

use serde::Deserialize;

#[derive(Deserialize)]
pub struct UiConfig {
    pub bar_color: Option<String>,
}

#[derive(Deserialize)]
pub struct Config {
    pub ui: Option<UiConfig>,
    pub radios: HashMap<String, String>,
}

impl Config {
    pub fn load() -> Result<Self, Box<dyn std::error::Error>> {
        let path = Self::config_path();
        let content = fs::read_to_string(&path)
            .map_err(|e| format!("Failed to read {}: {e}", path.display()))?;
        let config: Config = toml::from_str(&content)?;
        Ok(config)
    }

    fn config_path() -> PathBuf {
        dirs::config_dir()
            .expect("Could not determine config directory")
            .join("zik")
            .join("config.toml")
    }

    pub fn sorted_names(&self) -> Vec<String> {
        let mut names: Vec<String> = self.radios.keys().cloned().collect();
        names.sort();
        names
    }
}