use serde::Deserialize;
use std::str::FromStr;
use colored::ColoredString;
use colored::Colorize;
#[derive(Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum Color {
Black,
Red,
Green,
Yellow,
Blue,
Magenta,
Cyan,
White,
HotPink,
Purple,
DarkTeal,
Gray,
Teal,
Orange,
Lime,
Brown,
Beige,
Ivory,
Pink,
Peach,
Lavender,
Mint,
Gold,
LightGreen,
Clear
}
impl FromStr for Color {
type Err = ();
fn from_str(color: &str) -> Result<Self, Self::Err> {
match color.to_lowercase().as_str() {
"black" => Ok(Color::Black),
"red" => Ok(Color::Red),
"green" => Ok(Color::Green),
"yellow" => Ok(Color::Yellow),
"blue" => Ok(Color::Blue),
"magenta" => Ok(Color::Magenta),
"cyan" => Ok(Color::Cyan),
"white" => Ok(Color::White),
"hotpink" => Ok(Color::HotPink),
"purple" => Ok(Color::Purple),
"darkteal" => Ok(Color::DarkTeal),
"gray" => Ok(Color::Gray),
"teal" => Ok(Color::Teal),
"orange" => Ok(Color::Orange),
"lime" => Ok(Color::Lime),
"brown" => Ok(Color::Brown),
"beige" => Ok(Color::Beige),
"ivory" => Ok(Color::Ivory),
"pink" => Ok(Color::Pink),
"peach" => Ok(Color::Peach),
"lavender" => Ok(Color::Lavender),
"mint" => Ok(Color::Mint),
"gold" => Ok(Color::Gold),
"lightgreen" => Ok(Color::LightGreen),
"clear" => Ok(Color::Clear),
_ => Err(())
}
}
}
impl Color {
pub fn color_string(&self, string: &str) -> ColoredString {
let colors: [(Color, ColoredString); 25] = [
(Color::Black, string.black()),
(Color::Red, string.red()),
(Color::Green, string.green()),
(Color::Yellow, string.yellow()),
(Color::Blue, string.blue()),
(Color::Magenta, string.magenta()),
(Color::Cyan, string.cyan()),
(Color::White, string.white()),
(Color::HotPink, string.truecolor(255, 105, 180)),
(Color::Purple, string.truecolor(168, 134, 192)),
(Color::DarkTeal, string.truecolor(0, 70, 79)),
(Color::Gray, string.truecolor(128, 128, 128)),
(Color::Teal, string.truecolor(0, 128, 128)),
(Color::Orange, string.truecolor(255, 165, 0)),
(Color::Lime, string.truecolor(50, 205, 50)),
(Color::Brown, string.truecolor(150, 75, 0)),
(Color::Beige, string.truecolor(245, 245, 220)),
(Color::Ivory, string.truecolor(255, 255, 240)),
(Color::Pink, string.truecolor(255, 192, 203)),
(Color::Peach, string.truecolor(255, 229, 180)),
(Color::Lavender, string.truecolor(230, 230, 250)),
(Color::Mint, string.truecolor(152, 255, 152)),
(Color::Gold, string.truecolor(255, 215, 0)),
(Color::LightGreen, string.truecolor(143, 191, 80)),
(Color::Clear, string.clear())
];
colors.iter().find(|(c, _)| c == self).map(|(_, s)| s.clone().bold()).unwrap_or(string.clear())
}
}