1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mod emailreporter;

pub use crate::reporter::emailreporter::EmailReporter;

pub enum ReporterKind {
    EmailReporter(EmailReporter)
}

pub struct Reporter {
    reporters: Vec<ReporterKind>
}

impl Reporter {
    pub fn new() -> Reporter {
        Reporter {
            reporters: Vec::new()
        }
    }

    pub fn add_reporter(&mut self, reporter: ReporterKind) {
        self.reporters.push(reporter);
    }

    pub fn report(&mut self) {
        for reporter in &mut self.reporters {
            match reporter {
                ReporterKind::EmailReporter(reporter) => reporter.report(),
            }
        }
    }
}