Macro enso_logger::define_levels_group[][src]

macro_rules! define_levels_group {
    ($group_name : ident { $($name : ident), * $(,) ? }) => { ... };
}
Expand description

Group levels defined with define_levels (possibly several, possibly merging user-defined types) into a common structure for logger parametrization. Also, defines a generic formatter impl for the type, which redirects calls to more specific instances.

For example, for define_levels_group!(DefaultLevels {Trace,Debug,Info,Warning,Error});, the following code will be generated:

#[derive(Clone,Copy,Debug,PartialEq,Eq,Hash)]
pub enum DefaultLevels { Trace,Debug,Info,Warning,Error }
impl From<Trace>   for DefaultLevels { fn from(_: Trace)   -> Self { Self::Trace } }
impl From<Debug>   for DefaultLevels { fn from(_: Debug)   -> Self { Self::Debug } }
impl From<Info>    for DefaultLevels { fn from(_: Info)    -> Self { Self::Info } }
impl From<Warning> for DefaultLevels { fn from(_: Warning) -> Self { Self::Warning } }
impl From<Error>   for DefaultLevels { fn from(_: Error)   -> Self { Self::Error } }

impl<T> formatter::GenericDefinition<DefaultLevels> for T
    where T : formatter::Definition<level::Trace>,
          T : formatter::Definition<level::Debug>,
          T : formatter::Definition<level::Info>,
          T : formatter::Definition<level::Warning>,
          T : formatter::Definition<level::Error> {
    fn generic_format(entry:&Entry<DefaultLevels>) -> Option<Self::Output> {
        match entry.level {
            DefaultLevels::Trace   => formatter::format::<T, level::Trace>(&entry.gen_entry),
            DefaultLevels::Debug   => formatter::format::<T, level::Debug>(&entry.gen_entry),
            DefaultLevels::Info    => formatter::format::<T, level::Info>(&entry.gen_entry),
            DefaultLevels::Warning => formatter::format::<T, level::Warning>(&entry.gen_entry),
            DefaultLevels::Error   => formatter::format::<T, level::Error>(&entry.gen_entry)
        }
    }
}