use log::Log;
use crate::filter::Filter;
#[derive(Debug)]
pub struct FilteredLog<T> {
log: T,
filter: Filter,
}
impl<T: Log> FilteredLog<T> {
pub fn new(log: T, filter: Filter) -> Self {
Self { log, filter }
}
}
impl<T: Log> Log for FilteredLog<T> {
fn enabled(&self, metadata: &log::Metadata<'_>) -> bool {
self.filter.enabled(metadata) && self.log.enabled(metadata)
}
fn log(&self, record: &log::Record<'_>) {
if self.filter.matches(record) {
self.log.log(record);
}
}
fn flush(&self) {
self.log.flush();
}
}