use anstyle::Color;
use crate::palette::{ansi256_to_ansi16, rgb_to_ansi16, rgb_to_ansi256};
#[derive(Clone, Copy, Debug, Default, Eq, Hash, PartialEq)]
#[non_exhaustive]
pub enum ColorMode {
#[default]
Auto,
Always,
Never,
}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[non_exhaustive]
pub enum ColorDepth {
Ansi16,
Ansi256,
TrueColor,
}
impl ColorDepth {
#[must_use]
pub fn downgrade(self, color: Color) -> Color {
match color {
Color::Ansi(_) => color,
Color::Ansi256(palette) => match self {
Self::Ansi16 => Color::Ansi(ansi256_to_ansi16(palette)),
Self::Ansi256 | Self::TrueColor => color,
},
Color::Rgb(rgb) => match self {
Self::Ansi16 => Color::Ansi(rgb_to_ansi16(rgb)),
Self::Ansi256 => Color::Ansi256(rgb_to_ansi256(rgb)),
Self::TrueColor => color,
},
}
}
}