use std::env;
use std::fmt::Display;
use std::io::IsTerminal;
use owo_colors::OwoColorize;
#[must_use]
pub fn should_colorize() -> bool {
env::var("NO_COLOR").is_err() && std::io::stdout().is_terminal()
}
#[must_use]
pub fn should_colorize_stderr() -> bool {
env::var("NO_COLOR").is_err() && std::io::stderr().is_terminal()
}
pub fn print_success(message: impl Display) {
if should_colorize() {
println!("{} {}", "✓".green().bold(), message);
} else {
println!("✓ {}", message);
}
}
pub fn print_error(message: impl Display) {
if should_colorize_stderr() {
eprintln!("{} {}", "✗".red().bold(), message);
} else {
eprintln!("✗ {}", message);
}
}
pub fn print_warning(message: impl Display) {
if should_colorize() {
println!("{} {}", "!".yellow().bold(), message);
} else {
println!("! {}", message);
}
}
pub fn print_info(message: impl Display) {
if should_colorize() {
println!("{} {}", "→".blue().bold(), message);
} else {
println!("→ {}", message);
}
}
pub fn print_dimmed(message: impl Display) {
if should_colorize() {
println!("{}", message.to_string().dimmed());
} else {
println!("{}", message);
}
}
#[must_use]
pub fn format_success<T: Display>(value: T) -> String {
if should_colorize() {
format!("{}", value.green())
} else {
value.to_string()
}
}
#[must_use]
pub fn format_error<T: Display>(value: T) -> String {
if should_colorize() {
format!("{}", value.red())
} else {
value.to_string()
}
}
#[must_use]
pub fn format_warning<T: Display>(value: T) -> String {
if should_colorize() {
format!("{}", value.yellow())
} else {
value.to_string()
}
}
#[must_use]
pub fn format_info<T: Display>(value: T) -> String {
if should_colorize() {
format!("{}", value.blue())
} else {
value.to_string()
}
}
#[must_use]
pub fn format_dimmed<T: Display>(value: T) -> String {
if should_colorize() {
format!("{}", value.dimmed())
} else {
value.to_string()
}
}
#[must_use]
pub fn format_bold<T: Display>(value: T) -> String {
if should_colorize() {
format!("{}", value.bold())
} else {
value.to_string()
}
}