noa_parser/bytes/
token.rs

1use crate::bytes::matchers::match_char;
2use crate::matcher::{Match, MatchSize};
3
4/// The token type
5pub enum Token {
6    /// The "(" character
7    OpenParen,
8    /// The `)` character
9    CloseParen,
10    /// The `,` character
11    Comma,
12    /// The `;` character
13    Semicolon,
14    /// The `:` character
15    Colon,
16    /// The whitespace character
17    Whitespace,
18    /// The `>` character
19    GreaterThan,
20    /// The `<` character
21    LessThan,
22    /// The `!` character
23    Exclamation,
24    /// The `'` character
25    Quote,
26    /// The `"` character
27    DoubleQuote,
28    /// The `=` character
29    Equal,
30    /// The `+` character
31    Plus,
32    /// The `-` character
33    Dash,
34    /// The `/` character
35    Slash,
36    /// The `*` character
37    Star,
38    /// The `%` character
39    Percent,
40    /// The `&` character
41    Ampersand,
42    /// The `|` character
43    Pipe,
44    /// The `^` character
45    Caret,
46    /// The `~` character
47    Tilde,
48    /// The `.` character
49    Dot,
50    /// The `?` character
51    Question,
52    /// The `@` character
53    At,
54    /// The `#` character
55    Hash,
56    /// The `$` character
57    Dollar,
58    /// The `\\` character
59    Backslash,
60    /// The `_` character
61    Underscore,
62    /// The `#` character
63    Sharp,
64}
65
66impl Match<u8> for Token {
67    fn matcher(&self, data: &[u8]) -> (bool, usize) {
68        match self {
69            Token::OpenParen => match_char('(', data),
70            Token::CloseParen => match_char(')', data),
71            Token::Comma => match_char(',', data),
72            Token::Semicolon => match_char(';', data),
73            Token::Colon => match_char(':', data),
74            Token::Whitespace => match_char(' ', data),
75            Token::GreaterThan => match_char('>', data),
76            Token::LessThan => match_char('<', data),
77            Token::Exclamation => match_char('!', data),
78            Token::Quote => match_char('\'', data),
79            Token::DoubleQuote => match_char('"', data),
80            Token::Equal => match_char('=', data),
81            Token::Plus => match_char('+', data),
82            Token::Dash => match_char('-', data),
83            Token::Slash => match_char('/', data),
84            Token::Star => match_char('*', data),
85            Token::Percent => match_char('%', data),
86            Token::Ampersand => match_char('&', data),
87            Token::Pipe => match_char('|', data),
88            Token::Caret => match_char('^', data),
89            Token::Tilde => match_char('~', data),
90            Token::Dot => match_char('.', data),
91            Token::Question => match_char('?', data),
92            Token::At => match_char('@', data),
93            Token::Hash => match_char('#', data),
94            Token::Dollar => match_char('$', data),
95            Token::Backslash => match_char('\\', data),
96            Token::Underscore => match_char('_', data),
97            Token::Sharp => match_char('#', data),
98        }
99    }
100}
101
102impl MatchSize for Token {
103    fn size(&self) -> usize {
104        match self {
105            Token::OpenParen => 1,
106            Token::CloseParen => 1,
107            Token::Comma => 1,
108            Token::Semicolon => 1,
109            Token::Colon => 1,
110            Token::Whitespace => 1,
111            Token::GreaterThan => 1,
112            Token::LessThan => 1,
113            Token::Exclamation => 1,
114            Token::Quote => 1,
115            Token::DoubleQuote => 1,
116            Token::Equal => 1,
117            Token::Plus => 1,
118            Token::Dash => 1,
119            Token::Slash => 1,
120            Token::Star => 1,
121            Token::Percent => 1,
122            Token::Ampersand => 1,
123            Token::Pipe => 1,
124            Token::Caret => 1,
125            Token::Tilde => 1,
126            Token::Dot => 1,
127            Token::Question => 1,
128            Token::At => 1,
129            Token::Hash => 1,
130            Token::Dollar => 1,
131            Token::Backslash => 1,
132            Token::Underscore => 1,
133            Token::Sharp => 1,
134        }
135    }
136}