pub enum Type {
Fg,
Bg,
}
#[macro_export]
macro_rules! colors {
($($vis:vis $cname:ident:$cval:literal)*) => {
use paste::paste;
paste!{
$(
#[doc="Set " $cname " foreground color"]
$vis const $cname:&str = concat!("\x1b[", "3",$cval,"m");
#[doc="Set " $cname " background color"]
$vis const [<$cname _BG>]:&str = concat!("\x1b[", "4",$cval,"m");
#[doc="Set bright " $cname " foreground color"]
$vis const [<BR_ $cname>]:&str = concat!("\x1b[","9",$cval,"m");
#[doc="Set bright " $cname " background color"]
$vis const [<BR_ $cname _BG>]:&str = concat!("\x1b[","10",$cval,"m");
)*
}
};
}
colors! {
pub BLACK:"0"
pub RED:"1"
pub GREEN:"2"
pub YELLOW:"3"
pub BLUE:"4"
pub MAGENTA:"5"
pub CYAN:"6"
pub WHITE:"7"
pub DEFAULT:"9"
}
pub fn rgb(r: u8, g: u8, b: u8, t: Type) -> String {
let st;
match t {
Type::Fg => {
st = "3";
}
Type::Bg => {
st = "4";
}
}
format!("\x1b[{}8;2;{};{};{}m", st, r, g, b)
}
pub fn rgb_fg(r: u8, g: u8, b: u8) -> String {
return rgb(r, g, b, Type::Fg);
}
pub fn rgb_bg(r: u8, g: u8, b: u8) -> String {
return rgb(r, g, b, Type::Bg);
}