style_term/color/
classic_term.rs1use std::fmt::{Display, Formatter};
2use crate::color::{Color, DisplayColor};
3
4#[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