use serde::{Deserialize, Serialize, de::Deserializer, ser::Serializer};
pub mod style {
use super::*;
use anstyle::Style;
pub fn serialize<S: Serializer>(style: &Style, serializer: S) -> Result<S::Ok, S::Error> {
crate::Style::from(*style).serialize(serializer)
}
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Style, D::Error> {
crate::Style::deserialize(deserializer).map(Style::from)
}
}
pub mod color {
use super::*;
use anstyle::Color;
use serde::de::Error;
pub fn serialize<S: Serializer>(color: &Color, serializer: S) -> Result<S::Ok, S::Error> {
crate::Color::from(*color).serialize(serializer)
}
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Color, D::Error> {
let c = crate::Color::deserialize(deserializer)?;
Color::try_from(c).map_err(|_| D::Error::invalid_value(serde::de::Unexpected::Str("default"), &r##"a color word or a string of the form "color(INT)", "rgb(INT,INT,INT)", or "#xxxxxx""##))
}
}
pub mod ansi256color {
use super::*;
use anstyle::Ansi256Color;
pub fn serialize<S: Serializer>(
style: &Ansi256Color,
serializer: S,
) -> Result<S::Ok, S::Error> {
crate::Color256::from(*style).serialize(serializer)
}
pub fn deserialize<'de, D: Deserializer<'de>>(
deserializer: D,
) -> Result<Ansi256Color, D::Error> {
crate::Color256::deserialize(deserializer).map(Ansi256Color::from)
}
}
pub mod rgb_color {
use super::*;
use anstyle::RgbColor;
pub fn serialize<S: Serializer>(style: &RgbColor, serializer: S) -> Result<S::Ok, S::Error> {
crate::RgbColor::from(*style).serialize(serializer)
}
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<RgbColor, D::Error> {
crate::RgbColor::deserialize(deserializer).map(RgbColor::from)
}
}