use std::str::FromStr;
use crate::{
NCurseswError, COLORS,
shims::constants::{
COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW,
COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE
}
};
const COLOR_DEFAULT: i32 = COLOR_BLACK - 1;
const COLOR_LIGHT_BLACK: i32 = COLOR_BLACK + 8;
const COLOR_LIGHT_RED: i32 = COLOR_RED + 8;
const COLOR_LIGHT_GREEN: i32 = COLOR_GREEN + 8;
const COLOR_LIGHT_YELLOW: i32 = COLOR_YELLOW + 8;
const COLOR_LIGHT_BLUE: i32 = COLOR_BLUE + 8;
const COLOR_LIGHT_MAGENTA: i32 = COLOR_MAGENTA + 8;
const COLOR_LIGHT_CYAN: i32 = COLOR_CYAN + 8;
const COLOR_LIGHT_WHITE: i32 = COLOR_WHITE + 8;
macro_rules! color_palette_enum {
($type: ty) => {
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum ColorPalette {
TerminalDefault,
Black,
Red,
Green,
Yellow,
Blue,
Magenta,
Cyan,
White,
LightBlack,
LightRed,
LightGreen,
LightYellow,
LightBlue,
LightMagenta,
LightCyan,
LightWhite,
Custom($type)
}
}
}
impl Default for ColorPalette {
fn default() -> Self {
ColorPalette::TerminalDefault
}
}
impl FromStr for ColorPalette {
type Err = NCurseswError;
fn from_str(color: &str) -> Result<Self, Self::Err> {
match color {
"default" => Ok(ColorPalette::TerminalDefault),
"black" => Ok(ColorPalette::Black),
"red" => Ok(ColorPalette::Red),
"green" => Ok(ColorPalette::Green),
"yellow" => Ok(ColorPalette::Yellow),
"blue" => Ok(ColorPalette::Blue),
"magenta" => Ok(ColorPalette::Magenta),
"cyan" => Ok(ColorPalette::Cyan),
"white" => Ok(ColorPalette::White),
"light black" => Ok(ColorPalette::LightBlack),
"light red" => Ok(ColorPalette::LightRed),
"light green" => Ok(ColorPalette::LightGreen),
"light yellow" => Ok(ColorPalette::LightYellow),
"light blue" => Ok(ColorPalette::LightBlue),
"light magenta" => Ok(ColorPalette::LightMagenta),
"light cyan" => Ok(ColorPalette::LightCyan),
"light white" => Ok(ColorPalette::LightWhite),
_ => Err(NCurseswError::ColorParseError { color: color.to_string() })
}
}
}