use owo_colors::{colors::css, OwoColorize};
pub fn supports_color() -> bool {
supports_color::on(supports_color::Stream::Stdout).is_some()
}
pub fn terminal_width() -> Option<u16> {
terminal_size::terminal_size().map(|(w, _)| w.0)
}
pub fn is_narrow() -> bool {
terminal_width().is_some_and(|w| w < 60)
}
pub trait Colorize {
fn success(&self) -> String;
fn warning(&self) -> String;
fn info(&self) -> String;
fn dim(&self) -> String;
}
impl Colorize for str {
fn success(&self) -> String {
if supports_color() {
self.fg::<css::Green>().to_string()
} else {
self.to_string()
}
}
fn warning(&self) -> String {
if supports_color() {
self.fg::<css::Orange>().to_string()
} else {
self.to_string()
}
}
fn info(&self) -> String {
if supports_color() {
self.fg::<css::LightBlue>().to_string()
} else {
self.to_string()
}
}
fn dim(&self) -> String {
if supports_color() {
self.dimmed().to_string()
} else {
self.to_string()
}
}
}
impl Colorize for String {
fn success(&self) -> String {
self.as_str().success()
}
fn warning(&self) -> String {
self.as_str().warning()
}
fn info(&self) -> String {
self.as_str().info()
}
fn dim(&self) -> String {
self.as_str().dim()
}
}