modcli/output/
colors.rs

1use crossterm::style::{Color, Stylize};
2
3/// Default fallback color if a named color is not found.
4pub const DEFAULT: Color = Color::Black;
5
6/// Core color constants
7pub const RED: Color = Color::Rgb { r: 255, g: 0, b: 0 };
8pub const BLUE: Color = Color::Rgb { r: 0, g: 0, b: 255 };
9pub const GREEN: Color = Color::Rgb { r: 0, g: 255, b: 0 };
10pub const YELLOW: Color = Color::Rgb {
11    r: 255,
12    g: 255,
13    b: 0,
14};
15pub const CYAN: Color = Color::Rgb {
16    r: 0,
17    g: 255,
18    b: 255,
19};
20pub const MAGENTA: Color = Color::Rgb {
21    r: 255,
22    g: 0,
23    b: 255,
24};
25pub const WHITE: Color = Color::Rgb {
26    r: 255,
27    g: 255,
28    b: 255,
29};
30pub const BLACK: Color = Color::Rgb { r: 0, g: 0, b: 0 };
31pub const GREY: Color = Color::Rgb {
32    r: 128,
33    g: 128,
34    b: 128,
35};
36pub const PINK: Color = Color::Rgb {
37    r: 255,
38    g: 105,
39    b: 180,
40};
41pub const PURPLE: Color = Color::Rgb {
42    r: 128,
43    g: 0,
44    b: 128,
45};
46pub const TEAL: Color = Color::Rgb {
47    r: 0,
48    g: 128,
49    b: 128,
50};
51pub const ORANGE: Color = Color::Rgb {
52    r: 255,
53    g: 165,
54    b: 0,
55};
56pub const BROWN: Color = Color::Rgb {
57    r: 165,
58    g: 42,
59    b: 42,
60};
61pub const LIGHT_BLUE: Color = Color::Rgb {
62    r: 0,
63    g: 180,
64    b: 255,
65};
66pub const LIGHT_GREEN: Color = Color::Rgb {
67    r: 144,
68    g: 238,
69    b: 144,
70};
71pub const LIGHT_YELLOW: Color = Color::Rgb {
72    r: 255,
73    g: 255,
74    b: 224,
75};
76pub const LIGHT_CYAN: Color = Color::Rgb {
77    r: 224,
78    g: 255,
79    b: 255,
80};
81pub const LIGHT_MAGENTA: Color = Color::Rgb {
82    r: 255,
83    g: 224,
84    b: 255,
85};
86pub const LIGHT_GREY: Color = Color::Rgb {
87    r: 211,
88    g: 211,
89    b: 211,
90};
91pub const DARK_GREY: Color = Color::Rgb {
92    r: 169,
93    g: 169,
94    b: 169,
95};
96pub const DARK_BLUE: Color = Color::Rgb { r: 0, g: 0, b: 139 };
97pub const DARK_ORANGE: Color = Color::Rgb {
98    r: 255,
99    g: 140,
100    b: 0,
101};
102pub const DARK_PINK: Color = Color::Rgb {
103    r: 255,
104    g: 20,
105    b: 147,
106};
107pub const DARK_PURPLE: Color = Color::Rgb {
108    r: 75,
109    g: 0,
110    b: 130,
111};
112pub const DARK_TEAL: Color = Color::Rgb {
113    r: 0,
114    g: 139,
115    b: 139,
116};
117pub const DARK_BROWN: Color = Color::Rgb {
118    r: 101,
119    g: 67,
120    b: 33,
121};
122
123/// Color constants for different log levels
124pub const COLOR_DEBUG: Color = GREY;
125pub const COLOR_STATUS: Color = CYAN;
126pub const COLOR_INFO: Color = LIGHT_BLUE;
127pub const COLOR_WARNING: Color = ORANGE;
128pub const COLOR_ERROR: Color = RED;
129pub const COLOR_TRACE: Color = LIGHT_GREY;
130pub const COLOR_SUCCESS: Color = GREEN;
131pub const COLOR_NOTICE: Color = Color::Rgb {
132    r: (255),
133    g: (90),
134    b: (0),
135};
136
137/// Returns a list of named colors
138pub fn list() -> Vec<(&'static str, Color)> {
139    vec![
140        ("Red", RED),
141        ("Green", GREEN),
142        ("Blue", BLUE),
143        ("Yellow", YELLOW),
144        ("Cyan", CYAN),
145        ("Magenta", MAGENTA),
146        ("White", WHITE),
147        ("Grey", GREY),
148        ("Black", BLACK),
149        ("Orange", ORANGE),
150        ("Pink", PINK),
151        ("Purple", PURPLE),
152        ("Teal", TEAL),
153        ("Brown", BROWN),
154        ("Light Blue", LIGHT_BLUE),
155        ("Light Green", LIGHT_GREEN),
156        ("Light Yellow", LIGHT_YELLOW),
157        ("Light Cyan", LIGHT_CYAN),
158        ("Light Magenta", LIGHT_MAGENTA),
159        ("Light Grey", LIGHT_GREY),
160        ("Dark Grey", DARK_GREY),
161        ("Dark Blue", DARK_BLUE),
162        ("Dark Orange", DARK_ORANGE),
163        ("Dark Pink", DARK_PINK),
164        ("Dark Purple", DARK_PURPLE),
165        ("Dark Teal", DARK_TEAL),
166        ("Dark Brown", DARK_BROWN),
167    ]
168}
169
170/// Returns a color by name (case-insensitive), or DEFAULT color if not found.
171pub fn get(name: &str) -> Color {
172    list()
173        .into_iter()
174        .find(|(n, _)| n.eq_ignore_ascii_case(name))
175        .map(|(_, c)| c)
176        .unwrap_or(DEFAULT)
177}
178
179/// Prints a swatch of all named colors
180pub fn print() {
181    println!("Available Colors:");
182    for (name, color) in list() {
183        println!("{}", format!("{name:<20}").with(color));
184    }
185}