1use crate::bytes::matchers::match_char;
4use crate::matcher::{Match, MatchSize};
5
6#[derive(Copy, Clone)]
7#[derive(PartialEq, Debug)]
9pub enum Token {
10 OpenParen,
12 CloseParen,
14 Comma,
16 Semicolon,
18 Colon,
20 Whitespace,
22 GreaterThan,
24 LessThan,
26 Exclamation,
28 Quote,
30 DoubleQuote,
32 Equal,
34 Plus,
36 Dash,
38 Slash,
40 Star,
42 Percent,
44 Ampersand,
46 Pipe,
48 Caret,
50 Tilde,
52 Dot,
54 Question,
56 At,
58 Hash,
60 Dollar,
62 Backslash,
64 Underscore,
66 Sharp,
68}
69
70impl Match<u8> for Token {
71 fn matcher(&self, data: &[u8]) -> (bool, usize) {
72 match self {
73 Token::OpenParen => match_char('(', data),
74 Token::CloseParen => match_char(')', data),
75 Token::Comma => match_char(',', data),
76 Token::Semicolon => match_char(';', data),
77 Token::Colon => match_char(':', data),
78 Token::Whitespace => match_char(' ', data),
79 Token::GreaterThan => match_char('>', data),
80 Token::LessThan => match_char('<', data),
81 Token::Exclamation => match_char('!', data),
82 Token::Quote => match_char('\'', data),
83 Token::DoubleQuote => match_char('"', data),
84 Token::Equal => match_char('=', data),
85 Token::Plus => match_char('+', data),
86 Token::Dash => match_char('-', data),
87 Token::Slash => match_char('/', data),
88 Token::Star => match_char('*', data),
89 Token::Percent => match_char('%', data),
90 Token::Ampersand => match_char('&', data),
91 Token::Pipe => match_char('|', data),
92 Token::Caret => match_char('^', data),
93 Token::Tilde => match_char('~', data),
94 Token::Dot => match_char('.', data),
95 Token::Question => match_char('?', data),
96 Token::At => match_char('@', data),
97 Token::Hash => match_char('#', data),
98 Token::Dollar => match_char('$', data),
99 Token::Backslash => match_char('\\', data),
100 Token::Underscore => match_char('_', data),
101 Token::Sharp => match_char('#', data),
102 }
103 }
104}
105
106impl MatchSize for Token {
107 fn size(&self) -> usize {
108 match self {
109 Token::OpenParen => 1,
110 Token::CloseParen => 1,
111 Token::Comma => 1,
112 Token::Semicolon => 1,
113 Token::Colon => 1,
114 Token::Whitespace => 1,
115 Token::GreaterThan => 1,
116 Token::LessThan => 1,
117 Token::Exclamation => 1,
118 Token::Quote => 1,
119 Token::DoubleQuote => 1,
120 Token::Equal => 1,
121 Token::Plus => 1,
122 Token::Dash => 1,
123 Token::Slash => 1,
124 Token::Star => 1,
125 Token::Percent => 1,
126 Token::Ampersand => 1,
127 Token::Pipe => 1,
128 Token::Caret => 1,
129 Token::Tilde => 1,
130 Token::Dot => 1,
131 Token::Question => 1,
132 Token::At => 1,
133 Token::Hash => 1,
134 Token::Dollar => 1,
135 Token::Backslash => 1,
136 Token::Underscore => 1,
137 Token::Sharp => 1,
138 }
139 }
140}