noa_parser/bytes/
token.rs

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