schemadoc_diff/
diff_own_changes.rs

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