semdiff_differ_json/
report_summary.rs1use 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}