//! Tiny stderr logger. We use a consistent `==> :
` prefix //! so progress messages are easy to scan during long builds. use std::io::{IsTerminal, Write}; const ARROW: &str = "==>"; fn paint(color: &str, text: &str) -> String { if std::io::stderr().is_terminal() { format!("\x1b[{color}m{text}\x1b[0m") } else { text.to_owned() } } fn emit(color: &str, action: &str, details: &str) { let arrow = paint(color, ARROW); let action = paint("1", action); let _ = writeln!(std::io::stderr(), "{arrow} {action} {details}"); } /// Major step, e.g. starting a build or packaging an output. pub fn step(action: &str, details: &str) { emit("1;34", action, details); // bold blue } /// Cache hit / skipped work. pub fn skip(action: &str, details: &str) { emit("1;33", action, details); // bold yellow } /// Sub-step inside a larger action. pub fn info(action: &str, details: &str) { emit("1;32", action, details); // bold green }