pub enum AnsiColor {
Cyan,
Blue,
Yellow,
Red,
Green,
Magenta,
Black,
White,
BrightRed,
BrightGreen,
BrightYellow,
BrightBlue,
BrightMagenta,
BrightCyan,
DarkGray,
LightGray,
Olive,
Maroon,
Navy,
Teal,
Aqua,
Purple,
Silver,
DarkRed,
Lime,
Brown,
Salmon,
SkyBlue,
Gold,
}
impl AnsiColor {
pub fn escape_code(&self) -> &'static str {
match self {
AnsiColor::Cyan => "\u{001B}[36m",
AnsiColor::Blue => "\u{001B}[34m",
AnsiColor::Yellow => "\u{001B}[33m",
AnsiColor::Red => "\u{001B}[31m",
AnsiColor::Green => "\u{001B}[32m",
AnsiColor::Magenta => "\u{001B}[35m",
AnsiColor::Black => "\u{001B}[30m",
AnsiColor::White => "\u{001B}[37m",
AnsiColor::BrightRed => "\u{001B}[91m",
AnsiColor::BrightGreen => "\u{001B}[92m",
AnsiColor::BrightYellow => "\u{001B}[93m",
AnsiColor::BrightBlue => "\u{001B}[94m",
AnsiColor::BrightMagenta => "\u{001B}[95m",
AnsiColor::BrightCyan => "\u{001B}[96m",
AnsiColor::DarkGray => "\u{001B}[90m",
AnsiColor::LightGray => "\u{001B}[37;1m",
AnsiColor::Olive => "\u{001B}[33;1m",
AnsiColor::Maroon => "\u{001B}[31;1m",
AnsiColor::Navy => "\u{001B}[34;1m",
AnsiColor::Teal => "\u{001B}[36;1m",
AnsiColor::Aqua => "\u{001B}[96;1m",
AnsiColor::Purple => "\u{001B}[35;1m",
AnsiColor::Silver => "\u{001B}[37;2m",
AnsiColor::DarkRed => "\u{001B}[31;2m",
AnsiColor::Lime => "\u{001B}[32;2m",
AnsiColor::Brown => "\u{001B}[33;2m",
AnsiColor::Salmon => "\u{001B}[91;1m",
AnsiColor::SkyBlue => "\u{001B}[94;1m",
AnsiColor::Gold => "\u{001B}[33;3m",
}
}
}
pub struct AnsiStyle {
pub bold: bool,
pub color: Option<AnsiColor>,
}
impl AnsiStyle {
pub fn escape_code(&self) -> String {
let mut code = String::new();
if self.bold {
code.push_str("\u{001B}[1m");
}
if let Some(color) = &self.color {
code.push_str(color.escape_code());
}
code
}
pub fn reset_code() -> &'static str {
"\u{001B}[0m"
}
}