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