use crate::level::Level;
use crate::record::LogRecord;
pub struct Filter {
min_level: Option<Level>,
module: Option<String>,
function: Option<String>,
}
impl Filter {
pub fn new(min_level: Option<Level>, module: Option<String>, function: Option<String>) -> Self {
Self {
min_level,
module,
function,
}
}
pub fn matches(&self, record: &LogRecord) -> bool {
if let Some(min_level) = self.min_level
&& record.level < min_level
{
return false;
}
if let Some(ref module_filter) = self.module {
if let Some(ref record_module) = record.module {
if record_module != module_filter {
return false;
}
} else {
return false;
}
}
if let Some(ref function_filter) = self.function {
if let Some(ref record_function) = record.function {
if record_function != function_filter {
return false;
}
} else {
return false;
}
}
true
}
}