use super::Colour;
use std::fmt::Display;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Modifier {
Coded(u8),
Colour(Colour),
#[default]
None,
}
impl Modifier {
pub const END: Self = Self::Coded(0);
pub const RED: Self = Self::Coded(31);
pub const GREEN: Self = Self::Coded(32);
pub const YELLOW: Self = Self::Coded(33);
pub const BLUE: Self = Self::Coded(34);
pub const PURPLE: Self = Self::Coded(35);
pub const CYAN: Self = Self::Coded(36);
#[must_use]
pub const fn from_rgb(r: u8, g: u8, b: u8) -> Self {
Self::Colour(Colour::rgb(r, g, b))
}
#[must_use]
pub fn from_hsv(h: u8, s: u8, v: u8) -> Self {
Self::Colour(Colour::hsv(h, s, v))
}
}
impl Display for Modifier {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Coded(code) => write!(f, "\x1b[{code}m"),
Self::Colour(c) => write!(f, "\x1b[38;2;{};{};{}m", c.r, c.g, c.b),
Self::None => Ok(()),
}
}
}