diffus/edit/
set.rs

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}
10
11impl<'a, T: Diffable<'a> + ?Sized> Edit<'a, T> {
12    pub fn is_copy(&self) -> bool {
13        if let Self::Copy(_) = self {
14            true
15        } else {
16            false
17        }
18    }
19    //
20    // Checks if the edit is an insert.
21    //
22    // # Examples
23    //
24    // ```
25    // assert_eq!(Edit::Insert(&2).is_insert(), true);
26    // assert_eq!(Edit::Remove.is_insert(), false);
27    // ```
28    pub fn is_insert(&self) -> bool {
29        if let Self::Insert(_) = self {
30            true
31        } else {
32            false
33        }
34    }
35    pub fn is_remove(&self) -> bool {
36        if let Self::Remove(_) = self {
37            true
38        } else {
39            false
40        }
41    }
42    pub fn copy(&self) -> Option<&'a T> {
43        if let Self::Copy(value) = self {
44            Some(value)
45        } else {
46            None
47        }
48    }
49    pub fn insert(&self) -> Option<&'a T> {
50        if let Self::Insert(value) = self {
51            Some(value)
52        } else {
53            None
54        }
55    }
56    pub fn remove(&self) -> Option<&'a T> {
57        if let Self::Remove(value) = self {
58            Some(value)
59        } else {
60            None
61        }
62    }
63}