diffus/edit/
collection.rs

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