1pub trait Colorize {
2 fn black(&self) -> String;
4 fn red(&self) -> String;
5 fn green(&self) -> String;
6 fn yellow(&self) -> String;
7 fn blue(&self) -> String;
8 fn magenta(&self) -> String;
9 fn cyan(&self) -> String;
10 fn white(&self) -> String;
11
12 fn bright_black(&self) -> String;
14 fn bright_red(&self) -> String;
15 fn bright_green(&self) -> String;
16 fn bright_yellow(&self) -> String;
17 fn bright_blue(&self) -> String;
18 fn bright_magenta(&self) -> String;
19 fn bright_cyan(&self) -> String;
20 fn bright_white(&self) -> String;
21
22 fn on_black(&self) -> String;
24 fn on_red(&self) -> String;
25 fn on_green(&self) -> String;
26 fn on_yellow(&self) -> String;
27 fn on_blue(&self) -> String;
28 fn on_magenta(&self) -> String;
29 fn on_cyan(&self) -> String;
30 fn on_white(&self) -> String;
31
32 fn bold(&self) -> String;
34 fn italic(&self) -> String;
35}
36
37impl Colorize for String {
38 fn black(&self) -> String {
39 format!("\x1B[30m{}\x1B[0m", self)
40 }
41
42 fn red(&self) -> String {
43 format!("\x1B[31m{}\x1B[0m", self)
44 }
45
46 fn green(&self) -> String {
47 format!("\x1B[32m{}\x1B[0m", self)
48 }
49
50 fn yellow(&self) -> String {
51 format!("\x1B[33m{}\x1B[0m", self)
52 }
53
54 fn blue(&self) -> String {
55 format!("\x1B[34m{}\x1B[0m", self)
56 }
57
58 fn magenta(&self) -> String {
59 format!("\x1B[35m{}\x1B[0m", self)
60 }
61
62 fn cyan(&self) -> String {
63 format!("\x1B[36m{}\x1B[0m", self)
64 }
65
66 fn white(&self) -> String {
67 format!("\x1B[37m{}\x1B[0m", self)
68 }
69
70 fn bright_black(&self) -> String {
71 format!("\x1B[30;1m{}\x1B[0m", self)
72 }
73
74 fn bright_red(&self) -> String {
75 format!("\x1B[31;1m{}\x1B[0m", self)
76 }
77
78 fn bright_green(&self) -> String {
79 format!("\x1B[32;1m{}\x1B[0m", self)
80 }
81
82 fn bright_yellow(&self) -> String {
83 format!("\x1B[33;1m{}\x1B[0m", self)
84 }
85
86 fn bright_blue(&self) -> String {
87 format!("\x1B[34;1m{}\x1B[0m", self)
88 }
89
90 fn bright_magenta(&self) -> String {
91 format!("\x1B[35;1m{}\x1B[0m", self)
92 }
93
94 fn bright_cyan(&self) -> String {
95 format!("\x1B[36;1m{}\x1B[0m", self)
96 }
97
98 fn bright_white(&self) -> String {
99 format!("\x1B[37;1m{}\x1B[0m", self)
100 }
101
102 fn on_black(&self) -> String {
103 format!("\x1B[40m{}\x1B[0m", self)
104 }
105
106 fn on_red(&self) -> String {
107 format!("\x1B[41m{}\x1B[0m", self)
108 }
109
110 fn on_green(&self) -> String {
111 format!("\x1B[42m{}\x1B[0m", self)
112 }
113
114 fn on_yellow(&self) -> String {
115 format!("\x1B[43m{}\x1B[0m", self)
116 }
117
118 fn on_blue(&self) -> String {
119 format!("\x1B[44m{}\x1B[0m", self)
120 }
121
122 fn on_magenta(&self) -> String {
123 format!("\x1B[45m{}\x1B[0m", self)
124 }
125
126 fn on_cyan(&self) -> String {
127 format!("\x1B[46m{}\x1B[0m", self)
128 }
129
130 fn on_white(&self) -> String {
131 format!("\x1B[47m{}\x1B[0m", self)
132 }
133
134 fn bold(&self) -> String {
135 format!("\x1B[1m{}\x1B[0m", self)
136 }
137
138 fn italic(&self) -> String {
139 format!("\x1B[3m{}\x1B[0m", self)
140 }
141}
142
143impl<'a> Colorize for &'a str {
144 fn black(&self) -> String {
145 format!("\x1B[30m{}\x1B[0m", self)
146 }
147
148 fn red(&self) -> String {
149 format!("\x1B[31m{}\x1B[0m", self)
150 }
151
152 fn green(&self) -> String {
153 format!("\x1B[32m{}\x1B[0m", self)
154 }
155
156 fn yellow(&self) -> String {
157 format!("\x1B[33m{}\x1B[0m", self)
158 }
159
160 fn blue(&self) -> String {
161 format!("\x1B[34m{}\x1B[0m", self)
162 }
163
164 fn magenta(&self) -> String {
165 format!("\x1B[35m{}\x1B[0m", self)
166 }
167
168 fn cyan(&self) -> String {
169 format!("\x1B[36m{}\x1B[0m", self)
170 }
171
172 fn white(&self) -> String {
173 format!("\x1B[37m{}\x1B[0m", self)
174 }
175
176 fn bright_black(&self) -> String {
177 format!("\x1B[30;1m{}\x1B[0m", self)
178 }
179
180 fn bright_red(&self) -> String {
181 format!("\x1B[31;1m{}\x1B[0m", self)
182 }
183
184 fn bright_green(&self) -> String {
185 format!("\x1B[32;1m{}\x1B[0m", self)
186 }
187
188 fn bright_yellow(&self) -> String {
189 format!("\x1B[33;1m{}\x1B[0m", self)
190 }
191
192 fn bright_blue(&self) -> String {
193 format!("\x1B[34;1m{}\x1B[0m", self)
194 }
195
196 fn bright_magenta(&self) -> String {
197 format!("\x1B[35;1m{}\x1B[0m", self)
198 }
199
200 fn bright_cyan(&self) -> String {
201 format!("\x1B[36;1m{}\x1B[0m", self)
202 }
203
204 fn bright_white(&self) -> String {
205 format!("\x1B[37;1m{}\x1B[0m", self)
206 }
207
208 fn on_black(&self) -> String {
209 format!("\x1B[40m{}\x1B[0m", self)
210 }
211
212 fn on_red(&self) -> String {
213 format!("\x1B[41m{}\x1B[0m", self)
214 }
215
216 fn on_green(&self) -> String {
217 format!("\x1B[42m{}\x1B[0m", self)
218 }
219
220 fn on_yellow(&self) -> String {
221 format!("\x1B[43m{}\x1B[0m", self)
222 }
223
224 fn on_blue(&self) -> String {
225 format!("\x1B[44m{}\x1B[0m", self)
226 }
227
228 fn on_magenta(&self) -> String {
229 format!("\x1B[45m{}\x1B[0m", self)
230 }
231
232 fn on_cyan(&self) -> String {
233 format!("\x1B[46m{}\x1B[0m", self)
234 }
235
236 fn on_white(&self) -> String {
237 format!("\x1B[47m{}\x1B[0m", self)
238 }
239
240 fn bold(&self) -> String {
241 format!("\x1B[1m{}\x1B[0m", self)
242 }
243
244 fn italic(&self) -> String {
245 format!("\x1B[3m{}\x1B[0m", self)
246 }
247}
248
249impl<'a> Colorize for &'a mut str {
250 fn black(&self) -> String {
251 format!("\x1B[30m{}\x1B[0m", self)
252 }
253
254 fn red(&self) -> String {
255 format!("\x1B[31m{}\x1B[0m", self)
256 }
257
258 fn green(&self) -> String {
259 format!("\x1B[32m{}\x1B[0m", self)
260 }
261
262 fn yellow(&self) -> String {
263 format!("\x1B[33m{}\x1B[0m", self)
264 }
265
266 fn blue(&self) -> String {
267 format!("\x1B[34m{}\x1B[0m", self)
268 }
269
270 fn magenta(&self) -> String {
271 format!("\x1B[35m{}\x1B[0m", self)
272 }
273
274 fn cyan(&self) -> String {
275 format!("\x1B[36m{}\x1B[0m", self)
276 }
277
278 fn white(&self) -> String {
279 format!("\x1B[37m{}\x1B[0m", self)
280 }
281
282 fn bright_black(&self) -> String {
283 format!("\x1B[30;1m{}\x1B[0m", self)
284 }
285
286 fn bright_red(&self) -> String {
287 format!("\x1B[31;1m{}\x1B[0m", self)
288 }
289
290 fn bright_green(&self) -> String {
291 format!("\x1B[32;1m{}\x1B[0m", self)
292 }
293
294 fn bright_yellow(&self) -> String {
295 format!("\x1B[33;1m{}\x1B[0m", self)
296 }
297
298 fn bright_blue(&self) -> String {
299 format!("\x1B[34;1m{}\x1B[0m", self)
300 }
301
302 fn bright_magenta(&self) -> String {
303 format!("\x1B[35;1m{}\x1B[0m", self)
304 }
305
306 fn bright_cyan(&self) -> String {
307 format!("\x1B[36;1m{}\x1B[0m", self)
308 }
309
310 fn bright_white(&self) -> String {
311 format!("\x1B[37;1m{}\x1B[0m", self)
312 }
313
314 fn on_black(&self) -> String {
315 format!("\x1B[40m{}\x1B[0m", self)
316 }
317
318 fn on_red(&self) -> String {
319 format!("\x1B[41m{}\x1B[0m", self)
320 }
321
322 fn on_green(&self) -> String {
323 format!("\x1B[42m{}\x1B[0m", self)
324 }
325
326 fn on_yellow(&self) -> String {
327 format!("\x1B[43m{}\x1B[0m", self)
328 }
329
330 fn on_blue(&self) -> String {
331 format!("\x1B[44m{}\x1B[0m", self)
332 }
333
334 fn on_magenta(&self) -> String {
335 format!("\x1B[45m{}\x1B[0m", self)
336 }
337
338 fn on_cyan(&self) -> String {
339 format!("\x1B[46m{}\x1B[0m", self)
340 }
341
342 fn on_white(&self) -> String {
343 format!("\x1B[47m{}\x1B[0m", self)
344 }
345
346 fn bold(&self) -> String {
347 format!("\x1B[1m{}\x1B[0m", self)
348 }
349
350 fn italic(&self) -> String {
351 format!("\x1B[3m{}\x1B[0m", self)
352 }
353}
354
355#[macro_export]
356macro_rules! red_println {
357 ($($arg:tt)*) => {{
358 println!("{}", format_args!("{}", format!($($arg)*).red()));
359 }}
360}
361
362#[macro_export]
363macro_rules! bold_red_println {
364 ($($arg:tt)*) => {{
365 println!("{}", format_args!("{}", format!($($arg)*).red().bold()));
366 }}
367}
368
369#[macro_export]
370macro_rules! green_println {
371 ($($arg:tt)*) => {{
372 println!("{}", format_args!("{}", format!($($arg)*).green()));
373 }}
374}
375
376#[macro_export]
377macro_rules! bold_green_println {
378 ($($arg:tt)*) => {{
379 println!("{}", format_args!("{}", format!($($arg)*).green().bold()));
380 }}
381}
382
383#[macro_export]
384macro_rules! yellow_println {
385 ($($arg:tt)*) => {{
386 println!("{}", format_args!("{}", format!($($arg)*).yellow()));
387 }}
388}
389
390#[macro_export]
391macro_rules! bold_yellow_println {
392 ($($arg:tt)*) => {{
393 println!("{}", format_args!("{}", format!($($arg)*).yellow().bold()));
394 }}
395}
396
397#[macro_export]
398macro_rules! blue_println {
399 ($($arg:tt)*) => {{
400 println!("{}", format_args!("{}", format!($($arg)*).blue()));
401 }}
402}
403
404#[macro_export]
405macro_rules! bold_blue_println {
406 ($($arg:tt)*) => {{
407 println!("{}", format_args!("{}", format!($($arg)*).blue().bold()));
408 }}
409}
410
411#[macro_export]
412macro_rules! purple_println {
413 ($($arg:tt)*) => {{
414 println!("{}", format_args!("{}", format!($($arg)*).purple()));
415 }}
416}
417
418#[macro_export]
419macro_rules! bold_purple_println {
420 ($($arg:tt)*) => {{
421 println!("{}", format_args!("{}", format!($($arg)*).purple().bold()));
422 }}
423}
424
425#[macro_export]
426macro_rules! cyan_println {
427 ($($arg:tt)*) => {{
428 println!("{}", format_args!("{}", format!($($arg)*).cyan()));
429 }}
430}
431
432#[macro_export]
433macro_rules! bold_cyan_println {
434 ($($arg:tt)*) => {{
435 println!("{}", format_args!("{}", format!($($arg)*).cyan().bold()));
436 }}
437}
438
439#[macro_export]
440macro_rules! white_println {
441 ($($arg:tt)*) => {{
442 println!("{}", format_args!("{}", format!($($arg)*).white()));
443 }}
444}
445
446#[macro_export]
447macro_rules! bold_white_println {
448 ($($arg:tt)*) => {{
449 println!("{}", format_args!("{}", format!($($arg)*).white().bold()));
450 }}
451}
452#[macro_export]
453macro_rules! italic_red_println {
454 ($($arg:tt)*) => {{
455 println!("{}", format_args!("{}", format!($($arg)*).red().italic()));
456 }}
457}
458
459#[macro_export]
460macro_rules! italic_green_println {
461 ($($arg:tt)*) => {{
462 println!("{}", format_args!("{}", format!($($arg)*).green().italic()));
463 }}
464}
465
466#[macro_export]
467macro_rules! italic_yellow_println {
468 ($($arg:tt)*) => {{
469 println!("{}", format_args!("{}", format!($($arg)*).yellow().italic()));
470 }}
471}
472
473#[macro_export]
474macro_rules! italic_blue_println {
475 ($($arg:tt)*) => {{
476 println!("{}", format_args!("{}", format!($($arg)*).blue().italic()));
477 }}
478}
479
480#[macro_export]
481macro_rules! italic_purple_println {
482 ($($arg:tt)*) => {{
483 println!("{}", format_args!("{}", format!($($arg)*).purple().italic()));
484 }}
485}
486
487#[macro_export]
488macro_rules! italic_cyan_println {
489 ($($arg:tt)*) => {{
490 println!("{}", format_args!("{}", format!($($arg)*).cyan().italic()));
491 }}
492}
493#[macro_export]
494macro_rules! italic_white_println {
495 ($($arg:tt)*) => {{
496 println!("{}", format_args!("{}", format!($($arg)*).white().italic()));
497 }}
498}
499#[macro_export]
500macro_rules! bold_italic_red_println {
501 ($($arg:tt)*) => {{
502 println!("{}", format_args!("{}", format!($($arg)*).red().bold().italic()));
503 }}
504}
505
506#[macro_export]
507macro_rules! bold_italic_green_println {
508 ($($arg:tt)*) => {{
509 println!("{}", format_args!("{}", format!($($arg)*).green().bold().italic()));
510 }}
511}
512
513#[macro_export]
514macro_rules! bold_italic_yellow_println {
515 ($($arg:tt)*) => {{
516 println!("{}", format_args!("{}", format!($($arg)*).yellow().bold().italic()));
517 }}
518}
519
520#[macro_export]
521macro_rules! bold_italic_blue_println {
522 ($($arg:tt)*) => {{
523 println!("{}", format_args!("{}", format!($($arg)*).blue().bold().italic()));
524 }}
525}
526
527#[macro_export]
528macro_rules! bold_italic_purple_println {
529 ($($arg:tt)*) => {{
530 println!("{}", format_args!("{}", format!($($arg)*).purple().bold().italic()));
531 }}
532}
533
534#[macro_export]
535macro_rules! bold_italic_cyan_println {
536 ($($arg:tt)*) => {{
537 println!("{}", format_args!("{}", format!($($arg)*).cyan().bold().italic()));
538 }}
539}
540
541#[macro_export]
542macro_rules! bold_italic_white_println {
543 ($($arg:tt)*) => {{
544 println!("{}", format_args!("{}", format!($($arg)*).white().bold().italic()));
545 }}
546}
547#[macro_export]
548macro_rules! bg_red_println {
549 ($($arg:tt)*) => {{
550 println!("{}", format_args!("{}", format!($($arg)*).on_red()));
551 }}
552}
553
554#[macro_export]
555macro_rules! bg_green_println {
556 ($($arg:tt)*) => {{
557 println!("{}", format_args!("{}", format!($($arg)*).on_green()));
558 }}
559}
560
561#[macro_export]
562macro_rules! bg_yellow_println {
563 ($($arg:tt)*) => {{
564 println!("{}", format_args!("{}", format!($($arg)*).on_yellow()));
565 }}
566}
567
568#[macro_export]
569macro_rules! bg_blue_println {
570 ($($arg:tt)*) => {{
571 println!("{}", format_args!("{}", format!($($arg)*).on_blue()));
572 }}
573}
574
575#[macro_export]
576macro_rules! bg_purple_println {
577 ($($arg:tt)*) => {{
578 println!("{}", format_args!("{}", format!($($arg)*).on_purple()));
579 }}
580}
581
582#[macro_export]
583macro_rules! bg_cyan_println {
584 ($($arg:tt)*) => {{
585 println!("{}", format_args!("{}", format!($($arg)*).on_cyan()));
586 }}
587}
588
589#[macro_export]
590macro_rules! bg_white_println {
591 ($($arg:tt)*) => {{
592 println!("{}", format_args!("{}", format!($($arg)*).on_white()));
593 }}
594}
595#[macro_export]
596macro_rules! bold_bg_red_println {
597 ($($arg:tt)*) => {{
598 println!("{}", format_args!("{}", format!($($arg)*).on_red().bold()));
599 }}
600}
601
602#[macro_export]
603macro_rules! bold_bg_green_println {
604 ($($arg:tt)*) => {{
605 println!("{}", format_args!("{}", format!($($arg)*).on_green().bold()));
606 }}
607}
608
609#[macro_export]
610macro_rules! bold_bg_yellow_println {
611 ($($arg:tt)*) => {{
612 println!("{}", format_args!("{}", format!($($arg)*).on_yellow().bold()));
613 }}
614}
615
616#[macro_export]
617macro_rules! bold_bg_blue_println {
618 ($($arg:tt)*) => {{
619 println!("{}", format_args!("{}", format!($($arg)*).on_blue().bold()));
620 }}
621}
622
623#[macro_export]
624macro_rules! bold_bg_purple_println {
625 ($($arg:tt)*) => {{
626 println!("{}", format_args!("{}", format!($($arg)*).on_purple().bold()));
627 }}
628}
629
630#[macro_export]
631macro_rules! bold_bg_cyan_println {
632 ($($arg:tt)*) => {{
633 println!("{}", format_args!("{}", format!($($arg)*).on_cyan().bold()));
634 }}
635}
636
637#[macro_export]
638macro_rules! bold_bg_white_println {
639 ($($arg:tt)*) => {{
640 println!("{}", format_args!("{}", format!($($arg)*).on_white().bold()));
641 }}
642}