1use std::collections::VecDeque;
2
3pub enum Logger {
4 Stdout,
5 Backlog { backlog: VecDeque<String> },
6 Callback { log: fn(String) },
7}
8
9impl Logger {
10 pub fn log(&mut self, msg: String) {
11 match self {
12 Logger::Stdout => println!("{}", msg),
13 Logger::Backlog { backlog } => backlog.push_back(msg),
14 Logger::Callback { log } => log(msg),
15 }
16 }
17}
18
19impl Iterator for Logger {
20 type Item = String;
21
22 fn next(&mut self) -> Option<Self::Item> {
23 match self {
24 Logger::Backlog { backlog } => backlog.pop_front(),
25 _ => None,
26 }
27 }
28}