1#[cfg_attr(feature = "serialize-impl", derive(serde::Serialize))]
2#[derive(Debug, Eq, PartialEq)]
3pub enum Edit<'a, T: ?Sized, Diff> {
4 Copy(&'a T),
5 VariantChanged(&'a T, &'a T),
6 AssociatedChanged(Diff),
7}
8
9impl<'a, T: ?Sized, Diff> Edit<'a, T, Diff> {
10 pub fn is_copy(&self) -> bool {
11 if let Self::Copy(_) = self {
12 true
13 } else {
14 false
15 }
16 }
17
18 pub fn is_variant_changed(&self) -> bool {
19 if let Self::VariantChanged(_, _) = self {
20 true
21 } else {
22 false
23 }
24 }
25
26 pub fn is_associated_changed(&self) -> bool {
27 if let Self::AssociatedChanged(_) = self {
28 true
29 } else {
30 false
31 }
32 }
33
34 pub fn variant_changed(&self) -> Option<(&'a T, &'a T)> {
35 if let Self::VariantChanged(left, right) = self {
36 Some((left, right))
37 } else {
38 None
39 }
40 }
41
42 pub fn associated_change(&self) -> Option<&Diff> {
43 if let Self::AssociatedChanged(value) = self {
44 Some(value)
45 } else {
46 None
47 }
48 }
49}