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