1use is_terminal::IsTerminal;
2use owo_colors::OwoColorize;
3use std::env;
4
5pub fn should_use_color() -> bool {
7 if env::var("NO_COLOR").is_ok() {
9 return false;
10 }
11
12 if env::var("FORCE_COLOR").is_ok() {
14 return true;
15 }
16
17 std::io::stdout().is_terminal()
19}
20
21pub fn pass(text: &str) -> String {
23 if should_use_color() {
24 format!("{}", text.bright_green().bold())
25 } else {
26 text.to_string()
27 }
28}
29
30pub fn warn(text: &str) -> String {
32 if should_use_color() {
33 format!("{}", text.bright_yellow().bold())
34 } else {
35 text.to_string()
36 }
37}
38
39pub fn fail(text: &str) -> String {
41 if should_use_color() {
42 format!("{}", text.bright_red().bold())
43 } else {
44 text.to_string()
45 }
46}
47
48pub fn critical(text: &str) -> String {
50 if should_use_color() {
51 format!("{}", text.bright_magenta().bold())
52 } else {
53 text.to_string()
54 }
55}
56
57pub fn info(text: &str) -> String {
59 if should_use_color() {
60 format!("{}", text.bright_cyan())
61 } else {
62 text.to_string()
63 }
64}
65
66pub fn alert(text: &str) -> String {
68 if should_use_color() {
69 format!("{}", text.bright_yellow())
70 } else {
71 text.to_string()
72 }
73}
74
75pub fn level_critical(message: &str) -> String {
77 format!("[{}] {}", critical("CRITICAL"), message)
78}
79
80pub fn level_high(message: &str) -> String {
81 format!("[{}] {}", fail("HIGH"), message)
82}
83
84pub fn level_medium(message: &str) -> String {
85 format!("[{}] {}", warn("MEDIUM"), message)
86}
87
88pub fn level_low(message: &str) -> String {
89 format!("[{}] {}", pass("LOW"), message)
90}
91
92pub fn level_warning(message: &str) -> String {
93 format!("[{}] {}", warn("WARNING"), message)
94}
95
96pub fn level_pass(message: &str) -> String {
97 format!("[{}] {}", pass("PASS"), message)
98}
99
100pub fn level_conflict(message: &str) -> String {
101 format!("[{}] {}", fail("CONFLICT"), message)
102}
103
104pub fn level_fail(message: &str) -> String {
105 format!("[{}] {}", fail("FAIL"), message)
106}
107
108pub fn level_warn(message: &str) -> String {
109 format!("[{}] {}", warn("WARN"), message)
110}