Skip to main content

env_filter/
directive.rs

1use alloc::string::String;
2
3use log::Level;
4use log::LevelFilter;
5
6#[derive(#[automatically_derived]
impl ::core::fmt::Debug for Directive {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field2_finish(f, "Directive",
            "name", &self.name, "level", &&self.level)
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for Directive {
    #[inline]
    fn clone(&self) -> Directive {
        Directive {
            name: ::core::clone::Clone::clone(&self.name),
            level: ::core::clone::Clone::clone(&self.level),
        }
    }
}Clone)]
7pub(crate) struct Directive {
8    pub(crate) name: Option<String>,
9    pub(crate) level: LevelFilter,
10}
11
12// Check whether a level and target are enabled by the set of directives.
13pub(crate) fn enabled(directives: &[Directive], level: Level, target: &str) -> bool {
14    // Search for the longest match, the vector is assumed to be pre-sorted.
15    for directive in directives.iter().rev() {
16        match directive.name {
17            Some(ref name) if !target.starts_with(&**name) => {}
18            Some(..) | None => return level <= directive.level,
19        }
20    }
21    false
22}