use crate::theme::Theme;
use strum::EnumIter;
use strum::{EnumString, IntoStaticStr};
#[derive(
Debug,
Default,
Clone,
Copy,
PartialEq,
Eq,
EnumIter,
EnumString,
IntoStaticStr,
serde::Serialize,
)]
#[strum(serialize_all = "kebab-case", ascii_case_insensitive)]
pub enum BuiltinTheme {
CatppuccinMocha,
Cyberpunk,
#[default]
Dracula,
EverforestDark,
GruvboxDark,
Mono,
Nord,
OneDark,
RosePine,
SolarizedLight,
TokyoNight,
}
impl BuiltinTheme {
pub fn theme(self) -> Theme {
let src = match self {
BuiltinTheme::CatppuccinMocha => include_str!("themes/catppuccin-mocha.yaml"),
BuiltinTheme::Cyberpunk => include_str!("themes/cyberpunk.yaml"),
BuiltinTheme::Dracula => include_str!("themes/dracula.yaml"),
BuiltinTheme::EverforestDark => include_str!("themes/everforest-dark.yaml"),
BuiltinTheme::GruvboxDark => include_str!("themes/gruvbox-dark.yaml"),
BuiltinTheme::Mono => include_str!("themes/mono.yaml"),
BuiltinTheme::Nord => include_str!("themes/nord-dark.yaml"),
BuiltinTheme::OneDark => include_str!("themes/one-dark.yaml"),
BuiltinTheme::RosePine => include_str!("themes/rose-pine.yaml"),
BuiltinTheme::SolarizedLight => include_str!("themes/solarized-light.yaml"),
BuiltinTheme::TokyoNight => include_str!("themes/tokyo-night.yaml"),
};
Theme::from_base24_str(src).expect("Built in base24 YAML is invalid.")
}
pub fn default_light() -> BuiltinTheme {
BuiltinTheme::SolarizedLight
}
pub fn iter() -> impl Iterator<Item = BuiltinTheme> {
<Self as strum::IntoEnumIterator>::iter()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn all_builtin_themes_load_without_panic() {
for variant in BuiltinTheme::iter() {
let theme = variant.theme();
assert!(!theme.meta.name.is_empty(), "{variant:?} has empty name");
}
}
}