1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
use std::fmt;
use {Paint, Style};
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Copy, Clone)]
pub enum Color {
Unset,
Black,
Red,
Green,
Yellow,
Blue,
Purple,
Cyan,
White,
Fixed(u8),
RGB(u8, u8, u8),
}
impl Color {
#[inline]
pub fn paint<T>(self, item: T) -> Paint<T> {
Paint::new(item).fg(self)
}
#[inline]
pub fn style(self) -> Style {
Style::new().fg(self)
}
#[inline(always)]
pub(crate) fn ascii_fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
Color::Unset => Ok(()),
Color::Black => write!(f, "0"),
Color::Red => write!(f, "1"),
Color::Green => write!(f, "2"),
Color::Yellow => write!(f, "3"),
Color::Blue => write!(f, "4"),
Color::Purple => write!(f, "5"),
Color::Cyan => write!(f, "6"),
Color::White => write!(f, "7"),
Color::Fixed(num) => write!(f, "8;5;{}", num),
Color::RGB(r, g, b) => write!(f, "8;2;{};{};{}", r, g, b)
}
}
}
impl Default for Color {
#[inline(always)]
fn default() -> Self {
Color::Unset
}
}