Skip to main content

moxy_token/
delim.rs

1#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Hash)]
2#[cfg_attr(feature = "serde", derive(serde::Serialize), serde(rename_all = "lowercase"))]
3pub enum Delim {
4    #[default]
5    None,
6    Paren,
7    Brace,
8    Bracket,
9}
10
11impl Delim {
12    #[inline]
13    pub fn from_char(ch: char) -> Option<Self> {
14        match ch {
15            '(' | ')' => Some(Self::Paren),
16            '[' | ']' => Some(Self::Bracket),
17            '{' | '}' => Some(Self::Brace),
18            _ => None,
19        }
20    }
21
22    #[inline]
23    pub fn from_open(ch: char) -> Option<Self> {
24        match ch {
25            '(' => Some(Self::Paren),
26            '[' => Some(Self::Bracket),
27            '{' => Some(Self::Brace),
28            _ => None,
29        }
30    }
31
32    #[inline]
33    pub fn from_close(ch: char) -> Option<Self> {
34        match ch {
35            ')' => Some(Self::Paren),
36            ']' => Some(Self::Bracket),
37            '}' => Some(Self::Brace),
38            _ => None,
39        }
40    }
41
42    #[inline]
43    pub fn as_str(&self) -> &'static str {
44        match self {
45            Self::Paren => "paren",
46            Self::Brace => "brace",
47            Self::Bracket => "bracket",
48            Self::None => "none",
49        }
50    }
51
52    #[inline]
53    pub fn open(&self) -> char {
54        match self {
55            Self::None => ' ',
56            Self::Brace => '{',
57            Self::Bracket => '[',
58            Self::Paren => '(',
59        }
60    }
61
62    #[inline]
63    pub fn close(&self) -> char {
64        match self {
65            Self::None => ' ',
66            Self::Brace => '}',
67            Self::Bracket => ']',
68            Self::Paren => ')',
69        }
70    }
71
72    #[inline]
73    pub fn is_none(&self) -> bool {
74        matches!(self, Self::None)
75    }
76
77    #[inline]
78    pub fn is_brace(&self) -> bool {
79        matches!(self, Self::Brace)
80    }
81
82    #[inline]
83    pub fn is_bracket(&self) -> bool {
84        matches!(self, Self::Bracket)
85    }
86
87    #[inline]
88    pub fn is_paren(&self) -> bool {
89        matches!(self, Self::Paren)
90    }
91}