daemos 0.1.2

A local-only music player
Documentation
use std::{fmt, str::FromStr};

use color_eyre::eyre::{Error, bail};
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize, Debug, Clone, Copy, Default, PartialEq)]
pub enum AppTheme {
    #[default]
    Dark,
    Latte,
    Frappe,
    Macchiato,
    Mocha,
}

impl FromStr for AppTheme {
    type Err = Error;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        let value = match s.to_lowercase().as_str() {
            "dark" => Self::Dark,
            "latte" => Self::Latte,
            "frappe" => Self::Frappe,
            "macchiato" => Self::Macchiato,
            "mocha" => Self::Mocha,
            _ => bail!("Theme '{}' could not be deserialized", s),
        };

        Ok(value)
    }
}

impl fmt::Display for AppTheme {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let label = match self {
            AppTheme::Dark => "Dark",
            AppTheme::Latte => "Latte",
            AppTheme::Frappe => "Frappe",
            AppTheme::Macchiato => "Macchiato",
            AppTheme::Mocha => "Mocha",
        };

        write!(f, "{label}")
    }
}