Skip to main content

react_auditor/formatters/
json.rs

1use crate::formatters::Formatter;
2use crate::rules::Severity;
3use crate::scanner::ScanResult;
4
5pub struct JsonFormatter;
6
7impl Formatter for JsonFormatter {
8    fn format(&self, results: &[ScanResult], _quiet: bool) -> String {
9        let entries: Vec<serde_json::Value> = results
10            .iter()
11            .flat_map(|r| {
12                r.violations.iter().map(|v| {
13                    serde_json::json!({
14                        "file": v.file_path,
15                        "line": v.line,
16                        "column": v.column,
17                        "ruleId": v.rule_id,
18                        "message": v.message,
19                        "severity": match v.severity {
20                            Severity::Error => "error",
21                            Severity::Warning => "warning",
22                            Severity::Off => "off",
23                        },
24                    })
25                })
26            })
27            .collect();
28
29        serde_json::to_string_pretty(&entries).unwrap_or_default()
30    }
31}