This repository has no description
1use console::Style;
2use indicatif::ProgressBar;
3
4pub trait Log {
5 fn log_styled(&self, style: Style, verb: &'static str, message: &str);
6 fn log(&self, verb: &'static str, message: &str) {
7 self.log_styled(Style::new().bold().green(), verb, message);
8 }
9 fn log_cyan(&self, verb: &'static str, message: &str) {
10 self.log_styled(Style::new().bold().cyan(), verb, message);
11 }
12 fn log_error(&self, verb: &'static str, message: &str) {
13 self.log_styled(Style::new().bold().red(), verb, message);
14 }
15}
16
17pub(super) fn format_log_msg(
18 style: Style,
19 verb: &'static str,
20 message: &str,
21) -> String {
22 format!("{} {}", style.apply_to(format!("{verb:>12}")), message)
23}
24
25impl Log for () {
26 fn log_styled(&self, style: Style, verb: &'static str, message: &str) {
27 println!("{}", format_log_msg(style, verb, message));
28 }
29}
30
31impl Log for ProgressBar {
32 fn log_styled(&self, style: Style, verb: &'static str, message: &str) {
33 self.println(format_log_msg(style, verb, message));
34 }
35}
36
37impl Log for Option<&ProgressBar> {
38 fn log_styled(&self, style: Style, verb: &'static str, message: &str) {
39 if let Some(pb) = self {
40 pb.println(format_log_msg(style, verb, message));
41 }
42 }
43}