1mod json;
4mod sarif;
5mod text;
6
7pub mod banner;
8
9use std::io::Write;
10
11use crate::VerifiedFinding;
12
13pub use json::{JsonArrayReporter, JsonReporter, JsonlReporter};
14pub use sarif::SarifReporter;
15pub use text::TextReporter;
16
17pub type ReportError = anyhow::Error;
19
20pub trait Reporter: Send {
22 fn report(&mut self, finding: &VerifiedFinding) -> Result<(), ReportError>;
24
25 fn finish(&mut self) -> Result<(), ReportError>;
27}
28
29trait WriterBackedReporter {
30 type Writer: Write;
31
32 fn writer_mut(&mut self) -> &mut Self::Writer;
33
34 fn flush_writer(&mut self) -> Result<(), ReportError> {
35 self.writer_mut().flush()?;
36 Ok(())
37 }
38}
39
40