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
94
95
96
97
98
99
100
101
use crate::{AnsiColors, DynColor};
use core::fmt;
#[allow(unused_imports)]
use crate::OwoColorize;
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub struct Rgb(pub u8, pub u8, pub u8);
impl DynColor for Rgb {
fn fmt_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let Rgb(r, g, b) = self;
write!(f, "\x1b[38;2;{};{};{}m", r, g, b)
}
fn fmt_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let Rgb(r, g, b) = self;
write!(f, "\x1b[48;2;{};{};{}m", r, g, b)
}
fn fmt_raw_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let Rgb(r, g, b) = self;
write!(f, "38;2;{};{};{}", r, g, b)
}
fn fmt_raw_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let Rgb(r, g, b) = self;
write!(f, "48;2;{};{};{}", r, g, b)
}
#[doc(hidden)]
fn get_dyncolors_fg(&self) -> crate::DynColors {
let Rgb(r, g, b) = self;
crate::DynColors::Rgb(*r, *g, *b)
}
#[doc(hidden)]
fn get_dyncolors_bg(&self) -> crate::DynColors {
self.get_dyncolors_fg()
}
}
impl DynColor for str {
fn fmt_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let color: AnsiColors = self.into();
color.fmt_ansi_fg(f)
}
fn fmt_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let color: AnsiColors = self.into();
color.fmt_ansi_bg(f)
}
fn fmt_raw_ansi_fg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let color: AnsiColors = self.into();
color.fmt_raw_ansi_fg(f)
}
fn fmt_raw_ansi_bg(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let color: AnsiColors = self.into();
color.fmt_raw_ansi_bg(f)
}
#[doc(hidden)]
fn get_dyncolors_fg(&self) -> crate::DynColors {
crate::DynColors::Ansi(self.into())
}
#[doc(hidden)]
fn get_dyncolors_bg(&self) -> crate::DynColors {
crate::DynColors::Ansi(self.into())
}
}
impl<'a> From<&'a str> for AnsiColors {
fn from(color: &'a str) -> Self {
match color {
"black" => AnsiColors::Black,
"red" => AnsiColors::Red,
"green" => AnsiColors::Green,
"yellow" => AnsiColors::Yellow,
"blue" => AnsiColors::Blue,
"magenta" => AnsiColors::Magenta,
"purple" => AnsiColors::Magenta,
"cyan" => AnsiColors::Cyan,
"white" => AnsiColors::White,
"bright black" => AnsiColors::BrightBlack,
"bright red" => AnsiColors::BrightRed,
"bright green" => AnsiColors::BrightGreen,
"bright yellow" => AnsiColors::BrightYellow,
"bright blue" => AnsiColors::BrightBlue,
"bright magenta" => AnsiColors::BrightMagenta,
"bright cyan" => AnsiColors::BrightCyan,
"bright white" => AnsiColors::BrightWhite,
_ => AnsiColors::White,
}
}
}