use std::env;
use log::LevelFilter;
#[derive(Copy, Clone, PartialEq, Eq, Debug, Display)]
pub enum LogLevel {
#[display("none")]
None = 0,
#[display("error")]
Error,
#[display("warn")]
Warn,
#[display("info")]
Info,
#[display("debug")]
Debug,
#[display("trace")]
Trace,
}
impl From<u8> for LogLevel {
fn from(val: u8) -> Self { Self::from_verbosity_flag_count(val) }
}
impl From<LogLevel> for u8 {
fn from(log_level: LogLevel) -> Self { log_level.verbosity_flag_count() }
}
impl LogLevel {
pub fn verbosity_flag_count(&self) -> u8 { *self as u8 }
pub fn from_verbosity_flag_count(level: u8) -> Self {
match level {
0 => LogLevel::None,
1 => LogLevel::Error,
2 => LogLevel::Warn,
3 => LogLevel::Info,
4 => LogLevel::Debug,
_ => LogLevel::Trace,
}
}
pub fn apply(&self) {
log::set_max_level(LevelFilter::Trace);
if env::var("RUST_LOG").is_err() {
env::set_var("RUST_LOG", self.to_string());
}
env_logger::init();
}
}