/
logger.rs
50 lines (39 loc) · 1.28 KB
/
logger.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use std::io::Write;
use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};
#[derive(Default)]
pub struct Logger {}
impl Logger {
pub fn new() -> Self {
Self {}
}
// TODO This looks like Clippy's bug?
#[allow(clippy::only_used_in_recursion)]
pub fn log_error(
&self,
error: &dyn std::error::Error,
) -> Result<(), Box<dyn std::error::Error>> {
let mut stderr = StandardStream::stderr(ColorChoice::Auto);
stderr.set_color(ColorSpec::new().set_fg(Some(Color::Red)))?;
write!(&mut stderr, "error")?;
stderr.set_color(ColorSpec::new().set_fg(None))?;
writeln!(
&mut stderr,
": {}",
format!("{error}").replace('\n', "\n ").trim()
)?;
if let Some(error) = error.source() {
self.log_error(error)?;
}
Ok(())
}
}
impl app::Logger for Logger {
fn log(&self, log: &str) -> Result<(), Box<dyn std::error::Error>> {
let mut stderr = StandardStream::stderr(ColorChoice::Auto);
stderr.set_color(ColorSpec::new().set_fg(Some(Color::Green)))?;
write!(&mut stderr, "info")?;
stderr.set_color(ColorSpec::new().set_fg(None))?;
writeln!(&mut stderr, ": {log}")?;
Ok(())
}
}