diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs index 570f04a..f6c2180 100644 --- a/src/frontend/mod.rs +++ b/src/frontend/mod.rs @@ -221,29 +221,14 @@ impl App { } } -fn change_log_level(delta: i8) { - let level = log::max_level(); - use LevelFilter::*; - let nl = if delta.signum().is_positive() { - match level { - Off => Error, - Error => Warn, - Warn => Info, - Info => Debug, - Debug => Trace, - Trace => Trace, - } - } else { - match level { - Off => Off, - Error => Off, - Warn => Error, - Info => Warn, - Debug => Info, - Trace => Debug, - } - }; - log::set_max_level(nl); +fn change_log_level(delta: isize) { + let level = log::max_level() as isize; + let max = log::LevelFilter::max() as isize; + let level = (level + delta).clamp(0, max) as usize; + // levelfilter is repr(usize) so this is safe + let level = unsafe { std::mem::transmute::(level) }; + + log::set_max_level(level); } impl Widget for &App {