use colored::*;
pub fn dim(s: &str) -> ColoredString {
s.truecolor(110, 110, 120)
}
pub fn accent(s: &str) -> ColoredString {
s.truecolor(135, 100, 255).bold()
}
pub fn ok(s: &str) -> ColoredString {
s.truecolor(80, 220, 140).bold()
}
pub fn err(s: &str) -> ColoredString {
s.truecolor(255, 80, 80).bold()
}
pub fn hi(s: &str) -> ColoredString {
s.truecolor(255, 200, 80)
}
pub const DIAMOND: &str = "◆";
pub const CHECK: &str = "✔";
pub const CROSS: &str = "✘";
pub const BAR: &str = "│";
pub const ARROW: &str = "➜";
#[macro_export]
macro_rules! section {
($($arg:tt)*) => {
eprintln!("{} {}", $crate::ui::accent($crate::ui::DIAMOND), format!($($arg)*).bold());
};
}
#[macro_export]
macro_rules! detail {
($($arg:tt)*) => {
eprintln!("{} {}", $crate::ui::dim($crate::ui::BAR), $crate::ui::dim(&format!($($arg)*)));
};
}
#[macro_export]
macro_rules! step {
($($arg:tt)*) => {
eprintln!("{} {}", $crate::ui::accent($crate::ui::DOT), format!($($arg)*));
};
}
#[macro_export]
macro_rules! success {
($($arg:tt)*) => {
eprintln!("{} {}", $crate::ui::ok($crate::ui::CHECK), format!($($arg)*));
};
}
#[macro_export]
macro_rules! fail {
($($arg:tt)*) => {
eprintln!("{} {}", $crate::ui::err($crate::ui::CROSS), format!($($arg)*));
};
}
#[macro_export]
macro_rules! hint {
($($arg:tt)*) => {
eprintln!("{} {}", $crate::ui::dim($crate::ui::ARROW), $crate::ui::dim(&format!($($arg)*)));
};
}
#[macro_export]
macro_rules! gap {
() => {
eprintln!();
};
}