Skip to main content

semdiff_differ_json/
report_json.rs

1use 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}