neural_shared/report/
json.rs1use super::{Finding, Reporter};
4use crate::Result;
5use serde::{Deserialize, Serialize};
6
7pub struct JsonReporter;
8
9impl<T: Finding> Reporter<T> for JsonReporter {
10 fn report(&self, findings: &[T]) -> Result<String> {
11 let items: Vec<GenericItem> = findings
12 .iter()
13 .map(|f| GenericItem {
14 kind: f.kind(),
15 name: f.name(),
16 file: f.file(),
17 line: f.line(),
18 column: f.column(),
19 reason: f.reason(),
20 confidence: f.confidence(),
21 })
22 .collect();
23
24 let report = GenericReport {
25 summary: Summary {
26 total_findings: findings.len(),
27 },
28 findings: items,
29 };
30
31 Ok(serde_json::to_string_pretty(&report)?)
32 }
33}
34
35#[derive(Debug, Serialize, Deserialize)]
37struct GenericReport {
38 summary: Summary,
39 findings: Vec<GenericItem>,
40}
41
42#[derive(Debug, Serialize, Deserialize)]
43struct Summary {
44 total_findings: usize,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
48struct GenericItem {
49 kind: String,
50 name: String,
51 file: String,
52 line: usize,
53 column: usize,
54 reason: String,
55 confidence: String,
56}