1use crate::Diffable;
2
3#[cfg_attr(feature = "serialize-impl", derive(serde::Serialize))]
4#[derive(Debug, PartialEq)]
5pub enum Edit<'a, T: Diffable<'a> + ?Sized> {
6 Copy(&'a T),
7 Insert(&'a T),
8 Remove(&'a T),
9 Change(T::Diff),
10}
11
12impl<'a, T: Diffable<'a> + ?Sized> Edit<'a, T> {
13 pub fn is_insert(&self) -> bool {
23 if let Self::Insert(_) = self {
24 true
25 } else {
26 false
27 }
28 }
29 pub fn is_remove(&self) -> bool {
30 if let Self::Remove(_) = self {
31 true
32 } else {
33 false
34 }
35 }
36 pub fn is_copy(&self) -> bool {
37 if let Self::Copy(_) = self {
38 true
39 } else {
40 false
41 }
42 }
43 pub fn is_change(&self) -> bool {
44 if let Self::Change(_) = self {
45 true
46 } else {
47 false
48 }
49 }
50 pub fn insert(&self) -> Option<&'a T> {
51 if let Self::Insert(value) = self {
52 Some(value)
53 } else {
54 None
55 }
56 }
57 pub fn remove(&self) -> Option<&'a T> {
58 if let Self::Remove(value) = self {
59 Some(value)
60 } else {
61 None
62 }
63 }
64 pub fn change(&self) -> Option<&T::Diff> {
65 if let Self::Change(value_diff) = self {
66 Some(value_diff)
67 } else {
68 None
69 }
70 }
71 pub fn copy(&self) -> Option<&'a T> {
72 if let Self::Copy(value) = self {
73 Some(value)
74 } else {
75 None
76 }
77 }
78}