use core::fmt::Result;
use crate::{
CodeWriter, ColorTarget,
colors::{BasicColor, IndexedColor, RGBColor, SimpleColor, WriteColorCodes},
impl_macros::color_type::impl_color_type,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Color {
Simple(SimpleColor),
Indexed(IndexedColor),
RGB(RGBColor),
}
impl Color {
pub const BLACK: BasicColor = BasicColor::Black;
pub const RED: BasicColor = BasicColor::Red;
pub const GREEN: BasicColor = BasicColor::Green;
pub const YELLOW: BasicColor = BasicColor::Yellow;
pub const BLUE: BasicColor = BasicColor::Blue;
pub const MAGENTA: BasicColor = BasicColor::Magenta;
pub const CYAN: BasicColor = BasicColor::Cyan;
pub const WHITE: BasicColor = BasicColor::White;
#[must_use]
pub const fn indexed(value: u8) -> IndexedColor {
IndexedColor::new(value)
}
#[must_use]
pub const fn rgb(r: u8, g: u8, b: u8) -> RGBColor {
RGBColor::new(r, g, b)
}
#[must_use]
pub const fn none() -> Option<Color> {
None
}
}
impl_color_type!(Color {
args: [self];
to_color: SELF
});
impl WriteColorCodes for Color {
fn write_color_codes(self, target: ColorTarget, writer: &mut CodeWriter) -> Result {
match self {
Color::Simple(simple) => simple.write_color_codes(target, writer),
Color::Indexed(indexed) => indexed.write_color_codes(target, writer),
Color::RGB(rgb) => rgb.write_color_codes(target, writer),
}
}
}