first
This commit is contained in:
+35
@@ -0,0 +1,35 @@
|
||||
//! Tiny stderr logger. We use a consistent `==> <action>: <details>` 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
|
||||
}
|
||||
Reference in New Issue
Block a user