style_term/color/
classic_term.rs

1use std::fmt::{Display, Formatter};
2use crate::color::{Color, DisplayColor};
3
4/// Only use this if you want older system support
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[derive(Debug, Clone)]
7pub enum FourBitColor {
8    Black,
9    Red,
10    Green,
11    Yellow,
12    Blue,
13    Magenta,
14    Cyan,
15    White,
16    Gray,
17    BrightRed,
18    BrightGreen,
19    BrightYellow,
20    BrightBlue,
21    BrightMagenta,
22    BrightCyan,
23    BrightWhite,
24}
25
26#[cfg(feature = "default_four_bit")]
27use crate::color::DefaultColor;
28
29#[cfg(feature = "default_four_bit")]
30impl From<DefaultColor> for Color {
31    fn from(value: DefaultColor) -> Self {
32        let color = match value {
33            DefaultColor::Black => { FourBitColor::Black }
34            DefaultColor::Red => { FourBitColor::Black }
35            DefaultColor::Green => { FourBitColor::Black }
36            DefaultColor::Yellow => { FourBitColor::Black }
37            DefaultColor::Blue => { FourBitColor::Black }
38            DefaultColor::Magenta => { FourBitColor::Black }
39            DefaultColor::Cyan => { FourBitColor::Black }
40            DefaultColor::White => { FourBitColor::Black }
41            DefaultColor::Gray => { FourBitColor::Black }
42            DefaultColor::BrightRed => { FourBitColor::BrightRed }
43            DefaultColor::BrightGreen => { FourBitColor::BrightGreen }
44            DefaultColor::BrightYellow => { FourBitColor::BrightYellow }
45            DefaultColor::BrightBlue => { FourBitColor::BrightBlue }
46            DefaultColor::BrightMagenta => { FourBitColor::BrightMagenta }
47            DefaultColor::BrightCyan => { FourBitColor::BrightCyan }
48            DefaultColor::BrightWhite => { FourBitColor::BrightWhite }
49        };
50        Color::FourBitColor(color)
51    }
52}
53
54impl FourBitColor {
55    fn background_color_code(&self) -> u8 {
56        match self {
57            FourBitColor::Black => { 40 }
58            FourBitColor::Red => { 41 }
59            FourBitColor::Green => { 42 }
60            FourBitColor::Yellow => { 43 }
61            FourBitColor::Blue => { 44 }
62            FourBitColor::Magenta => { 45 }
63            FourBitColor::Cyan => { 46 }
64            FourBitColor::White => { 47 }
65            FourBitColor::Gray => { 100 }
66            FourBitColor::BrightRed => { 101 }
67            FourBitColor::BrightGreen => { 102 }
68            FourBitColor::BrightYellow => { 103 }
69            FourBitColor::BrightBlue => { 104 }
70            FourBitColor::BrightMagenta => { 105 }
71            FourBitColor::BrightCyan => { 106 }
72            FourBitColor::BrightWhite => { 107 }
73        }
74    }
75    fn color_code(&self) -> u8 {
76        match self {
77            FourBitColor::Black => { 30 }
78            FourBitColor::Red => { 31 }
79            FourBitColor::Green => { 32 }
80            FourBitColor::Yellow => { 33 }
81            FourBitColor::Blue => { 34 }
82            FourBitColor::Magenta => { 35 }
83            FourBitColor::Cyan => { 36 }
84            FourBitColor::White => { 37 }
85            FourBitColor::Gray => { 90 }
86            FourBitColor::BrightRed => { 91 }
87            FourBitColor::BrightGreen => { 92 }
88            FourBitColor::BrightYellow => { 93 }
89            FourBitColor::BrightBlue => { 94 }
90            FourBitColor::BrightMagenta => { 95 }
91            FourBitColor::BrightCyan => { 96 }
92            FourBitColor::BrightWhite => { 97 }
93        }
94    }
95}
96
97impl From<FourBitColor> for Color {
98    fn from(color: FourBitColor) -> Self {
99        Color::FourBitColor(color)
100    }
101}
102
103impl DisplayColor for FourBitColor {
104    fn fmt_background(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
105        write!(f, "\x1b[1;{}m", self.background_color_code())
106    }
107    fn fmt_color(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
108        write!(f, "\x1b[1;{}m", self.color_code())
109    }
110    fn background_color(&self) -> String {
111        format!( "\x1b[1;{}m", self.background_color_code())
112    }
113    fn color(&self) -> String {
114        format!("\x1b[1;{}m", self.color_code())
115    }
116}
117
118impl Display for FourBitColor {
119    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
120        self.fmt_color(f)
121    }
122}
123
124