1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
pub trait Listener { fn warning(&mut self, s: String); fn info(&mut self, s: String); } pub struct NoOpListener; impl Listener for NoOpListener { fn info(&mut self, _s: String) {} fn warning(&mut self, _s: String) {} } pub struct StdErrListener { pub verbose: bool, } impl Listener for StdErrListener { fn warning(&mut self, s: String) { eprintln!("warning: {}", s); } fn info(&mut self, s: String) { if self.verbose { eprintln!("info: {}", s); } } }