1+ use std:: sync:: atomic:: { AtomicBool , Ordering } ;
2+
3+ static COLOR_ENABLED : AtomicBool = AtomicBool :: new ( true ) ;
4+
15// TODO: remove the code when 'likely' and 'unlikely' are stable
26#[ inline( always) ]
37#[ cold]
@@ -21,4 +25,85 @@ pub(crate) fn unlikely(b: bool) -> bool {
2125 } else {
2226 false
2327 }
28+ }
29+
30+ pub fn disable_color ( ) {
31+ COLOR_ENABLED . store ( false , Ordering :: Relaxed ) ;
32+ }
33+
34+ pub fn enable_color ( ) {
35+ COLOR_ENABLED . store ( true , Ordering :: Relaxed ) ;
36+ }
37+
38+ #[ inline]
39+ pub fn color_enabled ( ) -> bool {
40+ COLOR_ENABLED . load ( Ordering :: Relaxed )
41+ }
42+
43+ #[ macro_export]
44+ macro_rules! color {
45+ ( "Black" ) => {
46+ if $crate:: color_enabled( ) { "\x1b [0;30m" } else { "" }
47+ } ;
48+ ( "Red" ) => {
49+ if $crate:: color_enabled( ) { "\x1b [0;31m" } else { "" }
50+ } ;
51+ ( "Green" ) => {
52+ if $crate:: color_enabled( ) { "\x1b [0;32m" } else { "" }
53+ } ;
54+ ( "Orange" ) => {
55+ if $crate:: color_enabled( ) { "\x1b [0;33m" } else { "" }
56+ } ;
57+ ( "Blue" ) => {
58+ if $crate:: color_enabled( ) { "\x1b [0;34m" } else { "" }
59+ } ;
60+ ( "Purple" ) => {
61+ if $crate:: color_enabled( ) { "\x1b [0;35m" } else { "" }
62+ } ;
63+ ( "Cyan" ) => {
64+ if $crate:: color_enabled( ) { "\x1b [0;36m" } else { "" }
65+ } ;
66+ ( "LightGray" ) => {
67+ if $crate:: color_enabled( ) { "\x1b [0;37m" } else { "" }
68+ } ;
69+ ( "DarkGray" ) => {
70+ if $crate:: color_enabled( ) { "\x1b [1;30m" } else { "" }
71+ } ;
72+ ( "LightRed" ) => {
73+ if $crate:: color_enabled( ) { "\x1b [1;31m" } else { "" }
74+ } ;
75+ ( "LightGreen" ) => {
76+ if $crate:: color_enabled( ) { "\x1b [1;32m" } else { "" }
77+ } ;
78+ ( "Yellow" ) => {
79+ if $crate:: color_enabled( ) { "\x1b [1;33m" } else { "" }
80+ } ;
81+ ( "LightBlue" ) => {
82+ if $crate:: color_enabled( ) { "\x1b [1;34m" } else { "" }
83+ } ;
84+ ( "LightPurple" ) => {
85+ if $crate:: color_enabled( ) { "\x1b [1;35m" } else { "" }
86+ } ;
87+ ( "LightCyan" ) => {
88+ if $crate:: color_enabled( ) { "\x1b [1;36m" } else { "" }
89+ } ;
90+ ( "White" ) => {
91+ if $crate:: color_enabled( ) { "\x1b [1;37m" } else { "" }
92+ } ;
93+ ( "nc" ) => {
94+ if $crate:: color_enabled( ) { "\x1b [0m" } else { "" }
95+ } ;
96+ ( "ClearScreen" ) => {
97+ if $crate:: color_enabled( ) { "\x1b c" } else { "" }
98+ } ;
99+ ( $unknown: tt) => {
100+ compile_error!( concat!(
101+ "Unknown color name: '" ,
102+ $unknown,
103+ "'. Valid options are: \
104+ Black, Red, Green, Orange, Blue, Purple, Cyan, LightGray, \
105+ DarkGray, LightRed, LightGreen, Yellow, LightBlue, \
106+ LightPurple, LightCyan, White, nc, ClearScreen"
107+ ) )
108+ } ;
24109}
0 commit comments