use crate::ui::builtin_themes::get_builtin_themes; use anyhow::Result; use derivative::Derivative; use ratatui::style::Color; use serde::{Deserialize, Deserializer, Serialize}; use std::str::FromStr; use validate_theme_derive::ValidateTheme; #[cfg(test)] #[path = "theme_tests.rs"] mod theme_tests; #[derive(Debug, Deserialize, Serialize, Clone, Copy, Derivative)] #[derivative(Default)] #[cfg_attr(test, derive(PartialEq, Eq))] pub struct Background { #[serde( deserialize_with = "deserialize_color_str", serialize_with = "serialize_color_str", default = "default_background_color" )] #[derivative(Default(value = "Some(Color::Rgb(35, 50, 55))"))] pub color: Option, #[derivative(Default(value = "Some(true)"))] #[serde(default = "default_background_enabled")] pub enabled: Option, } #[derive(Debug, Deserialize, Serialize, Default, Clone, Copy)] #[cfg_attr(test, derive(PartialEq, Eq))] pub struct Style { #[serde( deserialize_with = "deserialize_color_str", serialize_with = "serialize_color_str" )] pub color: Option, } #[derive(Debug, Deserialize, Serialize, Clone, Copy, Derivative, ValidateTheme)] #[derivative(Default)] #[cfg_attr(test, derive(PartialEq, Eq))] pub struct Theme { #[serde(default = "default_background")] #[derivative(Default( value = "Some(Background { color: Some(Color::Rgb(35, 50, 55)), enabled: Some(true) })" ))] pub background: Option, #[validate] #[serde(default = "default_awaiting_import_style")] #[derivative(Default(value = "Some(Style { color: Some(Color::Rgb(255, 170, 66)) })"))] pub awaiting_import: Option