datasynth_eval/report/
json.rs1use super::{EvaluationReport, ReportGenerator};
6use crate::error::EvalResult;
7use serde_json;
8
9pub struct JsonReportGenerator {
11 pretty: bool,
13}
14
15impl JsonReportGenerator {
16 pub fn new(pretty: bool) -> Self {
18 Self { pretty }
19 }
20}
21
22impl Default for JsonReportGenerator {
23 fn default() -> Self {
24 Self::new(true)
25 }
26}
27
28impl ReportGenerator for JsonReportGenerator {
29 fn generate(&self, report: &EvaluationReport) -> EvalResult<String> {
30 let json = if self.pretty {
31 serde_json::to_string_pretty(report)?
32 } else {
33 serde_json::to_string(report)?
34 };
35 Ok(json)
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42 use crate::report::ReportMetadata;
43 use chrono::Utc;
44
45 #[test]
46 fn test_json_generation() {
47 let metadata = ReportMetadata {
48 generated_at: Utc::now(),
49 version: "1.0.0".to_string(),
50 data_source: "test".to_string(),
51 thresholds_name: "default".to_string(),
52 records_evaluated: 1000,
53 duration_ms: 500,
54 };
55
56 let report = EvaluationReport::new(metadata, None, None, None, None);
57 let generator = JsonReportGenerator::new(true);
58 let json = generator.generate(&report).unwrap();
59
60 assert!(json.contains("generated_at"));
61 assert!(json.contains("passes"));
62 }
63}