use std::str::FromStr; use anyhow::Result; use serde::{Deserialize, Serialize}; #[derive(Clone, Copy, Deserialize)] #[serde(try_from = "String")] pub struct Color(ratatui::style::Color); impl FromStr for Color { type Err = anyhow::Error; fn from_str(s: &str) -> Result { ratatui::style::Color::from_str(s).map(Self).map_err(|_| anyhow::anyhow!("invalid color")) } } impl TryFrom for Color { type Error = anyhow::Error; fn try_from(s: String) -> Result { Self::from_str(&s) } } impl From for ratatui::style::Color { fn from(value: Color) -> Self { value.0 } } impl Serialize for Color { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { self.0.to_string().serialize(serializer) } }