diffus/edit/
string.rs

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