pub const RED: &str = "\x1b[0;31m";
pub const GREEN: &str = "\x1b[0;32m";
pub const YELLOW: &str = "\x1b[1;33m";
pub const CYAN: &str = "\x1b[0;36m";
pub const RESET: &str = "\x1b[0m";
#[derive(Clone, Copy, PartialEq)]
pub enum Outcome {
Pass,
Fail,
Info,
}
pub struct Status {
pub name: String,
pub outcome: Outcome,
pub detail: String,
}
impl Status {
pub fn new(name: impl Into<String>, ok: bool, detail: impl Into<String>) -> Self {
Status {
name: name.into(),
outcome: if ok { Outcome::Pass } else { Outcome::Fail },
detail: detail.into(),
}
}
pub fn info(name: impl Into<String>, detail: impl Into<String>) -> Self {
Status {
name: name.into(),
outcome: Outcome::Info,
detail: detail.into(),
}
}
pub fn print(&self) {
let tag = match self.outcome {
Outcome::Pass => format!("{GREEN}[PASS]{RESET}"),
Outcome::Fail => format!("{RED}[FAIL]{RESET}"),
Outcome::Info => format!("{CYAN}[INFO]{RESET}"),
};
println!(" {tag} {:<35} - {}", self.name, self.detail);
}
}