1use anstream::println as styled_println;
2use anstyle::{AnsiColor, Color, Effects, Reset, Style};
3
4pub struct Styles;
6
7impl Styles {
8 pub fn error() -> Style {
10 Style::new().fg_color(Some(Color::Ansi(AnsiColor::Red)))
11 }
12
13 pub fn warning() -> Style {
15 Style::new().fg_color(Some(Color::Ansi(AnsiColor::Red)))
16 }
17
18 pub fn success() -> Style {
20 Style::new().fg_color(Some(Color::Ansi(AnsiColor::Green)))
21 }
22
23 pub fn info() -> Style {
25 Style::new().fg_color(Some(Color::Ansi(AnsiColor::Cyan)))
26 }
27
28 pub fn debug() -> Style {
30 Style::new()
31 .fg_color(Some(Color::Ansi(AnsiColor::Cyan)))
32 .dimmed()
33 }
34
35 pub fn bold() -> Style {
37 Style::new().effects(Effects::BOLD)
38 }
39
40 pub fn bold_error() -> Style {
42 Self::error().bold()
43 }
44
45 pub fn bold_success() -> Style {
47 Self::success().bold()
48 }
49
50 pub fn bold_warning() -> Style {
52 Self::warning().bold()
53 }
54
55 pub fn header() -> Style {
57 Style::new().effects(Effects::BOLD)
58 }
59
60 pub fn code() -> Style {
62 Style::new().fg_color(Some(Color::Ansi(AnsiColor::Magenta)))
63 }
64
65 pub fn render(style: &Style) -> String {
67 style.to_string()
68 }
69
70 pub fn render_reset() -> String {
72 Reset.to_string()
73 }
74}
75
76pub fn error(message: &str) {
78 styled_println!(
79 "{}{}{}",
80 Styles::render(&Styles::error()),
81 message,
82 Styles::render_reset()
83 );
84}
85
86pub fn warning(message: &str) {
88 styled_println!(
89 "{}{}{}",
90 Styles::render(&Styles::warning()),
91 message,
92 Styles::render_reset()
93 );
94}
95
96pub fn success(message: &str) {
98 styled_println!(
99 "{}{}{}",
100 Styles::render(&Styles::success()),
101 message,
102 Styles::render_reset()
103 );
104}
105
106pub fn info(message: &str) {
108 styled_println!(
109 "{}{}{}",
110 Styles::render(&Styles::info()),
111 message,
112 Styles::render_reset()
113 );
114}
115
116pub fn debug(message: &str) {
118 styled_println!(
119 "{}{}{}",
120 Styles::render(&Styles::debug()),
121 message,
122 Styles::render_reset()
123 );
124}
125
126pub fn bold(message: &str) {
128 styled_println!(
129 "{}{}{}",
130 Styles::render(&Styles::bold()),
131 message,
132 Styles::render_reset()
133 );
134}
135
136pub fn styled(style: &Style, message: &str) {
138 styled_println!(
139 "{}{}{}",
140 Styles::render(style),
141 message,
142 Styles::render_reset()
143 );
144}
145
146#[cfg(test)]
147mod tests {
148 use super::*;
149
150 #[test]
151 fn test_styles() {
152 error("Test error");
154 warning("Test warning");
155 success("Test success");
156 info("Test info");
157 debug("Test debug");
158 bold("Test bold");
159 styled(&Styles::header(), "Test custom");
160 }
161}