use owo_colors::{OwoColorize, Stream::Stdout};
use std::fmt::Display;
pub(crate) fn success(msg: &str) -> String {
let symbol = "✓".if_supports_color(Stdout, |text| text.green());
let message = msg.if_supports_color(Stdout, |text| text.green());
format!("{symbol} {message}")
}
pub(crate) fn error(msg: &str) -> String {
let symbol = "✗".if_supports_color(Stdout, |text| text.red());
let message = msg.if_supports_color(Stdout, |text| text.red());
format!("{symbol} {message}")
}
pub(crate) fn info(msg: impl Display) -> String {
format!("{}", msg.if_supports_color(Stdout, |t| t.cyan()))
}
pub(crate) fn dim(msg: impl Display) -> String {
format!("{}", msg.if_supports_color(Stdout, |t| t.dimmed()))
}
pub(crate) fn bold(msg: impl Display) -> String {
format!("{}", msg.if_supports_color(Stdout, |t| t.bold()))
}
pub(crate) fn failure(msg: impl Display) -> String {
format!("{}", msg.if_supports_color(Stdout, |t| t.red()))
}
pub(crate) fn warn(msg: impl Display) -> String {
format!("{}", msg.if_supports_color(Stdout, |t| t.yellow()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn success_contains_checkmark_and_message() {
let output = success("ok");
assert!(output.contains('✓'));
assert!(output.contains("ok"));
}
#[test]
fn error_contains_cross_and_message() {
let output = error("failed");
assert!(output.contains('✗'));
assert!(output.contains("failed"));
}
#[test]
fn info_contains_message() {
let output = info("note");
assert!(output.contains("note"));
}
#[test]
fn dim_contains_message() {
let output = dim("secondary");
assert!(output.contains("secondary"));
}
#[test]
fn bold_contains_message() {
let output = bold("important");
assert!(output.contains("important"));
}
#[test]
fn warn_contains_message() {
let output = warn("caution");
assert!(output.contains("caution"));
}
}