#[derive(Clone, Copy)]
pub enum PaletteColor {
Black,
Red,
Green,
Yellow,
Blue,
Magenta,
Cyan,
White,
BrightBlack,
BrightRed,
BrightGreen,
BrightYellow,
BrightBlue,
BrightMagenta,
BrightCyan,
BrightWhite,
}
impl PaletteColor {
fn get_code(&self) -> u8 {
match self {
PaletteColor::Black => 30,
PaletteColor::Red => 31,
PaletteColor::Green => 32,
PaletteColor::Yellow => 33,
PaletteColor::Blue => 34,
PaletteColor::Magenta => 35,
PaletteColor::Cyan => 36,
PaletteColor::White => 37,
PaletteColor::BrightBlack => 90,
PaletteColor::BrightRed => 91,
PaletteColor::BrightGreen => 92,
PaletteColor::BrightYellow => 93,
PaletteColor::BrightBlue => 94,
PaletteColor::BrightMagenta => 95,
PaletteColor::BrightCyan => 96,
PaletteColor::BrightWhite => 97,
}
}
}
#[derive(Clone, Copy)]
pub enum AnsiColor {
Palette(PaletteColor),
Fixed8bit(u8),
Rgb24bit(u8, u8, u8),
}
impl AnsiColor {
pub(crate) fn gen_sequence(&self, is_bg: bool) -> String {
match self {
AnsiColor::Palette(palette) => {
let mut code = palette.get_code();
if is_bg {
code += 10;
}
code.to_string()
}
AnsiColor::Fixed8bit(code) => {
format!("{};5;{}", if is_bg { "48" } else { "38" }, code)
}
AnsiColor::Rgb24bit(r, g, b) => {
format!("{};2;{};{};{}", if is_bg { "48" } else { "38" }, r, g, b)
}
}
}
}