tiny_ansi/
lib.rs

1//! # TinyAnsi
2//!
3//! TinyAnsi is a dead simple library that allows basic coloring of terminal characters.
4//!
5//! ## Usage
6//!
7//! ```rust
8//! use tiny_ansi::TinyAnsi;
9//! println!("{}", "red".red());
10//! println!(
11//!     "{}",
12//!     "bold italic red on green".bold().italic().red().on_green()
13//! );
14//! ```
15
16pub trait TinyAnsi {
17    fn bold(&self) -> String;
18    fn dimmed(&self) -> String;
19    fn italic(&self) -> String;
20    fn underline(&self) -> String;
21    fn blink(&self) -> String;
22    fn reverse(&self) -> String;
23    fn hidden(&self) -> String;
24    fn strikethrough(&self) -> String;
25
26    fn black(&self) -> String;
27    fn red(&self) -> String;
28    fn green(&self) -> String;
29    fn yellow(&self) -> String;
30    fn blue(&self) -> String;
31    fn magenta(&self) -> String;
32    fn cyan(&self) -> String;
33    fn white(&self) -> String;
34    fn bright_black(&self) -> String;
35    fn bright_red(&self) -> String;
36    fn bright_green(&self) -> String;
37    fn bright_yellow(&self) -> String;
38    fn bright_blue(&self) -> String;
39    fn bright_magenta(&self) -> String;
40    fn bright_cyan(&self) -> String;
41    fn bright_white(&self) -> String;
42
43    fn on_black(&self) -> String;
44    fn on_red(&self) -> String;
45    fn on_green(&self) -> String;
46    fn on_yellow(&self) -> String;
47    fn on_blue(&self) -> String;
48    fn on_magenta(&self) -> String;
49    fn on_cyan(&self) -> String;
50    fn on_white(&self) -> String;
51    fn on_bright_black(&self) -> String;
52    fn on_bright_red(&self) -> String;
53    fn on_bright_green(&self) -> String;
54    fn on_bright_yellow(&self) -> String;
55    fn on_bright_blue(&self) -> String;
56    fn on_bright_magenta(&self) -> String;
57    fn on_bright_cyan(&self) -> String;
58    fn on_bright_white(&self) -> String;
59}
60
61impl TinyAnsi for str {
62    fn bold(&self) -> String {
63        format!("\u{1b}[1m{}\u{1b}[0m", self)
64    }
65    fn dimmed(&self) -> String {
66        format!("\u{1b}[2m{}\u{1b}[0m", self)
67    }
68    fn italic(&self) -> String {
69        format!("\u{1b}[3m{}\u{1b}[0m", self)
70    }
71    fn underline(&self) -> String {
72        format!("\u{1b}[4m{}\u{1b}[0m", self)
73    }
74    fn blink(&self) -> String {
75        format!("\u{1b}[5m{}\u{1b}[0m", self)
76    }
77    fn reverse(&self) -> String {
78        format!("\u{1b}[7m{}\u{1b}[0m", self)
79    }
80    fn hidden(&self) -> String {
81        format!("\u{1b}[8m{}\u{1b}[0m", self)
82    }
83    fn strikethrough(&self) -> String {
84        format!("\u{1b}[9m{}\u{1b}[0m", self)
85    }
86
87    fn black(&self) -> String {
88        format!("\u{1b}[30m{}\u{1b}[0m", self)
89    }
90    fn red(&self) -> String {
91        format!("\u{1b}[31m{}\u{1b}[0m", self)
92    }
93    fn green(&self) -> String {
94        format!("\u{1b}[32m{}\u{1b}[0m", self)
95    }
96    fn yellow(&self) -> String {
97        format!("\u{1b}[33m{}\u{1b}[0m", self)
98    }
99    fn blue(&self) -> String {
100        format!("\u{1b}[34m{}\u{1b}[0m", self)
101    }
102    fn magenta(&self) -> String {
103        format!("\u{1b}[35m{}\u{1b}[0m", self)
104    }
105    fn cyan(&self) -> String {
106        format!("\u{1b}[36m{}\u{1b}[0m", self)
107    }
108    fn white(&self) -> String {
109        format!("\u{1b}[37m{}\u{1b}[0m", self)
110    }
111    fn bright_black(&self) -> String {
112        format!("\u{1b}[90m{}\u{1b}[0m", self)
113    }
114    fn bright_red(&self) -> String {
115        format!("\u{1b}[91m{}\u{1b}[0m", self)
116    }
117    fn bright_green(&self) -> String {
118        format!("\u{1b}[92m{}\u{1b}[0m", self)
119    }
120    fn bright_yellow(&self) -> String {
121        format!("\u{1b}[93m{}\u{1b}[0m", self)
122    }
123    fn bright_blue(&self) -> String {
124        format!("\u{1b}[94m{}\u{1b}[0m", self)
125    }
126    fn bright_magenta(&self) -> String {
127        format!("\u{1b}[95m{}\u{1b}[0m", self)
128    }
129    fn bright_cyan(&self) -> String {
130        format!("\u{1b}[96m{}\u{1b}[0m", self)
131    }
132    fn bright_white(&self) -> String {
133        format!("\u{1b}[97m{}\u{1b}[0m", self)
134    }
135
136    fn on_black(&self) -> String {
137        format!("\u{1b}[40m{}\u{1b}[0m", self)
138    }
139    fn on_red(&self) -> String {
140        format!("\u{1b}[41m{}\u{1b}[0m", self)
141    }
142    fn on_green(&self) -> String {
143        format!("\u{1b}[42m{}\u{1b}[0m", self)
144    }
145    fn on_yellow(&self) -> String {
146        format!("\u{1b}[43m{}\u{1b}[0m", self)
147    }
148    fn on_blue(&self) -> String {
149        format!("\u{1b}[44m{}\u{1b}[0m", self)
150    }
151    fn on_magenta(&self) -> String {
152        format!("\u{1b}[45m{}\u{1b}[0m", self)
153    }
154    fn on_cyan(&self) -> String {
155        format!("\u{1b}[46m{}\u{1b}[0m", self)
156    }
157    fn on_white(&self) -> String {
158        format!("\u{1b}[47m{}\u{1b}[0m", self)
159    }
160    fn on_bright_black(&self) -> String {
161        format!("\u{1b}[100m{}\u{1b}[0m", self)
162    }
163    fn on_bright_red(&self) -> String {
164        format!("\u{1b}[101m{}\u{1b}[0m", self)
165    }
166    fn on_bright_green(&self) -> String {
167        format!("\u{1b}[102m{}\u{1b}[0m", self)
168    }
169    fn on_bright_yellow(&self) -> String {
170        format!("\u{1b}[103m{}\u{1b}[0m", self)
171    }
172    fn on_bright_blue(&self) -> String {
173        format!("\u{1b}[104m{}\u{1b}[0m", self)
174    }
175    fn on_bright_magenta(&self) -> String {
176        format!("\u{1b}[105m{}\u{1b}[0m", self)
177    }
178    fn on_bright_cyan(&self) -> String {
179        format!("\u{1b}[106m{}\u{1b}[0m", self)
180    }
181    fn on_bright_white(&self) -> String {
182        format!("\u{1b}[107m{}\u{1b}[0m", self)
183    }
184}
185
186#[cfg(test)]
187mod tests {
188    use crate::TinyAnsi;
189
190    #[test]
191    fn test_show() {
192        println!("{}", "bold".bold());
193        println!("{}", "dimmed".dimmed());
194        println!("{}", "italic".italic());
195        println!("{}", "underline".underline());
196        println!("{}", "blink".blink());
197        println!("{}", "reverse".reverse());
198        println!("{}", "hidden".hidden());
199        println!("{}", "strikethrough".strikethrough());
200
201        println!("{}", "black".black());
202        println!("{}", "red".red());
203        println!("{}", "green".green());
204        println!("{}", "yellow".yellow());
205        println!("{}", "blue".blue());
206        println!("{}", "magenta".magenta());
207        println!("{}", "cyan".cyan());
208        println!("{}", "white".white());
209        println!("{}", "bright_black".bright_black());
210        println!("{}", "bright_red".bright_red());
211        println!("{}", "bright_green".bright_green());
212        println!("{}", "bright_yellow".bright_yellow());
213        println!("{}", "bright_blue".bright_blue());
214        println!("{}", "bright_magenta".bright_magenta());
215        println!("{}", "bright_cyan".bright_cyan());
216        println!("{}", "bright_white".bright_white());
217
218        println!("{}", "on black".on_black());
219        println!("{}", "on red".on_red());
220        println!("{}", "on green".on_green());
221        println!("{}", "on yellow".on_yellow());
222        println!("{}", "on blue".on_blue());
223        println!("{}", "on magenta".on_magenta());
224        println!("{}", "on cyan".on_cyan());
225        println!("{}", "on white".on_white());
226        println!("{}", "on bright_black".on_bright_black());
227        println!("{}", "on bright_red".on_bright_red());
228        println!("{}", "on bright_green".on_bright_green());
229        println!("{}", "on bright_yellow".on_bright_yellow());
230        println!("{}", "on bright_blue".on_bright_blue());
231        println!("{}", "on bright_magenta".on_bright_magenta());
232        println!("{}", "on bright_cyan".on_bright_cyan());
233        println!("{}", "on bright_white".on_bright_white());
234
235        println!("{}", "italic yellow on blue".italic().yellow().on_blue());
236        println!(
237            "{}",
238            "bold italic red on green".bold().italic().red().on_green()
239        );
240        println!(
241            "{}",
242            "underline blink magenta on red"
243                .underline()
244                .blink()
245                .magenta()
246                .on_red()
247        );
248    }
249}