1pub mod collection;
2pub mod enm;
3pub mod map;
4pub mod set;
5pub mod string;
6
7use crate::Diffable;
8
9#[cfg_attr(feature = "serialize-impl", derive(serde::Serialize))]
10#[derive(Debug, PartialEq, Eq)]
11pub enum Edit<'a, T: Diffable<'a> + ?Sized> {
12 Copy(&'a T),
13 Change(T::Diff),
14}
15
16impl<'a, T: Diffable<'a> + ?Sized> Edit<'a, T> {
17 pub fn is_copy(&self) -> bool {
18 if let Self::Copy(_) = self {
19 true
20 } else {
21 false
22 }
23 }
24
25 pub fn copy(&self) -> Option<&'a T> {
26 if let Self::Copy(value) = self {
27 Some(value)
28 } else {
29 None
30 }
31 }
32
33 pub fn is_change(&self) -> bool {
34 if let Self::Change(_) = self {
35 true
36 } else {
37 false
38 }
39 }
40
41 pub fn change(&self) -> Option<&T::Diff> {
42 if let Self::Change(value_diff) = self {
43 Some(value_diff)
44 } else {
45 None
46 }
47 }
48}
49
50impl<'a, Diff, T: Diffable<'a, Diff = Diff> + 'a> Into<map::Edit<'a, T>> for Edit<'a, T> {
51 fn into(self) -> map::Edit<'a, T> {
52 match self {
53 Self::Copy(value) => map::Edit::Copy(value),
54 Self::Change(diff) => map::Edit::Change(diff),
55 }
56 }
57}