modcli/output/
themes.rs

1/*
2
3 */
4use std::io::{stdout, Write};
5use crossterm::style::{Color, SetBackgroundColor, SetForegroundColor, ResetColor};
6
7
8// Color constants for various colors
9pub const RED: Color = Color::Rgb { r: 255, g: 0, b: 0 };
10pub const BLUE: Color = Color::Rgb { r: 0, g: 0, b: 255 };
11pub const GREEN: Color = Color::Rgb { r: 0, g: 255, b: 0 };
12pub const YELLOW: Color = Color::Rgb { r: 255, g: 255, b: 0 };
13pub const CYAN: Color = Color::Rgb { r: 0, g: 255, b: 255 };
14pub const MAGENTA: Color = Color::Rgb { r: 255, g: 0, b: 255 };
15pub const WHITE: Color = Color::Rgb { r: 255, g: 255, b: 255 };
16pub const BLACK: Color = Color::Rgb { r: 0, g: 0, b: 0 };
17pub const GREY: Color = Color::Rgb { r: 128, g: 128, b: 128 };
18pub const PINK: Color = Color::Rgb { r: 255, g: 105, b: 180 };
19pub const PURPLE: Color = Color::Rgb { r: 128, g: 0, b: 128 };
20pub const TEAL: Color = Color::Rgb { r: 0, g: 128, b: 128 };
21pub const ORANGE: Color = Color::Rgb { r: 255, g: 165, b: 0 };
22pub const BROWN: Color = Color::Rgb { r: 165, g: 42, b: 42 };
23pub const LIGHT_BLUE: Color = Color::Rgb { r: 173, g: 216, b: 230 };
24pub const LIGHT_GREEN: Color = Color::Rgb { r: 144, g: 238, b: 144 };
25pub const LIGHT_YELLOW: Color = Color::Rgb { r: 255, g: 255, b: 224 };
26pub const LIGHT_CYAN: Color = Color::Rgb { r: 224, g: 255, b: 255 };
27pub const LIGHT_MAGENTA: Color = Color::Rgb { r: 255, g: 224, b: 255 };
28pub const LIGHT_GREY: Color = Color::Rgb { r: 211, g: 211, b: 211 };
29pub const DARK_GREY: Color = Color::Rgb { r: 169, g: 169, b: 169 };
30pub const DARK_BLUE: Color = Color::Rgb { r: 0, g: 0, b: 139 }; 
31pub const DARK_ORANGE: Color = Color::Rgb { r: 255, g: 140, b: 0 };
32pub const DARK_PINK: Color = Color::Rgb { r: 255, g: 20, b: 147 };
33pub const DARK_PURPLE: Color = Color::Rgb { r: 75, g: 0, b: 130 };
34pub const DARK_TEAL: Color = Color::Rgb { r: 0, g: 139, b: 139 };
35pub const DARK_BROWN: Color = Color::Rgb { r: 101, g: 67, b: 33 };
36pub const DARK_LIGHT_BLUE: Color = Color::Rgb { r: 70, g: 130, b: 180 };
37pub const DARK_LIGHT_GREEN: Color = Color::Rgb { r: 50, g: 205, b: 50 };
38pub const DARK_LIGHT_YELLOW: Color = Color::Rgb { r: 255, g: 255, b: 224 };
39pub const DARK_LIGHT_CYAN: Color = Color::Rgb { r: 224, g: 255, b: 255 };
40pub const DARK_LIGHT_MAGENTA: Color = Color::Rgb { r: 255, g: 224, b: 255 };
41pub const DARK_LIGHT_GREY: Color = Color::Rgb { r: 211, g: 211, b: 211 };
42
43// Color constants for different log levels
44pub const COLOR_ERROR: Color = RED;
45pub const COLOR_WARNING: Color = ORANGE;
46pub const COLOR_SUCCESS: Color = GREEN;
47pub const COLOR_DEBUG: Color = GREY;
48pub const COLOR_INFO: Color = BLUE;
49pub const COLOR_TRACE: Color = LIGHT_GREY;
50pub const COLOR_DEFAULT: Color = WHITE;
51
52// Apply a CLI color theme
53pub fn apply_theme(theme: &str) {
54    let mut stdout = stdout();
55
56    match theme {
57        "monochrome" => {
58            let _ = write!(stdout, "{}{}", SetForegroundColor(Color::Grey), SetBackgroundColor(Color::Black));
59        }
60        "default" => {
61            let _ = write!(stdout, "{}{}", SetForegroundColor(Color::White), SetBackgroundColor(Color::Black));
62        }
63        "inverted" => {
64            let _ = write!(stdout, "{}{}", SetForegroundColor(Color::Black), SetBackgroundColor(Color::White));
65        }
66        "blue" => {
67            let _ = write!(stdout, "{}{}", SetForegroundColor(Color::White), SetBackgroundColor(Color::Blue));
68        }
69        "green" => {
70            let _ = write!(stdout, "{}{}", SetForegroundColor(Color::Black), SetBackgroundColor(Color::Green));
71        }
72        _ => {
73            // Unknown theme
74        }
75    }
76
77    let _ = stdout.flush();
78}
79
80// Resets to terminal default colors
81pub fn reset_theme() {
82    let _ = write!(stdout(), "{}", ResetColor);
83}