#[repr(u32)] #[derive(Copy, Clone, PartialEq, Eq, Debug)] pub enum Color { ARGB(u8, u8, u8, u8), RGB(u8, u8, u8), HexARGB(u32), Black = 0x000000FF, Blue = 0x0000FFFF, Green = 0x00FF00FF, Cyan = 0x00FFFFFF, Red = 0xFF0000FF, Magenta = 0xFF00FFFF, Yellow = 0xFFFF00FF, White = 0xFFFFFFFF, } impl Into for Color { fn into(self) -> u32 { match self { Color::ARGB(a, r, g, b) => (a as u32) << 24 | (r as u32) << 16 | (g as u32) << 8 | (b as u32), Color::RGB(r, g, b) => (0u32) << 24 | (r as u32) << 16 | (g as u32) << 8 | (b as u32), Color::HexARGB(hex) => hex, Color::Black => 0xFF000000, Color::Blue => 0xFF0000FF, Color::Green => 0xFF00FF00, Color::Cyan => 0xFF00FFFF, Color::Red => 0xFFFF0000, Color::Magenta => 0xFFFF00FF, Color::Yellow => 0xFFFFFF00, Color::White => 0xFFFFFFFF, } } } impl core::fmt::Display for Color { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { match self { Color::ARGB(r, g, b, a) => write!(f, "RGBA(#{:x}{:x}{:x}{:x})", r, g, b, a), Color::RGB(r, g, b) => write!(f, "RGB(#{:x}{:x}{:x})", r, g, b), Color::HexARGB(hex) => write!(f, "Hex(#{:x})", hex), Color::Black => write!(f, "Black"), Color::Blue => write!(f, "Blue"), Color::Green => write!(f, "Green"), Color::Cyan => write!(f, "Cyan"), Color::Red => write!(f, "Red"), Color::Magenta => write!(f, "Magenta"), Color::Yellow => write!(f, "Yellow"), Color::White => write!(f, "White"), } } }