use std::io::stderr; use std::io::Write; pub trait Logger { fn write(&mut self, &str); fn debug(&mut self, &str); } pub struct StdErrLogger; impl Logger for StdErrLogger { fn debug(&mut self, str: &str) { writeln!(&mut stderr(), "{}", str).unwrap(); } fn write(&mut self, str: &str) { writeln!(&mut stderr(), "{}", str).unwrap(); } } pub struct FilteringLogger<'a> { logger: &'a mut dyn Logger, } impl<'a> FilteringLogger<'a> { pub fn new(logger: &'a mut dyn Logger) -> Self { FilteringLogger { logger } } } impl<'a> Logger for FilteringLogger<'a> { fn debug(&mut self, _str: &str) {} fn write(&mut self, str: &str) { self.logger.write(str) } } #[cfg(test)] mod test {}