Skip to main content

oak_regex/lexer/
token_type.rs

1use oak_core::{TokenType, UniversalTokenRole};
2
3/// Regex token types.
4#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum RegexTokenType {
7    /// End of file.
8    Eof,
9    /// Whitespace.
10    Whitespace,
11    /// Identifier.
12    Identifier,
13    /// Operator.
14    Operator,
15    /// Punctuation.
16    Punctuation,
17    /// Unknown.
18    Unknown,
19}
20
21impl TokenType for RegexTokenType {
22    type Role = UniversalTokenRole;
23    const END_OF_STREAM: Self = Self::Eof;
24
25    fn role(&self) -> Self::Role {
26        match self {
27            Self::Eof => UniversalTokenRole::Eof,
28            Self::Whitespace => UniversalTokenRole::Whitespace,
29            Self::Identifier => UniversalTokenRole::Name,
30            Self::Operator => UniversalTokenRole::Operator,
31            Self::Punctuation => UniversalTokenRole::Punctuation,
32            Self::Unknown => UniversalTokenRole::Error,
33        }
34    }
35}