1#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
5pub enum LogLevel {
6 Error,
7 Warn,
8 Info,
9 Debug,
10 Trace,
11}
12
13pub trait CliLogger {
14 fn level(&self) -> LogLevel;
15 fn set_level(&mut self, level: LogLevel);
16 fn log(&mut self, level: LogLevel, args: core::fmt::Arguments<'_>);
17}
18
19#[macro_export]
20macro_rules! cli_log {
21 ($logger:expr, $level:expr, $($arg:tt)*) => {{
22 let logger = &mut $logger;
23 if logger.level() >= $level {
24 logger.log($level, core::format_args!($($arg)*));
25 }
26 }};
27}
28
29pub struct NullLogger {
31 level: LogLevel,
32}
33
34impl NullLogger {
35 pub const fn new() -> Self {
36 NullLogger {
37 level: LogLevel::Info,
38 }
39 }
40}
41
42impl Default for NullLogger {
43 fn default() -> Self {
44 Self::new()
45 }
46}
47
48impl CliLogger for NullLogger {
49 fn level(&self) -> LogLevel {
50 self.level
51 }
52 fn set_level(&mut self, level: LogLevel) {
53 self.level = level;
54 }
55 fn log(&mut self, _level: LogLevel, _args: core::fmt::Arguments<'_>) {}
56}