schemadoc_diff/
diff_own_changes.rs1use crate::core::{DiffResult, MapDiff, VecDiff};
2use crate::diff_result_type::DiffResultType;
3use std::borrow::Cow;
4
5pub trait DiffOwnChanges {
6 fn get_own_changes(&self) -> Vec<(Cow<str>, DiffResultType)>;
7}
8
9impl<T> DiffOwnChanges for DiffResult<T>
10where
11 T: DiffOwnChanges,
12{
13 fn get_own_changes(&self) -> Vec<(Cow<str>, DiffResultType)> {
14 self.get().map_or(vec![], |v| v.get_own_changes())
15 }
16}
17
18impl<T> DiffOwnChanges for VecDiff<T> {
19 fn get_own_changes(&self) -> Vec<(Cow<str>, DiffResultType)> {
20 self.0
21 .iter()
22 .enumerate()
23 .filter_map(|(idx, e)| {
24 if e.is_added() || e.is_removed() {
25 Some((idx.to_string().into(), e.into()))
26 } else {
27 None
28 }
29 })
30 .collect()
31 }
32}
33
34impl<T, R> DiffOwnChanges for MapDiff<T, R> {
35 fn get_own_changes(&self) -> Vec<(Cow<str>, DiffResultType)> {
36 self.0
37 .iter()
38 .filter_map(|(key, e)| {
39 if e.is_added() || e.is_removed() {
40 Some((key.into(), e.into()))
41 } else {
42 None
43 }
44 })
45 .collect()
46 }
47}