1use oak_core::{ElementType, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2use std::fmt::Display;
3
4pub type RegexToken = Token<RegexSyntaxKind>;
5
6#[allow(missing_docs)]
7#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, serde::Serialize, serde::Deserialize)]
8#[repr(u16)]
9pub enum RegexSyntaxKind {
10 TOMBSTONE,
12 Eof,
13
14 RegexPattern,
16
17 Pipe,
19
20 Question,
22 Star,
23 Plus,
24 LBrace,
25 RBrace,
26 Comma,
27
28 LParen,
30 RParen,
31
32 LBrack,
34 RBrack,
35 Hat,
36 Dash,
37
38 Dollar,
40
41 Dot,
43
44 Backslash,
46
47 Character,
49 Digit,
50 Whitespace,
51
52 Error,
54 Comment,
55}
56
57impl Display for RegexSyntaxKind {
58 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
59 write!(f, "{:?}", self)
60 }
61}
62
63impl TokenType for RegexSyntaxKind {
64 const END_OF_STREAM: Self = Self::Eof;
65 type Role = UniversalTokenRole;
66
67 fn role(&self) -> Self::Role {
68 match self {
69 RegexSyntaxKind::Whitespace => UniversalTokenRole::Whitespace,
70 RegexSyntaxKind::Comment => UniversalTokenRole::Comment,
71 Self::Eof => UniversalTokenRole::Eof,
72 _ => UniversalTokenRole::None,
73 }
74 }
75}
76
77impl ElementType for RegexSyntaxKind {
78 type Role = UniversalElementRole;
79
80 fn role(&self) -> Self::Role {
81 match self {
82 Self::Error => UniversalElementRole::Error,
83 _ => UniversalElementRole::None,
84 }
85 }
86}