#[macro_export]
macro_rules! header {
($name:expr, $version:expr, $about:expr, $tagline:expr, badge=$badge:expr) => {{
use $crate::styles::*;
eprintln!();
eprintln!(
" {} {}",
paint($badge, &format!(" {} ", $name)),
paint(DIM, &format!("v{}", $version)),
);
eprintln!(" {}", paint(DIM, &format!("{} — {}", $about, $tagline)));
eprintln!();
}};
($name:expr, $version:expr, $about:expr, $tagline:expr) => {{
use $crate::styles::*;
eprintln!();
eprintln!(
" {} {}",
paint(BADGE_CYAN, &format!(" {} ", $name)),
paint(DIM, &format!("v{}", $version)),
);
eprintln!(" {}", paint(DIM, &format!("{} — {}", $about, $tagline)));
eprintln!();
}};
}
#[macro_export]
macro_rules! phase {
($tag:expr, $($arg:tt)*) => {{
use $crate::styles::*;
let msg = format!($($arg)*);
eprintln!(
" {} {:<6} {}",
paint(ACCENT, PHASE),
paint(ACCENT, $tag),
paint(DIM, &msg),
);
}};
}
#[macro_export]
macro_rules! step {
($($arg:tt)*) => {{
use $crate::styles::*;
let msg = format!($($arg)*);
eprintln!();
eprintln!(" {} {}", paint(WHITE, BULLET), paint(WHITE, &msg));
}};
}
#[macro_export]
macro_rules! substep {
($url:expr, $local:expr) => {
$crate::progress::substep($url, $local);
};
}
#[macro_export]
macro_rules! ok {
($path:expr) => {{
use $crate::styles::*;
eprintln!(
" {} {}",
paint(OK, CHECK),
paint(DIM, &$path.to_string())
);
}};
}
#[macro_export]
macro_rules! bail {
($($arg:tt)*) => {{
$crate::print_error(&format!($($arg)*));
::std::process::exit(1);
}};
}
#[macro_export]
macro_rules! summary {
(done: $msg:expr, $($rest:tt)*) => {{
let s = $crate::summary::Summary::new().done($msg);
let s = $crate::__summary_inner!(s, $($rest)*);
s.print();
}};
(warn: $msg:expr, $($rest:tt)*) => {{
let s = $crate::summary::Summary::new().warn($msg);
let s = $crate::__summary_inner!(s, $($rest)*);
s.print();
}};
($($rest:tt)*) => {{
let s = $crate::summary::Summary::new();
let s = $crate::__summary_inner!(s, $($rest)*);
s.print();
}};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __summary_inner {
($s:expr,) => { $s };
($s:expr) => { $s };
($s:expr, done: $msg:expr, $($rest:tt)*) => {{
let s = $s.done($msg);
$crate::__summary_inner!(s, $($rest)*)
}};
($s:expr, done: $msg:expr) => { $s.done($msg) };
($s:expr, warn: $msg:expr, $($rest:tt)*) => {{
let s = $s.warn($msg);
$crate::__summary_inner!(s, $($rest)*)
}};
($s:expr, warn: $msg:expr) => { $s.warn($msg) };
($s:expr, section, $($rest:tt)*) => {{
let s = $s.blank().section();
$crate::__summary_inner!(s, $($rest)*)
}};
($s:expr, $key:literal => $val:expr, $($rest:tt)*) => {{
let s = $s.stat($key, &format!("{}", $val));
$crate::__summary_inner!(s, $($rest)*)
}};
($s:expr, $key:literal => $val:expr) => {
$s.stat($key, &format!("{}", $val))
};
}