mod checks;
use serde::Serialize;
use checks::check_pdf_certificate_traceability;
pub use checks::run_all_checks;
use crate::taxonomy::Severity;
#[derive(Debug, Clone, Serialize)]
pub struct LintFinding {
pub check_id: &'static str,
pub evidence_path: String,
pub expected: String,
pub actual: String,
pub severity: Severity,
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct LintReport {
pub findings: Vec<LintFinding>,
}
impl LintReport {
pub fn worst_severity(&self) -> Option<Severity> {
self.findings.iter().map(|f| f.severity).max()
}
pub fn is_clean(&self) -> bool {
self.findings.is_empty()
}
}
pub fn lint(report: &serde_json::Value, typst_source: Option<&str>) -> LintReport {
let mut findings = Vec::new();
run_all_checks(report, &mut findings);
if let Some(typst_source) = typst_source {
check_pdf_certificate_traceability(report, typst_source, &mut findings);
}
LintReport { findings }
}