ailint_core/reporter/
mod.rs1pub mod json;
4pub mod markdown;
5pub mod sarif;
6pub mod terminal;
7
8use std::io::Write;
9
10use anyhow::Result;
11use serde::{Deserialize, Serialize};
12
13use crate::rules::Violation;
14
15#[derive(
17 Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema,
18)]
19#[serde(rename_all = "lowercase")]
20pub enum ReporterKind {
21 #[default]
23 Terminal,
24 Json,
26 Sarif,
28 Markdown,
30}
31
32pub trait Reporter {
34 fn report(&self, violations: &[Violation], out: &mut dyn Write) -> Result<()>;
36}
37
38pub fn make(kind: ReporterKind) -> Box<dyn Reporter> {
40 match kind {
41 ReporterKind::Terminal => Box::new(terminal::TerminalReporter::default()),
42 ReporterKind::Json => Box::new(json::JsonReporter::default()),
43 ReporterKind::Sarif => Box::new(sarif::SarifReporter),
44 ReporterKind::Markdown => Box::new(markdown::MarkdownReporter::default()),
45 }
46}