1use crate::bytes::matchers::match_char;
2use crate::matcher::{Match, MatchSize};
3
4pub enum Token {
6 OpenParen,
8 CloseParen,
10 Comma,
12 Semicolon,
14 Colon,
16 Whitespace,
18 GreaterThan,
20 LessThan,
22 Exclamation,
24 Quote,
26 DoubleQuote,
28 Equal,
30 Plus,
32 Dash,
34 Slash,
36 Star,
38 Percent,
40 Ampersand,
42 Pipe,
44 Caret,
46 Tilde,
48 Dot,
50 Question,
52 At,
54 Hash,
56 Dollar,
58 Backslash,
60 Underscore,
62 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}