Skip to main content

semdiff_differ_json/
report_summary.rs

1use crate::{JsonDiff, JsonDiffReporter, is_json_mime, try_into_json};
2use semdiff_core::fs::FileLeaf;
3use semdiff_core::{DetailReporter, MayUnsupported};
4use semdiff_output::summary::SummaryReport;
5use std::convert;
6
7impl<W> DetailReporter<JsonDiff, FileLeaf, SummaryReport<W>> for JsonDiffReporter {
8    type Error = convert::Infallible;
9
10    fn report_unchanged(
11        &self,
12        _name: &str,
13        _diff: &JsonDiff,
14        reporter: &SummaryReport<W>,
15    ) -> Result<MayUnsupported<()>, Self::Error> {
16        reporter.increment_unchanged();
17        Ok(MayUnsupported::Ok(()))
18    }
19
20    fn report_modified(
21        &self,
22        _name: &str,
23        _diff: &JsonDiff,
24        reporter: &SummaryReport<W>,
25    ) -> Result<MayUnsupported<()>, Self::Error> {
26        reporter.increment_modified();
27        Ok(MayUnsupported::Ok(()))
28    }
29
30    fn report_added(
31        &self,
32        _name: &str,
33        data: &FileLeaf,
34        reporter: &SummaryReport<W>,
35    ) -> Result<MayUnsupported<()>, Self::Error> {
36        if !is_json_mime(&data.kind) {
37            return Ok(MayUnsupported::Unsupported);
38        }
39        if try_into_json(&data.content).is_none() {
40            return Ok(MayUnsupported::Unsupported);
41        }
42        reporter.increment_added();
43        Ok(MayUnsupported::Ok(()))
44    }
45
46    fn report_deleted(
47        &self,
48        _name: &str,
49        data: &FileLeaf,
50        reporter: &SummaryReport<W>,
51    ) -> Result<MayUnsupported<()>, Self::Error> {
52        if !is_json_mime(&data.kind) {
53            return Ok(MayUnsupported::Unsupported);
54        }
55        if try_into_json(&data.content).is_none() {
56            return Ok(MayUnsupported::Unsupported);
57        }
58        reporter.increment_deleted();
59        Ok(MayUnsupported::Ok(()))
60    }
61}