pub mod json;
pub mod markdown;
pub mod sarif;
pub mod terminal;
use std::io::Write;
use anyhow::Result;
use serde::{Deserialize, Serialize};
use crate::rules::Violation;
#[derive(
Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema,
)]
#[serde(rename_all = "lowercase")]
pub enum ReporterKind {
#[default]
Terminal,
Json,
Sarif,
Markdown,
}
pub trait Reporter {
fn report(&self, violations: &[Violation], out: &mut dyn Write) -> Result<()>;
}
pub fn make(kind: ReporterKind) -> Box<dyn Reporter> {
match kind {
ReporterKind::Terminal => Box::new(terminal::TerminalReporter::default()),
ReporterKind::Json => Box::new(json::JsonReporter::default()),
ReporterKind::Sarif => Box::new(sarif::SarifReporter),
ReporterKind::Markdown => Box::new(markdown::MarkdownReporter::default()),
}
}