1use std::fmt;
2
3#[cfg(feature = "serde")]
4use serde::{Serialize, Deserialize};
5
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
26#[repr(transparent)]
27pub struct ColorParam(pub u32);
28
29impl ColorParam {
30 pub const BOLD: Self = Self(1);
31 pub const DIM: Self = Self(2);
32 pub const ITALIC: Self = Self(3);
33 pub const UNDERLINE: Self = Self(4);
34 pub const BLINK: Self = Self(5);
35 #[cfg(feature = "color-ext")] pub const RAPID_BLINK: Self = Self(6);
36 pub const INVERT: Self = Self(7);
37 #[cfg(feature = "color-ext")] pub const CONCEAL: Self = Self(8);
38 pub const STRIKETHROUGH: Self = Self(9);
39 #[cfg(feature = "color-ext")] pub const FRAKTUR: Self = Self(20);
40 pub const BLACK: Self = Self(30);
41 pub const RED: Self = Self(31);
42 pub const GREEN: Self = Self(32);
43 pub const YELLOW: Self = Self(33);
44 pub const BLUE: Self = Self(34);
45 pub const MAGENTA: Self = Self(35);
46 pub const CYAN: Self = Self(36);
47 pub const WHITE: Self = Self(37);
48 pub const RGB: Self = Self(38);
49 pub const ON_BLACK: Self = Self(40);
50 pub const ON_RED: Self = Self(41);
51 pub const ON_GREEN: Self = Self(42);
52 pub const ON_YELLOW: Self = Self(43);
53 pub const ON_BLUE: Self = Self(44);
54 pub const ON_MAGENTA: Self = Self(45);
55 pub const ON_CYAN: Self = Self(46);
56 pub const ON_WHITE: Self = Self(47);
57 pub const ON_RGB: Self = Self(48);
58 pub const BRIGHT_BLACK: Self = Self(90);
59 pub const BRIGHT_RED: Self = Self(91);
60 pub const BRIGHT_GREEN: Self = Self(39);
61 pub const BRIGHT_YELLOW: Self = Self(93);
62 pub const BRIGHT_BLUE: Self = Self(94);
63 pub const BRIGHT_MAGENTA: Self = Self(95);
64 pub const BRIGHT_CYAN: Self = Self(96);
65 pub const BRIGHT_WHITE: Self = Self(97);
66 pub const ON_BRIGHT_BLACK: Self = Self(100);
67 pub const ON_BRIGHT_RED: Self = Self(101);
68 pub const ON_BRIGHT_GREEN: Self = Self(102);
69 pub const ON_BRIGHT_YELLOW: Self = Self(103);
70 pub const ON_BRIGHT_BLUE: Self = Self(104);
71 pub const ON_BRIGHT_MAGENTA: Self = Self(105);
72 pub const ON_BRIGHT_CYAN: Self = Self(106);
73 pub const ON_BRIGHT_WHITE: Self = Self(107);
74}
75
76#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
92#[derive(Debug, Clone, PartialEq, Eq, Hash)]
93pub struct ColoredString {
94 source: Box<str>,
96
97 colors: Vec<ColorParam>,
99}
100impl fmt::Display for ColoredString {
101 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
102 write!(f, "\x1B[")?;
103 for (idx, color) in self.colors.iter().enumerate() {
104 if idx > 0 {
105 write!(f, ";")?;
106 }
107 write!(f, "{}", color.0)?;
108 }
109 write!(f, "m{}", self.source)?;
110 write!(f, "\x1B[0m")
111 }
112}
113
114pub trait Colorize {
136 fn bold(&self) -> ColoredString;
137 fn dim(&self) -> ColoredString;
138 fn italic(&self) -> ColoredString;
139 fn underline(&self) -> ColoredString;
140 fn blink(&self) -> ColoredString;
141 #[cfg(feature = "color-ext")] fn rapid_blink(&self) -> ColoredString;
142 fn invert(&self) -> ColoredString;
143 #[cfg(feature = "color-ext")] fn conceal(&self) -> ColoredString;
144 fn strikethrough(&self) -> ColoredString;
145 #[cfg(feature = "color-ext")] fn fraktur(&self) -> ColoredString;
146 fn black(&self) -> ColoredString;
147 fn red(&self) -> ColoredString;
148 fn green(&self) -> ColoredString;
149 fn yellow(&self) -> ColoredString;
150 fn blue(&self) -> ColoredString;
151 fn magenta(&self) -> ColoredString;
152 fn cyan(&self) -> ColoredString;
153 fn white(&self) -> ColoredString;
154 fn rgb(&self, r: u8, g: u8, b: u8) -> ColoredString;
155 fn on_black(&self) -> ColoredString;
156 fn on_red(&self) -> ColoredString;
157 fn on_green(&self) -> ColoredString;
158 fn on_yellow(&self) -> ColoredString;
159 fn on_blue(&self) -> ColoredString;
160 fn on_magenta(&self) -> ColoredString;
161 fn on_cyan(&self) -> ColoredString;
162 fn on_white(&self) -> ColoredString;
163 fn on_rgb(&self, r: u8, g: u8, b: u8) -> ColoredString;
164 fn bright_black(&self) -> ColoredString;
165 fn bright_red(&self) -> ColoredString;
166 fn bright_green(&self) -> ColoredString;
167 fn bright_yellow(&self) -> ColoredString;
168 fn bright_blue(&self) -> ColoredString;
169 fn bright_magenta(&self) -> ColoredString;
170 fn bright_cyan(&self) -> ColoredString;
171 fn bright_white(&self) -> ColoredString;
172 fn on_bright_black(&self) -> ColoredString;
173 fn on_bright_red(&self) -> ColoredString;
174 fn on_bright_green(&self) -> ColoredString;
175 fn on_bright_yellow(&self) -> ColoredString;
176 fn on_bright_blue(&self) -> ColoredString;
177 fn on_bright_magenta(&self) -> ColoredString;
178 fn on_bright_cyan(&self) -> ColoredString;
179 fn on_bright_white(&self) -> ColoredString;
180}
181
182impl<S: AsRef<str>> Colorize for S {
183 fn bold(&self) -> ColoredString {
184 ColoredString {
185 source: Box::from(self.as_ref()),
186 colors: vec![ColorParam::BOLD],
187 }
188 }
189
190 fn dim(&self) -> ColoredString {
191 ColoredString {
192 source: Box::from(self.as_ref()),
193 colors: vec![ColorParam::DIM],
194 }
195 }
196
197 fn italic(&self) -> ColoredString {
198 ColoredString {
199 source: Box::from(self.as_ref()),
200 colors: vec![ColorParam::ITALIC],
201 }
202 }
203
204 fn underline(&self) -> ColoredString {
205 ColoredString {
206 source: Box::from(self.as_ref()),
207 colors: vec![ColorParam::UNDERLINE],
208 }
209 }
210
211 fn blink(&self) -> ColoredString {
212 ColoredString {
213 source: Box::from(self.as_ref()),
214 colors: vec![ColorParam::BLINK],
215 }
216 }
217
218 #[cfg(feature = "color-ext")] fn rapid_blink(&self) -> ColoredString {
219 ColoredString {
220 source: Box::from(self.as_ref()),
221 colors: vec![ColorParam::RAPID_BLINK],
222 }
223 }
224
225 fn invert(&self) -> ColoredString {
226 ColoredString {
227 source: Box::from(self.as_ref()),
228 colors: vec![ColorParam::INVERT],
229 }
230 }
231
232 #[cfg(feature = "color-ext")] fn conceal(&self) -> ColoredString {
233 ColoredString {
234 source: Box::from(self.as_ref()),
235 colors: vec![ColorParam::CONCEAL],
236 }
237 }
238
239 fn strikethrough(&self) -> ColoredString {
240 ColoredString {
241 source: Box::from(self.as_ref()),
242 colors: vec![ColorParam::STRIKETHROUGH],
243 }
244 }
245
246 #[cfg(feature = "color-ext")] fn fraktur(&self) -> ColoredString {
247 ColoredString {
248 source: Box::from(self.as_ref()),
249 colors: vec![ColorParam::FRAKTUR],
250 }
251 }
252
253 fn black(&self) -> ColoredString {
254 ColoredString {
255 source: Box::from(self.as_ref()),
256 colors: vec![ColorParam::BLACK],
257 }
258 }
259
260 fn red(&self) -> ColoredString {
261 ColoredString {
262 source: Box::from(self.as_ref()),
263 colors: vec![ColorParam::RED],
264 }
265 }
266
267 fn green(&self) -> ColoredString {
268 ColoredString {
269 source: Box::from(self.as_ref()),
270 colors: vec![ColorParam::GREEN],
271 }
272 }
273
274 fn yellow(&self) -> ColoredString {
275 ColoredString {
276 source: Box::from(self.as_ref()),
277 colors: vec![ColorParam::YELLOW],
278 }
279 }
280
281 fn blue(&self) -> ColoredString {
282 ColoredString {
283 source: Box::from(self.as_ref()),
284 colors: vec![ColorParam::BLUE],
285 }
286 }
287 fn magenta(&self) -> ColoredString {
288 ColoredString {
289 source: Box::from(self.as_ref()),
290 colors: vec![ColorParam::MAGENTA],
291 }
292 }
293
294 fn cyan(&self) -> ColoredString {
295 ColoredString {
296 source: Box::from(self.as_ref()),
297 colors: vec![ColorParam::CYAN],
298 }
299 }
300
301 fn white(&self) -> ColoredString {
302 ColoredString {
303 source: Box::from(self.as_ref()),
304 colors: vec![ColorParam::WHITE],
305 }
306 }
307
308 fn rgb(&self, r: u8, g: u8, b: u8) -> ColoredString {
309 ColoredString {
310 source: Box::from(self.as_ref()),
311 colors: vec![ColorParam::RGB, ColorParam(2), ColorParam(r as u32), ColorParam(g as u32), ColorParam(b as u32)],
312 }
313 }
314
315 fn on_black(&self) -> ColoredString {
316 ColoredString {
317 source: Box::from(self.as_ref()),
318 colors: vec![ColorParam::ON_BLACK],
319 }
320 }
321
322 fn on_red(&self) -> ColoredString {
323 ColoredString {
324 source: Box::from(self.as_ref()),
325 colors: vec![ColorParam::ON_RED],
326 }
327 }
328
329 fn on_green(&self) -> ColoredString {
330 ColoredString {
331 source: Box::from(self.as_ref()),
332 colors: vec![ColorParam::ON_GREEN],
333 }
334 }
335
336 fn on_yellow(&self) -> ColoredString {
337 ColoredString {
338 source: Box::from(self.as_ref()),
339 colors: vec![ColorParam::ON_YELLOW],
340 }
341 }
342
343 fn on_blue(&self) -> ColoredString {
344 ColoredString {
345 source: Box::from(self.as_ref()),
346 colors: vec![ColorParam::ON_BLUE],
347 }
348 }
349 fn on_magenta(&self) -> ColoredString {
350 ColoredString {
351 source: Box::from(self.as_ref()),
352 colors: vec![ColorParam::ON_MAGENTA],
353 }
354 }
355
356 fn on_cyan(&self) -> ColoredString {
357 ColoredString {
358 source: Box::from(self.as_ref()),
359 colors: vec![ColorParam::ON_CYAN],
360 }
361 }
362
363 fn on_white(&self) -> ColoredString {
364 ColoredString {
365 source: Box::from(self.as_ref()),
366 colors: vec![ColorParam::ON_WHITE],
367 }
368 }
369
370 fn on_rgb(&self, r: u8, g: u8, b: u8) -> ColoredString {
371 ColoredString {
372 source: Box::from(self.as_ref()),
373 colors: vec![ColorParam::ON_RGB, ColorParam(2), ColorParam(r as u32), ColorParam(g as u32), ColorParam(b as u32)],
374 }
375 }
376
377 fn bright_black(&self) -> ColoredString {
378 ColoredString {
379 source: Box::from(self.as_ref()),
380 colors: vec![ColorParam::BRIGHT_BLACK],
381 }
382 }
383
384 fn bright_red(&self) -> ColoredString {
385 ColoredString {
386 source: Box::from(self.as_ref()),
387 colors: vec![ColorParam::BRIGHT_RED],
388 }
389 }
390
391 fn bright_green(&self) -> ColoredString {
392 ColoredString {
393 source: Box::from(self.as_ref()),
394 colors: vec![ColorParam::BRIGHT_GREEN],
395 }
396 }
397
398 fn bright_yellow(&self) -> ColoredString {
399 ColoredString {
400 source: Box::from(self.as_ref()),
401 colors: vec![ColorParam::BRIGHT_YELLOW],
402 }
403 }
404
405 fn bright_blue(&self) -> ColoredString {
406 ColoredString {
407 source: Box::from(self.as_ref()),
408 colors: vec![ColorParam::BRIGHT_BLUE],
409 }
410 }
411 fn bright_magenta(&self) -> ColoredString {
412 ColoredString {
413 source: Box::from(self.as_ref()),
414 colors: vec![ColorParam::BRIGHT_MAGENTA],
415 }
416 }
417
418 fn bright_cyan(&self) -> ColoredString {
419 ColoredString {
420 source: Box::from(self.as_ref()),
421 colors: vec![ColorParam::BRIGHT_CYAN],
422 }
423 }
424
425 fn bright_white(&self) -> ColoredString {
426 ColoredString {
427 source: Box::from(self.as_ref()),
428 colors: vec![ColorParam::BRIGHT_WHITE],
429 }
430 }
431
432 fn on_bright_black(&self) -> ColoredString {
433 ColoredString {
434 source: Box::from(self.as_ref()),
435 colors: vec![ColorParam::ON_BRIGHT_BLACK],
436 }
437 }
438
439 fn on_bright_red(&self) -> ColoredString {
440 ColoredString {
441 source: Box::from(self.as_ref()),
442 colors: vec![ColorParam::ON_BRIGHT_RED],
443 }
444 }
445
446 fn on_bright_green(&self) -> ColoredString {
447 ColoredString {
448 source: Box::from(self.as_ref()),
449 colors: vec![ColorParam::ON_BRIGHT_GREEN],
450 }
451 }
452
453 fn on_bright_yellow(&self) -> ColoredString {
454 ColoredString {
455 source: Box::from(self.as_ref()),
456 colors: vec![ColorParam::ON_BRIGHT_YELLOW],
457 }
458 }
459
460 fn on_bright_blue(&self) -> ColoredString {
461 ColoredString {
462 source: Box::from(self.as_ref()),
463 colors: vec![ColorParam::ON_BRIGHT_BLUE],
464 }
465 }
466 fn on_bright_magenta(&self) -> ColoredString {
467 ColoredString {
468 source: Box::from(self.as_ref()),
469 colors: vec![ColorParam::ON_BRIGHT_MAGENTA],
470 }
471 }
472
473 fn on_bright_cyan(&self) -> ColoredString {
474 ColoredString {
475 source: Box::from(self.as_ref()),
476 colors: vec![ColorParam::ON_BRIGHT_CYAN],
477 }
478 }
479
480 fn on_bright_white(&self) -> ColoredString {
481 ColoredString {
482 source: Box::from(self.as_ref()),
483 colors: vec![ColorParam::ON_BRIGHT_WHITE],
484 }
485 }
486}
487
488impl Colorize for ColoredString {
489 fn bold(&self) -> ColoredString {
490 let mut colors = self.colors.clone();
491 colors.push(ColorParam::BOLD);
492 ColoredString {
493 source: self.source.clone(),
494 colors,
495 }
496 }
497
498 fn dim(&self) -> ColoredString {
499 let mut colors = self.colors.clone();
500 colors.push(ColorParam::DIM);
501 ColoredString {
502 source: self.source.clone(),
503 colors,
504 }
505 }
506
507 fn italic(&self) -> ColoredString {
508 let mut colors = self.colors.clone();
509 colors.push(ColorParam::ITALIC);
510 ColoredString {
511 source: self.source.clone(),
512 colors,
513 }
514 }
515
516 fn underline(&self) -> ColoredString {
517 let mut colors = self.colors.clone();
518 colors.push(ColorParam::UNDERLINE);
519 ColoredString {
520 source: self.source.clone(),
521 colors,
522 }
523 }
524
525 fn blink(&self) -> ColoredString {
526 let mut colors = self.colors.clone();
527 colors.push(ColorParam::BLINK);
528 ColoredString {
529 source: self.source.clone(),
530 colors,
531 }
532 }
533
534 #[cfg(feature = "color-ext")] fn rapid_blink(&self) -> ColoredString {
535 let mut colors = self.colors.clone();
536 colors.push(ColorParam::RAPID_BLINK);
537 ColoredString {
538 source: self.source.clone(),
539 colors,
540 }
541 }
542
543 fn invert(&self) -> ColoredString {
544 let mut colors = self.colors.clone();
545 colors.push(ColorParam::INVERT);
546 ColoredString {
547 source: self.source.clone(),
548 colors,
549 }
550 }
551
552 #[cfg(feature = "color-ext")] fn conceal(&self) -> ColoredString {
553 let mut colors = self.colors.clone();
554 colors.push(ColorParam::CONCEAL);
555 ColoredString {
556 source: self.source.clone(),
557 colors,
558 }
559 }
560
561 fn strikethrough(&self) -> ColoredString {
562 let mut colors = self.colors.clone();
563 colors.push(ColorParam::STRIKETHROUGH);
564 ColoredString {
565 source: self.source.clone(),
566 colors,
567 }
568 }
569
570 #[cfg(feature = "color-ext")] fn fraktur(&self) -> ColoredString {
571 let mut colors = self.colors.clone();
572 colors.push(ColorParam::FRAKTUR);
573 ColoredString {
574 source: self.source.clone(),
575 colors,
576 }
577 }
578
579 fn black(&self) -> ColoredString {
580 let mut colors = self.colors.clone();
581 colors.push(ColorParam::BLACK);
582 ColoredString {
583 source: self.source.clone(),
584 colors,
585 }
586 }
587
588 fn red(&self) -> ColoredString {
589 let mut colors = self.colors.clone();
590 colors.push(ColorParam::RED);
591 ColoredString {
592 source: self.source.clone(),
593 colors,
594 }
595 }
596
597 fn green(&self) -> ColoredString {
598 let mut colors = self.colors.clone();
599 colors.push(ColorParam::GREEN);
600 ColoredString {
601 source: self.source.clone(),
602 colors,
603 }
604 }
605
606 fn yellow(&self) -> ColoredString {
607 let mut colors = self.colors.clone();
608 colors.push(ColorParam::YELLOW);
609 ColoredString {
610 source: self.source.clone(),
611 colors,
612 }
613 }
614
615 fn blue(&self) -> ColoredString {
616 let mut colors = self.colors.clone();
617 colors.push(ColorParam::BLUE);
618 ColoredString {
619 source: self.source.clone(),
620 colors,
621 }
622 }
623 fn magenta(&self) -> ColoredString {
624 let mut colors = self.colors.clone();
625 colors.push(ColorParam::MAGENTA);
626 ColoredString {
627 source: self.source.clone(),
628 colors,
629 }
630 }
631
632 fn cyan(&self) -> ColoredString {
633 let mut colors = self.colors.clone();
634 colors.push(ColorParam::CYAN);
635 ColoredString {
636 source: self.source.clone(),
637 colors,
638 }
639 }
640
641 fn white(&self) -> ColoredString {
642 let mut colors = self.colors.clone();
643 colors.push(ColorParam::WHITE);
644 ColoredString {
645 source: self.source.clone(),
646 colors,
647 }
648 }
649
650 fn rgb(&self, r: u8, g: u8, b: u8) -> ColoredString {
651 let mut colors = self.colors.clone();
652 colors.extend([ColorParam::RGB, ColorParam(2), ColorParam(r as u32), ColorParam(g as u32), ColorParam(b as u32)]);
653 ColoredString {
654 source: self.source.clone(),
655 colors,
656 }
657 }
658
659 fn on_black(&self) -> ColoredString {
660 let mut colors = self.colors.clone();
661 colors.push(ColorParam::ON_BLACK);
662 ColoredString {
663 source: self.source.clone(),
664 colors,
665 }
666 }
667
668 fn on_red(&self) -> ColoredString {
669 let mut colors = self.colors.clone();
670 colors.push(ColorParam::ON_RED);
671 ColoredString {
672 source: self.source.clone(),
673 colors,
674 }
675 }
676
677 fn on_green(&self) -> ColoredString {
678 let mut colors = self.colors.clone();
679 colors.push(ColorParam::ON_GREEN);
680 ColoredString {
681 source: self.source.clone(),
682 colors,
683 }
684 }
685
686 fn on_yellow(&self) -> ColoredString {
687 let mut colors = self.colors.clone();
688 colors.push(ColorParam::ON_YELLOW);
689 ColoredString {
690 source: self.source.clone(),
691 colors,
692 }
693 }
694
695 fn on_blue(&self) -> ColoredString {
696 let mut colors = self.colors.clone();
697 colors.push(ColorParam::ON_BLUE);
698 ColoredString {
699 source: self.source.clone(),
700 colors,
701 }
702 }
703 fn on_magenta(&self) -> ColoredString {
704 let mut colors = self.colors.clone();
705 colors.push(ColorParam::ON_MAGENTA);
706 ColoredString {
707 source: self.source.clone(),
708 colors,
709 }
710 }
711
712 fn on_cyan(&self) -> ColoredString {
713 let mut colors = self.colors.clone();
714 colors.push(ColorParam::ON_CYAN);
715 ColoredString {
716 source: self.source.clone(),
717 colors,
718 }
719 }
720
721 fn on_white(&self) -> ColoredString {
722 let mut colors = self.colors.clone();
723 colors.push(ColorParam::ON_WHITE);
724 ColoredString {
725 source: self.source.clone(),
726 colors,
727 }
728 }
729
730 fn on_rgb(&self, r: u8, g: u8, b: u8) -> ColoredString {
731 let mut colors = self.colors.clone();
732 colors.extend([ColorParam::ON_RGB, ColorParam(2), ColorParam(r as u32), ColorParam(g as u32), ColorParam(b as u32)]);
733 ColoredString {
734 source: self.source.clone(),
735 colors,
736 }
737 }
738
739 fn bright_black(&self) -> ColoredString {
740 let mut colors = self.colors.clone();
741 colors.push(ColorParam::BRIGHT_BLACK);
742 ColoredString {
743 source: self.source.clone(),
744 colors,
745 }
746 }
747
748 fn bright_red(&self) -> ColoredString {
749 let mut colors = self.colors.clone();
750 colors.push(ColorParam::BRIGHT_RED);
751 ColoredString {
752 source: self.source.clone(),
753 colors,
754 }
755 }
756
757 fn bright_green(&self) -> ColoredString {
758 let mut colors = self.colors.clone();
759 colors.push(ColorParam::BRIGHT_GREEN);
760 ColoredString {
761 source: self.source.clone(),
762 colors,
763 }
764 }
765
766 fn bright_yellow(&self) -> ColoredString {
767 let mut colors = self.colors.clone();
768 colors.push(ColorParam::BRIGHT_YELLOW);
769 ColoredString {
770 source: self.source.clone(),
771 colors,
772 }
773 }
774
775 fn bright_blue(&self) -> ColoredString {
776 let mut colors = self.colors.clone();
777 colors.push(ColorParam::BRIGHT_BLUE);
778 ColoredString {
779 source: self.source.clone(),
780 colors,
781 }
782 }
783 fn bright_magenta(&self) -> ColoredString {
784 let mut colors = self.colors.clone();
785 colors.push(ColorParam::BRIGHT_MAGENTA);
786 ColoredString {
787 source: self.source.clone(),
788 colors,
789 }
790 }
791
792 fn bright_cyan(&self) -> ColoredString {
793 let mut colors = self.colors.clone();
794 colors.push(ColorParam::BRIGHT_CYAN);
795 ColoredString {
796 source: self.source.clone(),
797 colors,
798 }
799 }
800
801 fn bright_white(&self) -> ColoredString {
802 let mut colors = self.colors.clone();
803 colors.push(ColorParam::BRIGHT_WHITE);
804 ColoredString {
805 source: self.source.clone(),
806 colors,
807 }
808 }
809
810 fn on_bright_black(&self) -> ColoredString {
811 let mut colors = self.colors.clone();
812 colors.push(ColorParam::ON_BRIGHT_BLACK);
813 ColoredString {
814 source: self.source.clone(),
815 colors,
816 }
817 }
818
819 fn on_bright_red(&self) -> ColoredString {
820 let mut colors = self.colors.clone();
821 colors.push(ColorParam::ON_BRIGHT_RED);
822 ColoredString {
823 source: self.source.clone(),
824 colors,
825 }
826 }
827
828 fn on_bright_green(&self) -> ColoredString {
829 let mut colors = self.colors.clone();
830 colors.push(ColorParam::ON_BRIGHT_GREEN);
831 ColoredString {
832 source: self.source.clone(),
833 colors,
834 }
835 }
836
837 fn on_bright_yellow(&self) -> ColoredString {
838 let mut colors = self.colors.clone();
839 colors.push(ColorParam::ON_BRIGHT_YELLOW);
840 ColoredString {
841 source: self.source.clone(),
842 colors,
843 }
844 }
845
846 fn on_bright_blue(&self) -> ColoredString {
847 let mut colors = self.colors.clone();
848 colors.push(ColorParam::ON_BRIGHT_BLUE);
849 ColoredString {
850 source: self.source.clone(),
851 colors,
852 }
853 }
854 fn on_bright_magenta(&self) -> ColoredString {
855 let mut colors = self.colors.clone();
856 colors.push(ColorParam::ON_BRIGHT_MAGENTA);
857 ColoredString {
858 source: self.source.clone(),
859 colors,
860 }
861 }
862
863 fn on_bright_cyan(&self) -> ColoredString {
864 let mut colors = self.colors.clone();
865 colors.push(ColorParam::ON_BRIGHT_CYAN);
866 ColoredString {
867 source: self.source.clone(),
868 colors,
869 }
870 }
871
872 fn on_bright_white(&self) -> ColoredString {
873 let mut colors = self.colors.clone();
874 colors.push(ColorParam::ON_BRIGHT_WHITE);
875 ColoredString {
876 source: self.source.clone(),
877 colors,
878 }
879 }
880}