use std::io::IsTerminal;
pub fn enabled() -> bool {
std::env::var_os("NO_COLOR").is_none() && std::io::stdout().is_terminal()
}
fn wrap(code: &str, s: &str) -> String {
if enabled() {
format!("\x1b[{code}m{s}\x1b[0m")
} else {
s.to_string()
}
}
pub fn bold(s: &str) -> String {
wrap("1", s)
}
pub fn dim(s: &str) -> String {
wrap("2", s)
}
pub fn accent(s: &str) -> String {
wrap("38;5;43", s)
}
pub fn green(s: &str) -> String {
wrap("32", s)
}
pub fn red(s: &str) -> String {
wrap("31", s)
}
pub fn amber(s: &str) -> String {
wrap("33", s)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unstyled_when_no_color_is_set() {
unsafe { std::env::set_var("NO_COLOR", "1") };
assert!(!enabled());
assert_eq!(bold("x"), "x", "no ANSI codes when NO_COLOR is set");
assert_eq!(accent("hi"), "hi");
unsafe { std::env::remove_var("NO_COLOR") };
}
}