pub struct Uri {
state: u32,
}
impl Uri {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'A'..='Z' | 'a'..='z' => 1u32,
_ => return false,
},
1u32 => match token {
'+' | '-'..='.' | '0'..='9' | 'A'..='Z' | 'a'..='z' => 1u32,
':' => 2u32,
_ => return false,
},
2u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 3u32,
'#' => 4u32,
'%' => 5u32,
'/' => 6u32,
_ => return false,
},
3u32 => match token {
'!' | '$' | '&'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 3u32,
'#' => 4u32,
'%' => 5u32,
_ => return false,
},
4u32 => match token {
'!' | '$' | '&'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 4u32,
'%' => 7u32,
_ => return false,
},
5u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 8u32,
_ => return false,
},
6u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 3u32,
'#' => 4u32,
'%' => 5u32,
'/' => 9u32,
_ => return false,
},
7u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 10u32,
_ => return false,
},
8u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 3u32,
_ => return false,
},
9u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
'0' => 13u32,
'1' => 14u32,
'2' => 15u32,
'3'..='9' => 16u32,
':' => 17u32,
'@' => 18u32,
'[' => 19u32,
_ => return false,
},
10u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 4u32,
_ => return false,
},
11u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
12u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 20u32,
_ => return false,
},
13u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 21u32,
'/' | '?' => 3u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
14u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 21u32,
'/' | '?' => 3u32,
'0'..='9' => 16u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
15u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 21u32,
'/' | '?' => 3u32,
'0'..='4' => 16u32,
'5' => 22u32,
'6'..='9' => 13u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
16u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 21u32,
'/' | '?' => 3u32,
'0'..='9' => 13u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
17u32 => match token {
'!' | '$' | '&'..='.' | ':'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
23u32
}
'#' => 4u32,
'%' => 24u32,
'/' | '?' => 3u32,
'0'..='9' => 17u32,
'@' => 18u32,
_ => return false,
},
18u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
'0' => 27u32,
'1' => 28u32,
'2' => 29u32,
'3'..='9' => 30u32,
':' => 31u32,
'[' => 19u32,
_ => return false,
},
19u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 32u32,
':' => 33u32,
'V' | 'v' => 34u32,
_ => return false,
},
20u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 11u32,
_ => return false,
},
21u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
'0' => 205u32,
'1' => 206u32,
'2' => 207u32,
'3'..='9' => 208u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
22u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 21u32,
'/' | '?' => 3u32,
'0'..='5' => 13u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
23u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
23u32
}
'%' => 24u32,
'@' => 18u32,
_ => return false,
},
24u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 204u32,
_ => return false,
},
25u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
':' => 31u32,
_ => return false,
},
26u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 35u32,
_ => return false,
},
27u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 36u32,
'/' | '?' => 3u32,
':' => 31u32,
_ => return false,
},
28u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 36u32,
'/' | '?' => 3u32,
'0'..='9' => 30u32,
':' => 31u32,
_ => return false,
},
29u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 36u32,
'/' | '?' => 3u32,
'0'..='4' => 30u32,
'5' => 37u32,
'6'..='9' => 27u32,
':' => 31u32,
_ => return false,
},
30u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 36u32,
'/' | '?' => 3u32,
'0'..='9' => 27u32,
':' => 31u32,
_ => return false,
},
31u32 => match token {
'#' => 4u32,
'/' | '?' => 3u32,
'0'..='9' => 31u32,
_ => return false,
},
32u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 38u32,
':' => 39u32,
_ => return false,
},
33u32 => match token {
':' => 40u32,
_ => return false,
},
34u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 41u32,
_ => return false,
},
35u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 25u32,
_ => return false,
},
36u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
'0' => 190u32,
'1' => 191u32,
'2' => 192u32,
'3'..='9' => 193u32,
':' => 31u32,
_ => return false,
},
37u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 36u32,
'/' | '?' => 3u32,
'0'..='5' => 27u32,
':' => 31u32,
_ => return false,
},
38u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 45u32,
':' => 39u32,
_ => return false,
},
39u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 46u32,
':' => 47u32,
_ => return false,
},
40u32 => match token {
'0' => 177u32,
'1' => 178u32,
'2' => 179u32,
'3'..='9' => 180u32,
'A'..='F' | 'a'..='f' => 181u32,
']' => 44u32,
_ => return false,
},
41u32 => match token {
'.' => 42u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 41u32,
_ => return false,
},
42u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
43u32
}
_ => return false,
},
43u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
43u32
}
']' => 44u32,
_ => return false,
},
44u32 => match token {
'#' => 4u32,
'/' | '?' => 3u32,
':' => 31u32,
_ => return false,
},
45u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 48u32,
':' => 39u32,
_ => return false,
},
46u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 49u32,
':' => 50u32,
_ => return false,
},
47u32 => match token {
'0' => 51u32,
'1' => 52u32,
'2' => 53u32,
'3'..='9' => 54u32,
'A'..='F' | 'a'..='f' => 55u32,
']' => 44u32,
_ => return false,
},
48u32 => match token {
':' => 39u32,
_ => return false,
},
49u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 56u32,
':' => 50u32,
_ => return false,
},
50u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 57u32,
':' => 58u32,
_ => return false,
},
51u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 169u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
52u32 => match token {
'.' => 108u32,
'0'..='9' => 171u32,
':' => 170u32,
'A'..='F' | 'a'..='f' => 169u32,
']' => 44u32,
_ => return false,
},
53u32 => match token {
'.' => 108u32,
'0'..='4' => 171u32,
'5' => 172u32,
'6'..='9' => 173u32,
':' => 170u32,
'A'..='F' | 'a'..='f' => 169u32,
']' => 44u32,
_ => return false,
},
54u32 => match token {
'.' => 108u32,
'0'..='9' => 173u32,
':' => 170u32,
'A'..='F' | 'a'..='f' => 169u32,
']' => 44u32,
_ => return false,
},
55u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 169u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
56u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 59u32,
':' => 50u32,
_ => return false,
},
57u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 60u32,
':' => 61u32,
_ => return false,
},
58u32 => match token {
'0' => 62u32,
'1' => 63u32,
'2' => 64u32,
'3'..='9' => 65u32,
'A'..='F' | 'a'..='f' => 66u32,
']' => 44u32,
_ => return false,
},
59u32 => match token {
':' => 50u32,
_ => return false,
},
60u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 67u32,
':' => 61u32,
_ => return false,
},
61u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 68u32,
':' => 69u32,
_ => return false,
},
62u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 161u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
63u32 => match token {
'.' => 108u32,
'0'..='9' => 163u32,
':' => 162u32,
'A'..='F' | 'a'..='f' => 161u32,
']' => 44u32,
_ => return false,
},
64u32 => match token {
'.' => 108u32,
'0'..='4' => 163u32,
'5' => 164u32,
'6'..='9' => 165u32,
':' => 162u32,
'A'..='F' | 'a'..='f' => 161u32,
']' => 44u32,
_ => return false,
},
65u32 => match token {
'.' => 108u32,
'0'..='9' => 165u32,
':' => 162u32,
'A'..='F' | 'a'..='f' => 161u32,
']' => 44u32,
_ => return false,
},
66u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 161u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
67u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 70u32,
':' => 61u32,
_ => return false,
},
68u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 71u32,
':' => 72u32,
_ => return false,
},
69u32 => match token {
'0' => 73u32,
'1' => 74u32,
'2' => 75u32,
'3'..='9' => 76u32,
'A'..='F' | 'a'..='f' => 77u32,
']' => 44u32,
_ => return false,
},
70u32 => match token {
':' => 61u32,
_ => return false,
},
71u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 78u32,
':' => 72u32,
_ => return false,
},
72u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 79u32,
':' => 80u32,
_ => return false,
},
73u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 153u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
74u32 => match token {
'.' => 108u32,
'0'..='9' => 155u32,
':' => 154u32,
'A'..='F' | 'a'..='f' => 153u32,
']' => 44u32,
_ => return false,
},
75u32 => match token {
'.' => 108u32,
'0'..='4' => 155u32,
'5' => 156u32,
'6'..='9' => 157u32,
':' => 154u32,
'A'..='F' | 'a'..='f' => 153u32,
']' => 44u32,
_ => return false,
},
76u32 => match token {
'.' => 108u32,
'0'..='9' => 157u32,
':' => 154u32,
'A'..='F' | 'a'..='f' => 153u32,
']' => 44u32,
_ => return false,
},
77u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 153u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
78u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 81u32,
':' => 72u32,
_ => return false,
},
79u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 82u32,
':' => 83u32,
_ => return false,
},
80u32 => match token {
'0' => 84u32,
'1' => 85u32,
'2' => 86u32,
'3'..='9' => 87u32,
'A'..='F' | 'a'..='f' => 88u32,
']' => 44u32,
_ => return false,
},
81u32 => match token {
':' => 72u32,
_ => return false,
},
82u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 89u32,
':' => 83u32,
_ => return false,
},
83u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 90u32,
':' => 91u32,
_ => return false,
},
84u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
85u32 => match token {
'.' => 108u32,
'0'..='9' => 147u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 44u32,
_ => return false,
},
86u32 => match token {
'.' => 108u32,
'0'..='4' => 147u32,
'5' => 148u32,
'6'..='9' => 149u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 44u32,
_ => return false,
},
87u32 => match token {
'.' => 108u32,
'0'..='9' => 149u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 44u32,
_ => return false,
},
88u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
89u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 92u32,
':' => 83u32,
_ => return false,
},
90u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 93u32,
':' => 94u32,
_ => return false,
},
91u32 => match token {
'0' => 95u32,
'1' => 96u32,
'2' => 97u32,
'3'..='9' => 98u32,
'A'..='F' | 'a'..='f' => 99u32,
']' => 44u32,
_ => return false,
},
92u32 => match token {
':' => 83u32,
_ => return false,
},
93u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 100u32,
':' => 94u32,
_ => return false,
},
94u32 => match token {
'0' => 101u32,
'1' => 102u32,
'2' => 103u32,
'3'..='9' => 104u32,
':' => 105u32,
'A'..='F' | 'a'..='f' => 106u32,
_ => return false,
},
95u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 137u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
96u32 => match token {
'.' => 108u32,
'0'..='9' => 139u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 137u32,
']' => 44u32,
_ => return false,
},
97u32 => match token {
'.' => 108u32,
'0'..='4' => 139u32,
'5' => 140u32,
'6'..='9' => 141u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 137u32,
']' => 44u32,
_ => return false,
},
98u32 => match token {
'.' => 108u32,
'0'..='9' => 141u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 137u32,
']' => 44u32,
_ => return false,
},
99u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 137u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
100u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 107u32,
':' => 94u32,
_ => return false,
},
101u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 109u32,
':' => 110u32,
_ => return false,
},
102u32 => match token {
'.' => 108u32,
'0'..='9' => 111u32,
':' => 110u32,
'A'..='F' | 'a'..='f' => 109u32,
_ => return false,
},
103u32 => match token {
'.' => 108u32,
'0'..='4' => 111u32,
'5' => 112u32,
'6'..='9' => 113u32,
':' => 110u32,
'A'..='F' | 'a'..='f' => 109u32,
_ => return false,
},
104u32 => match token {
'.' => 108u32,
'0'..='9' => 113u32,
':' => 110u32,
'A'..='F' | 'a'..='f' => 109u32,
_ => return false,
},
105u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 114u32,
']' => 44u32,
_ => return false,
},
106u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 109u32,
':' => 110u32,
_ => return false,
},
107u32 => match token {
':' => 94u32,
_ => return false,
},
108u32 => match token {
'0' => 120u32,
'1' => 121u32,
'2' => 122u32,
'3'..='9' => 123u32,
_ => return false,
},
109u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 115u32,
':' => 110u32,
_ => return false,
},
110u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 114u32,
':' => 116u32,
_ => return false,
},
111u32 => match token {
'.' => 108u32,
'0'..='9' => 136u32,
':' => 110u32,
'A'..='F' | 'a'..='f' => 115u32,
_ => return false,
},
112u32 => match token {
'.' => 108u32,
'0'..='5' => 136u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 115u32,
':' => 110u32,
_ => return false,
},
113u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 115u32,
':' => 110u32,
_ => return false,
},
114u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
']' => 44u32,
_ => return false,
},
115u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 117u32,
':' => 110u32,
_ => return false,
},
116u32 => match token {
']' => 44u32,
_ => return false,
},
117u32 => match token {
':' => 110u32,
_ => return false,
},
118u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 119u32,
']' => 44u32,
_ => return false,
},
119u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 116u32,
']' => 44u32,
_ => return false,
},
120u32 => match token {
'.' => 124u32,
_ => return false,
},
121u32 => match token {
'.' => 124u32,
'0'..='9' => 123u32,
_ => return false,
},
122u32 => match token {
'.' => 124u32,
'0'..='4' => 123u32,
'5' => 125u32,
'6'..='9' => 120u32,
_ => return false,
},
123u32 => match token {
'.' => 124u32,
'0'..='9' => 120u32,
_ => return false,
},
124u32 => match token {
'0' => 126u32,
'1' => 127u32,
'2' => 128u32,
'3'..='9' => 129u32,
_ => return false,
},
125u32 => match token {
'.' => 124u32,
'0'..='5' => 120u32,
_ => return false,
},
126u32 => match token {
'.' => 130u32,
_ => return false,
},
127u32 => match token {
'.' => 130u32,
'0'..='9' => 129u32,
_ => return false,
},
128u32 => match token {
'.' => 130u32,
'0'..='4' => 129u32,
'5' => 131u32,
'6'..='9' => 126u32,
_ => return false,
},
129u32 => match token {
'.' => 130u32,
'0'..='9' => 126u32,
_ => return false,
},
130u32 => match token {
'0' => 116u32,
'1' => 132u32,
'2' => 133u32,
'3'..='9' => 134u32,
_ => return false,
},
131u32 => match token {
'.' => 130u32,
'0'..='5' => 126u32,
_ => return false,
},
132u32 => match token {
'0'..='9' => 134u32,
']' => 44u32,
_ => return false,
},
133u32 => match token {
'0'..='4' => 134u32,
'5' => 135u32,
'6'..='9' => 116u32,
']' => 44u32,
_ => return false,
},
134u32 => match token {
'0'..='9' => 116u32,
']' => 44u32,
_ => return false,
},
135u32 => match token {
'0'..='5' => 116u32,
']' => 44u32,
_ => return false,
},
136u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 117u32,
':' => 110u32,
_ => return false,
},
137u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 142u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
138u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 114u32,
_ => return false,
},
139u32 => match token {
'.' => 108u32,
'0'..='9' => 144u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 142u32,
']' => 44u32,
_ => return false,
},
140u32 => match token {
'.' => 108u32,
'0'..='5' => 144u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 142u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
141u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 142u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
142u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 143u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
143u32 => match token {
':' => 138u32,
']' => 44u32,
_ => return false,
},
144u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 143u32,
':' => 138u32,
']' => 44u32,
_ => return false,
},
145u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 150u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
146u32 => match token {
'0' => 95u32,
'1' => 96u32,
'2' => 97u32,
'3'..='9' => 98u32,
'A'..='F' | 'a'..='f' => 99u32,
_ => return false,
},
147u32 => match token {
'.' => 108u32,
'0'..='9' => 152u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 150u32,
']' => 44u32,
_ => return false,
},
148u32 => match token {
'.' => 108u32,
'0'..='5' => 152u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 150u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
149u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 150u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
150u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 151u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
151u32 => match token {
':' => 146u32,
']' => 44u32,
_ => return false,
},
152u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 151u32,
':' => 146u32,
']' => 44u32,
_ => return false,
},
153u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 158u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
154u32 => match token {
'0' => 84u32,
'1' => 85u32,
'2' => 86u32,
'3'..='9' => 87u32,
'A'..='F' | 'a'..='f' => 88u32,
_ => return false,
},
155u32 => match token {
'.' => 108u32,
'0'..='9' => 160u32,
':' => 154u32,
'A'..='F' | 'a'..='f' => 158u32,
']' => 44u32,
_ => return false,
},
156u32 => match token {
'.' => 108u32,
'0'..='5' => 160u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 158u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
157u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 158u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
158u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 159u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
159u32 => match token {
':' => 154u32,
']' => 44u32,
_ => return false,
},
160u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 159u32,
':' => 154u32,
']' => 44u32,
_ => return false,
},
161u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 166u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
162u32 => match token {
'0' => 73u32,
'1' => 74u32,
'2' => 75u32,
'3'..='9' => 76u32,
'A'..='F' | 'a'..='f' => 77u32,
_ => return false,
},
163u32 => match token {
'.' => 108u32,
'0'..='9' => 168u32,
':' => 162u32,
'A'..='F' | 'a'..='f' => 166u32,
']' => 44u32,
_ => return false,
},
164u32 => match token {
'.' => 108u32,
'0'..='5' => 168u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 166u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
165u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 166u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
166u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 167u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
167u32 => match token {
':' => 162u32,
']' => 44u32,
_ => return false,
},
168u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 167u32,
':' => 162u32,
']' => 44u32,
_ => return false,
},
169u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 174u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
170u32 => match token {
'0' => 62u32,
'1' => 63u32,
'2' => 64u32,
'3'..='9' => 65u32,
'A'..='F' | 'a'..='f' => 66u32,
_ => return false,
},
171u32 => match token {
'.' => 108u32,
'0'..='9' => 176u32,
':' => 170u32,
'A'..='F' | 'a'..='f' => 174u32,
']' => 44u32,
_ => return false,
},
172u32 => match token {
'.' => 108u32,
'0'..='5' => 176u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 174u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
173u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 174u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
174u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 175u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
175u32 => match token {
':' => 170u32,
']' => 44u32,
_ => return false,
},
176u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 175u32,
':' => 170u32,
']' => 44u32,
_ => return false,
},
177u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 182u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
178u32 => match token {
'.' => 108u32,
'0'..='9' => 184u32,
':' => 183u32,
'A'..='F' | 'a'..='f' => 182u32,
']' => 44u32,
_ => return false,
},
179u32 => match token {
'.' => 108u32,
'0'..='4' => 184u32,
'5' => 185u32,
'6'..='9' => 186u32,
':' => 183u32,
'A'..='F' | 'a'..='f' => 182u32,
']' => 44u32,
_ => return false,
},
180u32 => match token {
'.' => 108u32,
'0'..='9' => 186u32,
':' => 183u32,
'A'..='F' | 'a'..='f' => 182u32,
']' => 44u32,
_ => return false,
},
181u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 182u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
182u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 187u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
183u32 => match token {
'0' => 51u32,
'1' => 52u32,
'2' => 53u32,
'3'..='9' => 54u32,
'A'..='F' | 'a'..='f' => 55u32,
_ => return false,
},
184u32 => match token {
'.' => 108u32,
'0'..='9' => 189u32,
':' => 183u32,
'A'..='F' | 'a'..='f' => 187u32,
']' => 44u32,
_ => return false,
},
185u32 => match token {
'.' => 108u32,
'0'..='5' => 189u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 187u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
186u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 187u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
187u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 188u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
188u32 => match token {
':' => 183u32,
']' => 44u32,
_ => return false,
},
189u32 => match token {
'.' => 108u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 188u32,
':' => 183u32,
']' => 44u32,
_ => return false,
},
190u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 194u32,
'/' | '?' => 3u32,
':' => 31u32,
_ => return false,
},
191u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 194u32,
'/' | '?' => 3u32,
'0'..='9' => 193u32,
':' => 31u32,
_ => return false,
},
192u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 194u32,
'/' | '?' => 3u32,
'0'..='4' => 193u32,
'5' => 195u32,
'6'..='9' => 190u32,
':' => 31u32,
_ => return false,
},
193u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 194u32,
'/' | '?' => 3u32,
'0'..='9' => 190u32,
':' => 31u32,
_ => return false,
},
194u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
'0' => 196u32,
'1' => 197u32,
'2' => 198u32,
'3'..='9' => 199u32,
':' => 31u32,
_ => return false,
},
195u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 194u32,
'/' | '?' => 3u32,
'0'..='5' => 190u32,
':' => 31u32,
_ => return false,
},
196u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 200u32,
'/' | '?' => 3u32,
':' => 31u32,
_ => return false,
},
197u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 200u32,
'/' | '?' => 3u32,
'0'..='9' => 199u32,
':' => 31u32,
_ => return false,
},
198u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 200u32,
'/' | '?' => 3u32,
'0'..='4' => 199u32,
'5' => 201u32,
'6'..='9' => 196u32,
':' => 31u32,
_ => return false,
},
199u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 200u32,
'/' | '?' => 3u32,
'0'..='9' => 196u32,
':' => 31u32,
_ => return false,
},
200u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
'2' => 202u32,
':' => 31u32,
_ => return false,
},
201u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'.' => 200u32,
'/' | '?' => 3u32,
'0'..='5' => 196u32,
':' => 31u32,
_ => return false,
},
202u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
'5' => 203u32,
':' => 31u32,
_ => return false,
},
203u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 25u32,
'#' => 4u32,
'%' => 26u32,
'/' | '?' => 3u32,
':' => 31u32,
_ => return false,
},
204u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 23u32,
_ => return false,
},
205u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 209u32,
'/' | '?' => 3u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
206u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 209u32,
'/' | '?' => 3u32,
'0'..='9' => 208u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
207u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 209u32,
'/' | '?' => 3u32,
'0'..='4' => 208u32,
'5' => 210u32,
'6'..='9' => 205u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
208u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 209u32,
'/' | '?' => 3u32,
'0'..='9' => 205u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
209u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
'0' => 211u32,
'1' => 212u32,
'2' => 213u32,
'3'..='9' => 214u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
210u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 209u32,
'/' | '?' => 3u32,
'0'..='5' => 205u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
211u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 215u32,
'/' | '?' => 3u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
212u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 215u32,
'/' | '?' => 3u32,
'0'..='9' => 214u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
213u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 215u32,
'/' | '?' => 3u32,
'0'..='4' => 214u32,
'5' => 216u32,
'6'..='9' => 211u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
214u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 215u32,
'/' | '?' => 3u32,
'0'..='9' => 211u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
215u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
'2' => 217u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
216u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'.' => 215u32,
'/' | '?' => 3u32,
'0'..='5' => 211u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
217u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
'5' => 218u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
218u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 11u32,
'#' => 4u32,
'%' => 12u32,
'/' | '?' => 3u32,
':' => 17u32,
'@' => 18u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(
self.state,
2u32 | 3u32
| 4u32 | 6u32
| 9u32 | 11u32
| 13u32 | 14u32
| 15u32 | 16u32
| 17u32 | 18u32
| 21u32 | 22u32
| 25u32 | 27u32
| 28u32 | 29u32
| 30u32 | 31u32
| 36u32 | 37u32
| 44u32 | 190u32
| 191u32 | 192u32
| 193u32 | 194u32
| 195u32 | 196u32
| 197u32 | 198u32
| 199u32 | 200u32
| 201u32 | 202u32
| 203u32 | 205u32
| 206u32 | 207u32
| 208u32 | 209u32
| 210u32 | 211u32
| 212u32 | 213u32
| 214u32 | 215u32
| 216u32 | 217u32
| 218u32
)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct UriRef {
state: u32,
}
impl UriRef {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..='.' | '0'..='9' | ';' | '=' | '@' | '_' | '~' => 1u32,
'#' => 2u32,
'%' => 3u32,
'/' => 4u32,
'?' => 5u32,
'A'..='Z' | 'a'..='z' => 6u32,
_ => return false,
},
1u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| '@'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'#' => 2u32,
'%' => 3u32,
'/' | '?' => 5u32,
_ => return false,
},
2u32 => match token {
'!' | '$' | '&'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 2u32,
'%' => 7u32,
_ => return false,
},
3u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 8u32,
_ => return false,
},
4u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 5u32,
'#' => 2u32,
'%' => 9u32,
'/' => 10u32,
_ => return false,
},
5u32 => match token {
'!' | '$' | '&'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 5u32,
'#' => 2u32,
'%' => 9u32,
_ => return false,
},
6u32 => match token {
'!' | '$' | '&'..='*' | ',' | ';' | '=' | '@' | '_' | '~' => 1u32,
'#' => 2u32,
'%' => 3u32,
'+' | '-'..='.' | '0'..='9' | 'A'..='Z' | 'a'..='z' => 6u32,
'/' | '?' => 5u32,
':' => 11u32,
_ => return false,
},
7u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 13u32,
_ => return false,
},
8u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 1u32,
_ => return false,
},
9u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 12u32,
_ => return false,
},
10u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
'0' => 16u32,
'1' => 17u32,
'2' => 18u32,
'3'..='9' => 19u32,
':' => 20u32,
'@' => 21u32,
'[' => 22u32,
_ => return false,
},
11u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 5u32,
'#' => 2u32,
'%' => 9u32,
'/' => 4u32,
_ => return false,
},
12u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 5u32,
_ => return false,
},
13u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 2u32,
_ => return false,
},
14u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
15u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 23u32,
_ => return false,
},
16u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 24u32,
'/' | '?' => 5u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
17u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 24u32,
'/' | '?' => 5u32,
'0'..='9' => 19u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
18u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 24u32,
'/' | '?' => 5u32,
'0'..='4' => 19u32,
'5' => 25u32,
'6'..='9' => 16u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
19u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 24u32,
'/' | '?' => 5u32,
'0'..='9' => 16u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
20u32 => match token {
'!' | '$' | '&'..='.' | ':'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
26u32
}
'#' => 2u32,
'%' => 27u32,
'/' | '?' => 5u32,
'0'..='9' => 20u32,
'@' => 21u32,
_ => return false,
},
21u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
'0' => 30u32,
'1' => 31u32,
'2' => 32u32,
'3'..='9' => 33u32,
':' => 34u32,
'[' => 22u32,
_ => return false,
},
22u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 35u32,
':' => 36u32,
'V' | 'v' => 37u32,
_ => return false,
},
23u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 14u32,
_ => return false,
},
24u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
'0' => 208u32,
'1' => 209u32,
'2' => 210u32,
'3'..='9' => 211u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
25u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 24u32,
'/' | '?' => 5u32,
'0'..='5' => 16u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
26u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
26u32
}
'%' => 27u32,
'@' => 21u32,
_ => return false,
},
27u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 207u32,
_ => return false,
},
28u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
':' => 34u32,
_ => return false,
},
29u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 38u32,
_ => return false,
},
30u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 39u32,
'/' | '?' => 5u32,
':' => 34u32,
_ => return false,
},
31u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 39u32,
'/' | '?' => 5u32,
'0'..='9' => 33u32,
':' => 34u32,
_ => return false,
},
32u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 39u32,
'/' | '?' => 5u32,
'0'..='4' => 33u32,
'5' => 40u32,
'6'..='9' => 30u32,
':' => 34u32,
_ => return false,
},
33u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 39u32,
'/' | '?' => 5u32,
'0'..='9' => 30u32,
':' => 34u32,
_ => return false,
},
34u32 => match token {
'#' => 2u32,
'/' | '?' => 5u32,
'0'..='9' => 34u32,
_ => return false,
},
35u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 41u32,
':' => 42u32,
_ => return false,
},
36u32 => match token {
':' => 43u32,
_ => return false,
},
37u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 44u32,
_ => return false,
},
38u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 28u32,
_ => return false,
},
39u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
'0' => 193u32,
'1' => 194u32,
'2' => 195u32,
'3'..='9' => 196u32,
':' => 34u32,
_ => return false,
},
40u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 39u32,
'/' | '?' => 5u32,
'0'..='5' => 30u32,
':' => 34u32,
_ => return false,
},
41u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 48u32,
':' => 42u32,
_ => return false,
},
42u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 49u32,
':' => 50u32,
_ => return false,
},
43u32 => match token {
'0' => 180u32,
'1' => 181u32,
'2' => 182u32,
'3'..='9' => 183u32,
'A'..='F' | 'a'..='f' => 184u32,
']' => 47u32,
_ => return false,
},
44u32 => match token {
'.' => 45u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 44u32,
_ => return false,
},
45u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
46u32
}
_ => return false,
},
46u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
46u32
}
']' => 47u32,
_ => return false,
},
47u32 => match token {
'#' => 2u32,
'/' | '?' => 5u32,
':' => 34u32,
_ => return false,
},
48u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 51u32,
':' => 42u32,
_ => return false,
},
49u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 52u32,
':' => 53u32,
_ => return false,
},
50u32 => match token {
'0' => 54u32,
'1' => 55u32,
'2' => 56u32,
'3'..='9' => 57u32,
'A'..='F' | 'a'..='f' => 58u32,
']' => 47u32,
_ => return false,
},
51u32 => match token {
':' => 42u32,
_ => return false,
},
52u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 59u32,
':' => 53u32,
_ => return false,
},
53u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 60u32,
':' => 61u32,
_ => return false,
},
54u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 172u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
55u32 => match token {
'.' => 111u32,
'0'..='9' => 174u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 172u32,
']' => 47u32,
_ => return false,
},
56u32 => match token {
'.' => 111u32,
'0'..='4' => 174u32,
'5' => 175u32,
'6'..='9' => 176u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 172u32,
']' => 47u32,
_ => return false,
},
57u32 => match token {
'.' => 111u32,
'0'..='9' => 176u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 172u32,
']' => 47u32,
_ => return false,
},
58u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 172u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
59u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 62u32,
':' => 53u32,
_ => return false,
},
60u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 63u32,
':' => 64u32,
_ => return false,
},
61u32 => match token {
'0' => 65u32,
'1' => 66u32,
'2' => 67u32,
'3'..='9' => 68u32,
'A'..='F' | 'a'..='f' => 69u32,
']' => 47u32,
_ => return false,
},
62u32 => match token {
':' => 53u32,
_ => return false,
},
63u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 70u32,
':' => 64u32,
_ => return false,
},
64u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 71u32,
':' => 72u32,
_ => return false,
},
65u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
66u32 => match token {
'.' => 111u32,
'0'..='9' => 166u32,
':' => 165u32,
'A'..='F' | 'a'..='f' => 164u32,
']' => 47u32,
_ => return false,
},
67u32 => match token {
'.' => 111u32,
'0'..='4' => 166u32,
'5' => 167u32,
'6'..='9' => 168u32,
':' => 165u32,
'A'..='F' | 'a'..='f' => 164u32,
']' => 47u32,
_ => return false,
},
68u32 => match token {
'.' => 111u32,
'0'..='9' => 168u32,
':' => 165u32,
'A'..='F' | 'a'..='f' => 164u32,
']' => 47u32,
_ => return false,
},
69u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
70u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 73u32,
':' => 64u32,
_ => return false,
},
71u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 74u32,
':' => 75u32,
_ => return false,
},
72u32 => match token {
'0' => 76u32,
'1' => 77u32,
'2' => 78u32,
'3'..='9' => 79u32,
'A'..='F' | 'a'..='f' => 80u32,
']' => 47u32,
_ => return false,
},
73u32 => match token {
':' => 64u32,
_ => return false,
},
74u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 81u32,
':' => 75u32,
_ => return false,
},
75u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 82u32,
':' => 83u32,
_ => return false,
},
76u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 156u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
77u32 => match token {
'.' => 111u32,
'0'..='9' => 158u32,
':' => 157u32,
'A'..='F' | 'a'..='f' => 156u32,
']' => 47u32,
_ => return false,
},
78u32 => match token {
'.' => 111u32,
'0'..='4' => 158u32,
'5' => 159u32,
'6'..='9' => 160u32,
':' => 157u32,
'A'..='F' | 'a'..='f' => 156u32,
']' => 47u32,
_ => return false,
},
79u32 => match token {
'.' => 111u32,
'0'..='9' => 160u32,
':' => 157u32,
'A'..='F' | 'a'..='f' => 156u32,
']' => 47u32,
_ => return false,
},
80u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 156u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
81u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 84u32,
':' => 75u32,
_ => return false,
},
82u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 85u32,
':' => 86u32,
_ => return false,
},
83u32 => match token {
'0' => 87u32,
'1' => 88u32,
'2' => 89u32,
'3'..='9' => 90u32,
'A'..='F' | 'a'..='f' => 91u32,
']' => 47u32,
_ => return false,
},
84u32 => match token {
':' => 75u32,
_ => return false,
},
85u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 92u32,
':' => 86u32,
_ => return false,
},
86u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 93u32,
':' => 94u32,
_ => return false,
},
87u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 148u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
88u32 => match token {
'.' => 111u32,
'0'..='9' => 150u32,
':' => 149u32,
'A'..='F' | 'a'..='f' => 148u32,
']' => 47u32,
_ => return false,
},
89u32 => match token {
'.' => 111u32,
'0'..='4' => 150u32,
'5' => 151u32,
'6'..='9' => 152u32,
':' => 149u32,
'A'..='F' | 'a'..='f' => 148u32,
']' => 47u32,
_ => return false,
},
90u32 => match token {
'.' => 111u32,
'0'..='9' => 152u32,
':' => 149u32,
'A'..='F' | 'a'..='f' => 148u32,
']' => 47u32,
_ => return false,
},
91u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 148u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
92u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 95u32,
':' => 86u32,
_ => return false,
},
93u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 96u32,
':' => 97u32,
_ => return false,
},
94u32 => match token {
'0' => 98u32,
'1' => 99u32,
'2' => 100u32,
'3'..='9' => 101u32,
'A'..='F' | 'a'..='f' => 102u32,
']' => 47u32,
_ => return false,
},
95u32 => match token {
':' => 86u32,
_ => return false,
},
96u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 103u32,
':' => 97u32,
_ => return false,
},
97u32 => match token {
'0' => 104u32,
'1' => 105u32,
'2' => 106u32,
'3'..='9' => 107u32,
':' => 108u32,
'A'..='F' | 'a'..='f' => 109u32,
_ => return false,
},
98u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 140u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
99u32 => match token {
'.' => 111u32,
'0'..='9' => 142u32,
':' => 141u32,
'A'..='F' | 'a'..='f' => 140u32,
']' => 47u32,
_ => return false,
},
100u32 => match token {
'.' => 111u32,
'0'..='4' => 142u32,
'5' => 143u32,
'6'..='9' => 144u32,
':' => 141u32,
'A'..='F' | 'a'..='f' => 140u32,
']' => 47u32,
_ => return false,
},
101u32 => match token {
'.' => 111u32,
'0'..='9' => 144u32,
':' => 141u32,
'A'..='F' | 'a'..='f' => 140u32,
']' => 47u32,
_ => return false,
},
102u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 140u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
103u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 110u32,
':' => 97u32,
_ => return false,
},
104u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 112u32,
':' => 113u32,
_ => return false,
},
105u32 => match token {
'.' => 111u32,
'0'..='9' => 114u32,
':' => 113u32,
'A'..='F' | 'a'..='f' => 112u32,
_ => return false,
},
106u32 => match token {
'.' => 111u32,
'0'..='4' => 114u32,
'5' => 115u32,
'6'..='9' => 116u32,
':' => 113u32,
'A'..='F' | 'a'..='f' => 112u32,
_ => return false,
},
107u32 => match token {
'.' => 111u32,
'0'..='9' => 116u32,
':' => 113u32,
'A'..='F' | 'a'..='f' => 112u32,
_ => return false,
},
108u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 117u32,
']' => 47u32,
_ => return false,
},
109u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 112u32,
':' => 113u32,
_ => return false,
},
110u32 => match token {
':' => 97u32,
_ => return false,
},
111u32 => match token {
'0' => 123u32,
'1' => 124u32,
'2' => 125u32,
'3'..='9' => 126u32,
_ => return false,
},
112u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
':' => 113u32,
_ => return false,
},
113u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 117u32,
':' => 119u32,
_ => return false,
},
114u32 => match token {
'.' => 111u32,
'0'..='9' => 139u32,
':' => 113u32,
'A'..='F' | 'a'..='f' => 118u32,
_ => return false,
},
115u32 => match token {
'.' => 111u32,
'0'..='5' => 139u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
':' => 113u32,
_ => return false,
},
116u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
':' => 113u32,
_ => return false,
},
117u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 121u32,
']' => 47u32,
_ => return false,
},
118u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 120u32,
':' => 113u32,
_ => return false,
},
119u32 => match token {
']' => 47u32,
_ => return false,
},
120u32 => match token {
':' => 113u32,
_ => return false,
},
121u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 122u32,
']' => 47u32,
_ => return false,
},
122u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 119u32,
']' => 47u32,
_ => return false,
},
123u32 => match token {
'.' => 127u32,
_ => return false,
},
124u32 => match token {
'.' => 127u32,
'0'..='9' => 126u32,
_ => return false,
},
125u32 => match token {
'.' => 127u32,
'0'..='4' => 126u32,
'5' => 128u32,
'6'..='9' => 123u32,
_ => return false,
},
126u32 => match token {
'.' => 127u32,
'0'..='9' => 123u32,
_ => return false,
},
127u32 => match token {
'0' => 129u32,
'1' => 130u32,
'2' => 131u32,
'3'..='9' => 132u32,
_ => return false,
},
128u32 => match token {
'.' => 127u32,
'0'..='5' => 123u32,
_ => return false,
},
129u32 => match token {
'.' => 133u32,
_ => return false,
},
130u32 => match token {
'.' => 133u32,
'0'..='9' => 132u32,
_ => return false,
},
131u32 => match token {
'.' => 133u32,
'0'..='4' => 132u32,
'5' => 134u32,
'6'..='9' => 129u32,
_ => return false,
},
132u32 => match token {
'.' => 133u32,
'0'..='9' => 129u32,
_ => return false,
},
133u32 => match token {
'0' => 119u32,
'1' => 135u32,
'2' => 136u32,
'3'..='9' => 137u32,
_ => return false,
},
134u32 => match token {
'.' => 133u32,
'0'..='5' => 129u32,
_ => return false,
},
135u32 => match token {
'0'..='9' => 137u32,
']' => 47u32,
_ => return false,
},
136u32 => match token {
'0'..='4' => 137u32,
'5' => 138u32,
'6'..='9' => 119u32,
']' => 47u32,
_ => return false,
},
137u32 => match token {
'0'..='9' => 119u32,
']' => 47u32,
_ => return false,
},
138u32 => match token {
'0'..='5' => 119u32,
']' => 47u32,
_ => return false,
},
139u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 120u32,
':' => 113u32,
_ => return false,
},
140u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
141u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 117u32,
_ => return false,
},
142u32 => match token {
'.' => 111u32,
'0'..='9' => 147u32,
':' => 141u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 47u32,
_ => return false,
},
143u32 => match token {
'.' => 111u32,
'0'..='5' => 147u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
144u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
145u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 146u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
146u32 => match token {
':' => 141u32,
']' => 47u32,
_ => return false,
},
147u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 146u32,
':' => 141u32,
']' => 47u32,
_ => return false,
},
148u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 153u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
149u32 => match token {
'0' => 98u32,
'1' => 99u32,
'2' => 100u32,
'3'..='9' => 101u32,
'A'..='F' | 'a'..='f' => 102u32,
_ => return false,
},
150u32 => match token {
'.' => 111u32,
'0'..='9' => 155u32,
':' => 149u32,
'A'..='F' | 'a'..='f' => 153u32,
']' => 47u32,
_ => return false,
},
151u32 => match token {
'.' => 111u32,
'0'..='5' => 155u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 153u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
152u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 153u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
153u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 154u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
154u32 => match token {
':' => 149u32,
']' => 47u32,
_ => return false,
},
155u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 154u32,
':' => 149u32,
']' => 47u32,
_ => return false,
},
156u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 161u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
157u32 => match token {
'0' => 87u32,
'1' => 88u32,
'2' => 89u32,
'3'..='9' => 90u32,
'A'..='F' | 'a'..='f' => 91u32,
_ => return false,
},
158u32 => match token {
'.' => 111u32,
'0'..='9' => 163u32,
':' => 157u32,
'A'..='F' | 'a'..='f' => 161u32,
']' => 47u32,
_ => return false,
},
159u32 => match token {
'.' => 111u32,
'0'..='5' => 163u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 161u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
160u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 161u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
161u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 162u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
162u32 => match token {
':' => 157u32,
']' => 47u32,
_ => return false,
},
163u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 162u32,
':' => 157u32,
']' => 47u32,
_ => return false,
},
164u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 169u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
165u32 => match token {
'0' => 76u32,
'1' => 77u32,
'2' => 78u32,
'3'..='9' => 79u32,
'A'..='F' | 'a'..='f' => 80u32,
_ => return false,
},
166u32 => match token {
'.' => 111u32,
'0'..='9' => 171u32,
':' => 165u32,
'A'..='F' | 'a'..='f' => 169u32,
']' => 47u32,
_ => return false,
},
167u32 => match token {
'.' => 111u32,
'0'..='5' => 171u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 169u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
168u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 169u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
169u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 170u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
170u32 => match token {
':' => 165u32,
']' => 47u32,
_ => return false,
},
171u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 170u32,
':' => 165u32,
']' => 47u32,
_ => return false,
},
172u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 177u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
173u32 => match token {
'0' => 65u32,
'1' => 66u32,
'2' => 67u32,
'3'..='9' => 68u32,
'A'..='F' | 'a'..='f' => 69u32,
_ => return false,
},
174u32 => match token {
'.' => 111u32,
'0'..='9' => 179u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 177u32,
']' => 47u32,
_ => return false,
},
175u32 => match token {
'.' => 111u32,
'0'..='5' => 179u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 177u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
176u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 177u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
177u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 178u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
178u32 => match token {
':' => 173u32,
']' => 47u32,
_ => return false,
},
179u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 178u32,
':' => 173u32,
']' => 47u32,
_ => return false,
},
180u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 185u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
181u32 => match token {
'.' => 111u32,
'0'..='9' => 187u32,
':' => 186u32,
'A'..='F' | 'a'..='f' => 185u32,
']' => 47u32,
_ => return false,
},
182u32 => match token {
'.' => 111u32,
'0'..='4' => 187u32,
'5' => 188u32,
'6'..='9' => 189u32,
':' => 186u32,
'A'..='F' | 'a'..='f' => 185u32,
']' => 47u32,
_ => return false,
},
183u32 => match token {
'.' => 111u32,
'0'..='9' => 189u32,
':' => 186u32,
'A'..='F' | 'a'..='f' => 185u32,
']' => 47u32,
_ => return false,
},
184u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 185u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
185u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 190u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
186u32 => match token {
'0' => 54u32,
'1' => 55u32,
'2' => 56u32,
'3'..='9' => 57u32,
'A'..='F' | 'a'..='f' => 58u32,
_ => return false,
},
187u32 => match token {
'.' => 111u32,
'0'..='9' => 192u32,
':' => 186u32,
'A'..='F' | 'a'..='f' => 190u32,
']' => 47u32,
_ => return false,
},
188u32 => match token {
'.' => 111u32,
'0'..='5' => 192u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 190u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
189u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 190u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
190u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 191u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
191u32 => match token {
':' => 186u32,
']' => 47u32,
_ => return false,
},
192u32 => match token {
'.' => 111u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 191u32,
':' => 186u32,
']' => 47u32,
_ => return false,
},
193u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 197u32,
'/' | '?' => 5u32,
':' => 34u32,
_ => return false,
},
194u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 197u32,
'/' | '?' => 5u32,
'0'..='9' => 196u32,
':' => 34u32,
_ => return false,
},
195u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 197u32,
'/' | '?' => 5u32,
'0'..='4' => 196u32,
'5' => 198u32,
'6'..='9' => 193u32,
':' => 34u32,
_ => return false,
},
196u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 197u32,
'/' | '?' => 5u32,
'0'..='9' => 193u32,
':' => 34u32,
_ => return false,
},
197u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
'0' => 199u32,
'1' => 200u32,
'2' => 201u32,
'3'..='9' => 202u32,
':' => 34u32,
_ => return false,
},
198u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 197u32,
'/' | '?' => 5u32,
'0'..='5' => 193u32,
':' => 34u32,
_ => return false,
},
199u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 203u32,
'/' | '?' => 5u32,
':' => 34u32,
_ => return false,
},
200u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 203u32,
'/' | '?' => 5u32,
'0'..='9' => 202u32,
':' => 34u32,
_ => return false,
},
201u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 203u32,
'/' | '?' => 5u32,
'0'..='4' => 202u32,
'5' => 204u32,
'6'..='9' => 199u32,
':' => 34u32,
_ => return false,
},
202u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 203u32,
'/' | '?' => 5u32,
'0'..='9' => 199u32,
':' => 34u32,
_ => return false,
},
203u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
'2' => 205u32,
':' => 34u32,
_ => return false,
},
204u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'.' => 203u32,
'/' | '?' => 5u32,
'0'..='5' => 199u32,
':' => 34u32,
_ => return false,
},
205u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
'5' => 206u32,
':' => 34u32,
_ => return false,
},
206u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 28u32,
'#' => 2u32,
'%' => 29u32,
'/' | '?' => 5u32,
':' => 34u32,
_ => return false,
},
207u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 26u32,
_ => return false,
},
208u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 212u32,
'/' | '?' => 5u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
209u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 212u32,
'/' | '?' => 5u32,
'0'..='9' => 211u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
210u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 212u32,
'/' | '?' => 5u32,
'0'..='4' => 211u32,
'5' => 213u32,
'6'..='9' => 208u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
211u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 212u32,
'/' | '?' => 5u32,
'0'..='9' => 208u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
212u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
'0' => 214u32,
'1' => 215u32,
'2' => 216u32,
'3'..='9' => 217u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
213u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 212u32,
'/' | '?' => 5u32,
'0'..='5' => 208u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
214u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 218u32,
'/' | '?' => 5u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
215u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 218u32,
'/' | '?' => 5u32,
'0'..='9' => 217u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
216u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 218u32,
'/' | '?' => 5u32,
'0'..='4' => 217u32,
'5' => 219u32,
'6'..='9' => 214u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
217u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 218u32,
'/' | '?' => 5u32,
'0'..='9' => 214u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
218u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
'2' => 220u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
219u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'.' => 218u32,
'/' | '?' => 5u32,
'0'..='5' => 214u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
220u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
'5' => 221u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
221u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 14u32,
'#' => 2u32,
'%' => 15u32,
'/' | '?' => 5u32,
':' => 20u32,
'@' => 21u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(
self.state,
0u32 | 1u32
| 2u32 | 4u32
| 5u32 | 6u32
| 10u32 | 11u32
| 14u32 | 16u32
| 17u32 | 18u32
| 19u32 | 20u32
| 21u32 | 24u32
| 25u32 | 28u32
| 30u32 | 31u32
| 32u32 | 33u32
| 34u32 | 39u32
| 40u32 | 47u32
| 193u32 | 194u32
| 195u32 | 196u32
| 197u32 | 198u32
| 199u32 | 200u32
| 201u32 | 202u32
| 203u32 | 204u32
| 205u32 | 206u32
| 208u32 | 209u32
| 210u32 | 211u32
| 212u32 | 213u32
| 214u32 | 215u32
| 216u32 | 217u32
| 218u32 | 219u32
| 220u32 | 221u32
)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct Authority {
state: u32,
}
impl Authority {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'0' => 3u32,
'1' => 4u32,
'2' => 5u32,
'3'..='9' => 6u32,
':' => 7u32,
'@' => 8u32,
'[' => 9u32,
_ => return false,
},
1u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 10u32,
_ => return false,
},
3u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 11u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
4u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 11u32,
'0'..='9' => 6u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
5u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 11u32,
'0'..='4' => 6u32,
'5' => 12u32,
'6'..='9' => 3u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
6u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 11u32,
'0'..='9' => 3u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
7u32 => match token {
'!' | '$' | '&'..='.' | ':'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
13u32
}
'%' => 14u32,
'0'..='9' => 7u32,
'@' => 8u32,
_ => return false,
},
8u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'0' => 17u32,
'1' => 18u32,
'2' => 19u32,
'3'..='9' => 20u32,
':' => 21u32,
'[' => 9u32,
_ => return false,
},
9u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 22u32,
':' => 23u32,
'V' | 'v' => 24u32,
_ => return false,
},
10u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 1u32,
_ => return false,
},
11u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'0' => 195u32,
'1' => 196u32,
'2' => 197u32,
'3'..='9' => 198u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
12u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 11u32,
'0'..='5' => 3u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
13u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
13u32
}
'%' => 14u32,
'@' => 8u32,
_ => return false,
},
14u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 194u32,
_ => return false,
},
15u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
':' => 21u32,
_ => return false,
},
16u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 25u32,
_ => return false,
},
17u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'.' => 26u32,
':' => 21u32,
_ => return false,
},
18u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 26u32,
'0'..='9' => 20u32,
':' => 21u32,
_ => return false,
},
19u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 26u32,
'0'..='4' => 20u32,
'5' => 27u32,
'6'..='9' => 17u32,
':' => 21u32,
_ => return false,
},
20u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 26u32,
'0'..='9' => 17u32,
':' => 21u32,
_ => return false,
},
21u32 => match token {
'0'..='9' => 21u32,
_ => return false,
},
22u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 28u32,
':' => 29u32,
_ => return false,
},
23u32 => match token {
':' => 30u32,
_ => return false,
},
24u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 31u32,
_ => return false,
},
25u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 15u32,
_ => return false,
},
26u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'0' => 180u32,
'1' => 181u32,
'2' => 182u32,
'3'..='9' => 183u32,
':' => 21u32,
_ => return false,
},
27u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'.' => 26u32,
'0'..='5' => 17u32,
':' => 21u32,
_ => return false,
},
28u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 35u32,
':' => 29u32,
_ => return false,
},
29u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 36u32,
':' => 37u32,
_ => return false,
},
30u32 => match token {
'0' => 167u32,
'1' => 168u32,
'2' => 169u32,
'3'..='9' => 170u32,
'A'..='F' | 'a'..='f' => 171u32,
']' => 34u32,
_ => return false,
},
31u32 => match token {
'.' => 32u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 31u32,
_ => return false,
},
32u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
33u32
}
_ => return false,
},
33u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
33u32
}
']' => 34u32,
_ => return false,
},
34u32 => match token {
':' => 21u32,
_ => return false,
},
35u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 38u32,
':' => 29u32,
_ => return false,
},
36u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 39u32,
':' => 40u32,
_ => return false,
},
37u32 => match token {
'0' => 41u32,
'1' => 42u32,
'2' => 43u32,
'3'..='9' => 44u32,
'A'..='F' | 'a'..='f' => 45u32,
']' => 34u32,
_ => return false,
},
38u32 => match token {
':' => 29u32,
_ => return false,
},
39u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 46u32,
':' => 40u32,
_ => return false,
},
40u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 47u32,
':' => 48u32,
_ => return false,
},
41u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 159u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
42u32 => match token {
'.' => 98u32,
'0'..='9' => 161u32,
':' => 160u32,
'A'..='F' | 'a'..='f' => 159u32,
']' => 34u32,
_ => return false,
},
43u32 => match token {
'.' => 98u32,
'0'..='4' => 161u32,
'5' => 162u32,
'6'..='9' => 163u32,
':' => 160u32,
'A'..='F' | 'a'..='f' => 159u32,
']' => 34u32,
_ => return false,
},
44u32 => match token {
'.' => 98u32,
'0'..='9' => 163u32,
':' => 160u32,
'A'..='F' | 'a'..='f' => 159u32,
']' => 34u32,
_ => return false,
},
45u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 159u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
46u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 49u32,
':' => 40u32,
_ => return false,
},
47u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 50u32,
':' => 51u32,
_ => return false,
},
48u32 => match token {
'0' => 52u32,
'1' => 53u32,
'2' => 54u32,
'3'..='9' => 55u32,
'A'..='F' | 'a'..='f' => 56u32,
']' => 34u32,
_ => return false,
},
49u32 => match token {
':' => 40u32,
_ => return false,
},
50u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 57u32,
':' => 51u32,
_ => return false,
},
51u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 58u32,
':' => 59u32,
_ => return false,
},
52u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 151u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
53u32 => match token {
'.' => 98u32,
'0'..='9' => 153u32,
':' => 152u32,
'A'..='F' | 'a'..='f' => 151u32,
']' => 34u32,
_ => return false,
},
54u32 => match token {
'.' => 98u32,
'0'..='4' => 153u32,
'5' => 154u32,
'6'..='9' => 155u32,
':' => 152u32,
'A'..='F' | 'a'..='f' => 151u32,
']' => 34u32,
_ => return false,
},
55u32 => match token {
'.' => 98u32,
'0'..='9' => 155u32,
':' => 152u32,
'A'..='F' | 'a'..='f' => 151u32,
']' => 34u32,
_ => return false,
},
56u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 151u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
57u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 60u32,
':' => 51u32,
_ => return false,
},
58u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 61u32,
':' => 62u32,
_ => return false,
},
59u32 => match token {
'0' => 63u32,
'1' => 64u32,
'2' => 65u32,
'3'..='9' => 66u32,
'A'..='F' | 'a'..='f' => 67u32,
']' => 34u32,
_ => return false,
},
60u32 => match token {
':' => 51u32,
_ => return false,
},
61u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 68u32,
':' => 62u32,
_ => return false,
},
62u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 69u32,
':' => 70u32,
_ => return false,
},
63u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 143u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
64u32 => match token {
'.' => 98u32,
'0'..='9' => 145u32,
':' => 144u32,
'A'..='F' | 'a'..='f' => 143u32,
']' => 34u32,
_ => return false,
},
65u32 => match token {
'.' => 98u32,
'0'..='4' => 145u32,
'5' => 146u32,
'6'..='9' => 147u32,
':' => 144u32,
'A'..='F' | 'a'..='f' => 143u32,
']' => 34u32,
_ => return false,
},
66u32 => match token {
'.' => 98u32,
'0'..='9' => 147u32,
':' => 144u32,
'A'..='F' | 'a'..='f' => 143u32,
']' => 34u32,
_ => return false,
},
67u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 143u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
68u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 71u32,
':' => 62u32,
_ => return false,
},
69u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 72u32,
':' => 73u32,
_ => return false,
},
70u32 => match token {
'0' => 74u32,
'1' => 75u32,
'2' => 76u32,
'3'..='9' => 77u32,
'A'..='F' | 'a'..='f' => 78u32,
']' => 34u32,
_ => return false,
},
71u32 => match token {
':' => 62u32,
_ => return false,
},
72u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 79u32,
':' => 73u32,
_ => return false,
},
73u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 80u32,
':' => 81u32,
_ => return false,
},
74u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 135u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
75u32 => match token {
'.' => 98u32,
'0'..='9' => 137u32,
':' => 136u32,
'A'..='F' | 'a'..='f' => 135u32,
']' => 34u32,
_ => return false,
},
76u32 => match token {
'.' => 98u32,
'0'..='4' => 137u32,
'5' => 138u32,
'6'..='9' => 139u32,
':' => 136u32,
'A'..='F' | 'a'..='f' => 135u32,
']' => 34u32,
_ => return false,
},
77u32 => match token {
'.' => 98u32,
'0'..='9' => 139u32,
':' => 136u32,
'A'..='F' | 'a'..='f' => 135u32,
']' => 34u32,
_ => return false,
},
78u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 135u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
79u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 82u32,
':' => 73u32,
_ => return false,
},
80u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 83u32,
':' => 84u32,
_ => return false,
},
81u32 => match token {
'0' => 85u32,
'1' => 86u32,
'2' => 87u32,
'3'..='9' => 88u32,
'A'..='F' | 'a'..='f' => 89u32,
']' => 34u32,
_ => return false,
},
82u32 => match token {
':' => 73u32,
_ => return false,
},
83u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 90u32,
':' => 84u32,
_ => return false,
},
84u32 => match token {
'0' => 91u32,
'1' => 92u32,
'2' => 93u32,
'3'..='9' => 94u32,
':' => 95u32,
'A'..='F' | 'a'..='f' => 96u32,
_ => return false,
},
85u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 127u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
86u32 => match token {
'.' => 98u32,
'0'..='9' => 129u32,
':' => 128u32,
'A'..='F' | 'a'..='f' => 127u32,
']' => 34u32,
_ => return false,
},
87u32 => match token {
'.' => 98u32,
'0'..='4' => 129u32,
'5' => 130u32,
'6'..='9' => 131u32,
':' => 128u32,
'A'..='F' | 'a'..='f' => 127u32,
']' => 34u32,
_ => return false,
},
88u32 => match token {
'.' => 98u32,
'0'..='9' => 131u32,
':' => 128u32,
'A'..='F' | 'a'..='f' => 127u32,
']' => 34u32,
_ => return false,
},
89u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 127u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
90u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 97u32,
':' => 84u32,
_ => return false,
},
91u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 99u32,
':' => 100u32,
_ => return false,
},
92u32 => match token {
'.' => 98u32,
'0'..='9' => 101u32,
':' => 100u32,
'A'..='F' | 'a'..='f' => 99u32,
_ => return false,
},
93u32 => match token {
'.' => 98u32,
'0'..='4' => 101u32,
'5' => 102u32,
'6'..='9' => 103u32,
':' => 100u32,
'A'..='F' | 'a'..='f' => 99u32,
_ => return false,
},
94u32 => match token {
'.' => 98u32,
'0'..='9' => 103u32,
':' => 100u32,
'A'..='F' | 'a'..='f' => 99u32,
_ => return false,
},
95u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 104u32,
']' => 34u32,
_ => return false,
},
96u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 99u32,
':' => 100u32,
_ => return false,
},
97u32 => match token {
':' => 84u32,
_ => return false,
},
98u32 => match token {
'0' => 110u32,
'1' => 111u32,
'2' => 112u32,
'3'..='9' => 113u32,
_ => return false,
},
99u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 105u32,
':' => 100u32,
_ => return false,
},
100u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 104u32,
':' => 106u32,
_ => return false,
},
101u32 => match token {
'.' => 98u32,
'0'..='9' => 126u32,
':' => 100u32,
'A'..='F' | 'a'..='f' => 105u32,
_ => return false,
},
102u32 => match token {
'.' => 98u32,
'0'..='5' => 126u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 105u32,
':' => 100u32,
_ => return false,
},
103u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 105u32,
':' => 100u32,
_ => return false,
},
104u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 108u32,
']' => 34u32,
_ => return false,
},
105u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 107u32,
':' => 100u32,
_ => return false,
},
106u32 => match token {
']' => 34u32,
_ => return false,
},
107u32 => match token {
':' => 100u32,
_ => return false,
},
108u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 109u32,
']' => 34u32,
_ => return false,
},
109u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 106u32,
']' => 34u32,
_ => return false,
},
110u32 => match token {
'.' => 114u32,
_ => return false,
},
111u32 => match token {
'.' => 114u32,
'0'..='9' => 113u32,
_ => return false,
},
112u32 => match token {
'.' => 114u32,
'0'..='4' => 113u32,
'5' => 115u32,
'6'..='9' => 110u32,
_ => return false,
},
113u32 => match token {
'.' => 114u32,
'0'..='9' => 110u32,
_ => return false,
},
114u32 => match token {
'0' => 116u32,
'1' => 117u32,
'2' => 118u32,
'3'..='9' => 119u32,
_ => return false,
},
115u32 => match token {
'.' => 114u32,
'0'..='5' => 110u32,
_ => return false,
},
116u32 => match token {
'.' => 120u32,
_ => return false,
},
117u32 => match token {
'.' => 120u32,
'0'..='9' => 119u32,
_ => return false,
},
118u32 => match token {
'.' => 120u32,
'0'..='4' => 119u32,
'5' => 121u32,
'6'..='9' => 116u32,
_ => return false,
},
119u32 => match token {
'.' => 120u32,
'0'..='9' => 116u32,
_ => return false,
},
120u32 => match token {
'0' => 106u32,
'1' => 122u32,
'2' => 123u32,
'3'..='9' => 124u32,
_ => return false,
},
121u32 => match token {
'.' => 120u32,
'0'..='5' => 116u32,
_ => return false,
},
122u32 => match token {
'0'..='9' => 124u32,
']' => 34u32,
_ => return false,
},
123u32 => match token {
'0'..='4' => 124u32,
'5' => 125u32,
'6'..='9' => 106u32,
']' => 34u32,
_ => return false,
},
124u32 => match token {
'0'..='9' => 106u32,
']' => 34u32,
_ => return false,
},
125u32 => match token {
'0'..='5' => 106u32,
']' => 34u32,
_ => return false,
},
126u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 107u32,
':' => 100u32,
_ => return false,
},
127u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 132u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
128u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 104u32,
_ => return false,
},
129u32 => match token {
'.' => 98u32,
'0'..='9' => 134u32,
':' => 128u32,
'A'..='F' | 'a'..='f' => 132u32,
']' => 34u32,
_ => return false,
},
130u32 => match token {
'.' => 98u32,
'0'..='5' => 134u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 132u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
131u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 132u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
132u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 133u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
133u32 => match token {
':' => 128u32,
']' => 34u32,
_ => return false,
},
134u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 133u32,
':' => 128u32,
']' => 34u32,
_ => return false,
},
135u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 140u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
136u32 => match token {
'0' => 85u32,
'1' => 86u32,
'2' => 87u32,
'3'..='9' => 88u32,
'A'..='F' | 'a'..='f' => 89u32,
_ => return false,
},
137u32 => match token {
'.' => 98u32,
'0'..='9' => 142u32,
':' => 136u32,
'A'..='F' | 'a'..='f' => 140u32,
']' => 34u32,
_ => return false,
},
138u32 => match token {
'.' => 98u32,
'0'..='5' => 142u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 140u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
139u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 140u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
140u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 141u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
141u32 => match token {
':' => 136u32,
']' => 34u32,
_ => return false,
},
142u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 141u32,
':' => 136u32,
']' => 34u32,
_ => return false,
},
143u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 148u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
144u32 => match token {
'0' => 74u32,
'1' => 75u32,
'2' => 76u32,
'3'..='9' => 77u32,
'A'..='F' | 'a'..='f' => 78u32,
_ => return false,
},
145u32 => match token {
'.' => 98u32,
'0'..='9' => 150u32,
':' => 144u32,
'A'..='F' | 'a'..='f' => 148u32,
']' => 34u32,
_ => return false,
},
146u32 => match token {
'.' => 98u32,
'0'..='5' => 150u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 148u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
147u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 148u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
148u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 149u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
149u32 => match token {
':' => 144u32,
']' => 34u32,
_ => return false,
},
150u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 149u32,
':' => 144u32,
']' => 34u32,
_ => return false,
},
151u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 156u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
152u32 => match token {
'0' => 63u32,
'1' => 64u32,
'2' => 65u32,
'3'..='9' => 66u32,
'A'..='F' | 'a'..='f' => 67u32,
_ => return false,
},
153u32 => match token {
'.' => 98u32,
'0'..='9' => 158u32,
':' => 152u32,
'A'..='F' | 'a'..='f' => 156u32,
']' => 34u32,
_ => return false,
},
154u32 => match token {
'.' => 98u32,
'0'..='5' => 158u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 156u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
155u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 156u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
156u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 157u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
157u32 => match token {
':' => 152u32,
']' => 34u32,
_ => return false,
},
158u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 157u32,
':' => 152u32,
']' => 34u32,
_ => return false,
},
159u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
160u32 => match token {
'0' => 52u32,
'1' => 53u32,
'2' => 54u32,
'3'..='9' => 55u32,
'A'..='F' | 'a'..='f' => 56u32,
_ => return false,
},
161u32 => match token {
'.' => 98u32,
'0'..='9' => 166u32,
':' => 160u32,
'A'..='F' | 'a'..='f' => 164u32,
']' => 34u32,
_ => return false,
},
162u32 => match token {
'.' => 98u32,
'0'..='5' => 166u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
163u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
164u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 165u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
165u32 => match token {
':' => 160u32,
']' => 34u32,
_ => return false,
},
166u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 165u32,
':' => 160u32,
']' => 34u32,
_ => return false,
},
167u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 172u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
168u32 => match token {
'.' => 98u32,
'0'..='9' => 174u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 172u32,
']' => 34u32,
_ => return false,
},
169u32 => match token {
'.' => 98u32,
'0'..='4' => 174u32,
'5' => 175u32,
'6'..='9' => 176u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 172u32,
']' => 34u32,
_ => return false,
},
170u32 => match token {
'.' => 98u32,
'0'..='9' => 176u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 172u32,
']' => 34u32,
_ => return false,
},
171u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 172u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
172u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 177u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
173u32 => match token {
'0' => 41u32,
'1' => 42u32,
'2' => 43u32,
'3'..='9' => 44u32,
'A'..='F' | 'a'..='f' => 45u32,
_ => return false,
},
174u32 => match token {
'.' => 98u32,
'0'..='9' => 179u32,
':' => 173u32,
'A'..='F' | 'a'..='f' => 177u32,
']' => 34u32,
_ => return false,
},
175u32 => match token {
'.' => 98u32,
'0'..='5' => 179u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 177u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
176u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 177u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
177u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 178u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
178u32 => match token {
':' => 173u32,
']' => 34u32,
_ => return false,
},
179u32 => match token {
'.' => 98u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 178u32,
':' => 173u32,
']' => 34u32,
_ => return false,
},
180u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'.' => 184u32,
':' => 21u32,
_ => return false,
},
181u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 184u32,
'0'..='9' => 183u32,
':' => 21u32,
_ => return false,
},
182u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 184u32,
'0'..='4' => 183u32,
'5' => 185u32,
'6'..='9' => 180u32,
':' => 21u32,
_ => return false,
},
183u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 184u32,
'0'..='9' => 180u32,
':' => 21u32,
_ => return false,
},
184u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'0' => 186u32,
'1' => 187u32,
'2' => 188u32,
'3'..='9' => 189u32,
':' => 21u32,
_ => return false,
},
185u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'.' => 184u32,
'0'..='5' => 180u32,
':' => 21u32,
_ => return false,
},
186u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'.' => 190u32,
':' => 21u32,
_ => return false,
},
187u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 190u32,
'0'..='9' => 189u32,
':' => 21u32,
_ => return false,
},
188u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 190u32,
'0'..='4' => 189u32,
'5' => 191u32,
'6'..='9' => 186u32,
':' => 21u32,
_ => return false,
},
189u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 15u32,
'%' => 16u32,
'.' => 190u32,
'0'..='9' => 186u32,
':' => 21u32,
_ => return false,
},
190u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'2' => 192u32,
':' => 21u32,
_ => return false,
},
191u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'.' => 190u32,
'0'..='5' => 186u32,
':' => 21u32,
_ => return false,
},
192u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
'5' => 193u32,
':' => 21u32,
_ => return false,
},
193u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 15u32,
'%' => 16u32,
':' => 21u32,
_ => return false,
},
194u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 13u32,
_ => return false,
},
195u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 199u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
196u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 199u32,
'0'..='9' => 198u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
197u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 199u32,
'0'..='4' => 198u32,
'5' => 200u32,
'6'..='9' => 195u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
198u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 199u32,
'0'..='9' => 195u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
199u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'0' => 201u32,
'1' => 202u32,
'2' => 203u32,
'3'..='9' => 204u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
200u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 199u32,
'0'..='5' => 195u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
201u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 205u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
202u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 205u32,
'0'..='9' => 204u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
203u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 205u32,
'0'..='4' => 204u32,
'5' => 206u32,
'6'..='9' => 201u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
204u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 205u32,
'0'..='9' => 201u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
205u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'2' => 207u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
206u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 205u32,
'0'..='5' => 201u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
207u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'5' => 208u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
208u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
':' => 7u32,
'@' => 8u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(
self.state,
0u32 | 1u32
| 3u32 | 4u32
| 5u32 | 6u32
| 7u32 | 8u32
| 11u32 | 12u32
| 15u32 | 17u32
| 18u32 | 19u32
| 20u32 | 21u32
| 26u32 | 27u32
| 34u32 | 180u32
| 181u32 | 182u32
| 183u32 | 184u32
| 185u32 | 186u32
| 187u32 | 188u32
| 189u32 | 190u32
| 191u32 | 192u32
| 193u32 | 195u32
| 196u32 | 197u32
| 198u32 | 199u32
| 200u32 | 201u32
| 202u32 | 203u32
| 204u32 | 205u32
| 206u32 | 207u32
| 208u32
)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct Host {
state: u32,
}
impl Host {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'0' => 3u32,
'1' => 4u32,
'2' => 5u32,
'3'..='9' => 6u32,
'[' => 7u32,
_ => return false,
},
1u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 8u32,
_ => return false,
},
3u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 9u32,
_ => return false,
},
4u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 9u32,
'0'..='9' => 6u32,
_ => return false,
},
5u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 9u32,
'0'..='4' => 6u32,
'5' => 10u32,
'6'..='9' => 3u32,
_ => return false,
},
6u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 9u32,
'0'..='9' => 3u32,
_ => return false,
},
7u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 11u32,
':' => 12u32,
'V' | 'v' => 13u32,
_ => return false,
},
8u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 1u32,
_ => return false,
},
9u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'0' => 166u32,
'1' => 167u32,
'2' => 168u32,
'3'..='9' => 169u32,
_ => return false,
},
10u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 9u32,
'0'..='5' => 3u32,
_ => return false,
},
11u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 14u32,
':' => 15u32,
_ => return false,
},
12u32 => match token {
':' => 16u32,
_ => return false,
},
13u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 17u32,
_ => return false,
},
14u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 21u32,
':' => 15u32,
_ => return false,
},
15u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 22u32,
':' => 23u32,
_ => return false,
},
16u32 => match token {
'0' => 153u32,
'1' => 154u32,
'2' => 155u32,
'3'..='9' => 156u32,
'A'..='F' | 'a'..='f' => 157u32,
']' => 20u32,
_ => return false,
},
17u32 => match token {
'.' => 18u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 17u32,
_ => return false,
},
18u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
19u32
}
_ => return false,
},
19u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => {
19u32
}
']' => 20u32,
_ => return false,
},
21u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 24u32,
':' => 15u32,
_ => return false,
},
22u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 25u32,
':' => 26u32,
_ => return false,
},
23u32 => match token {
'0' => 27u32,
'1' => 28u32,
'2' => 29u32,
'3'..='9' => 30u32,
'A'..='F' | 'a'..='f' => 31u32,
']' => 20u32,
_ => return false,
},
24u32 => match token {
':' => 15u32,
_ => return false,
},
25u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 32u32,
':' => 26u32,
_ => return false,
},
26u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 33u32,
':' => 34u32,
_ => return false,
},
27u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
28u32 => match token {
'.' => 84u32,
'0'..='9' => 147u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 20u32,
_ => return false,
},
29u32 => match token {
'.' => 84u32,
'0'..='4' => 147u32,
'5' => 148u32,
'6'..='9' => 149u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 20u32,
_ => return false,
},
30u32 => match token {
'.' => 84u32,
'0'..='9' => 149u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 145u32,
']' => 20u32,
_ => return false,
},
31u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 145u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
32u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 35u32,
':' => 26u32,
_ => return false,
},
33u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 36u32,
':' => 37u32,
_ => return false,
},
34u32 => match token {
'0' => 38u32,
'1' => 39u32,
'2' => 40u32,
'3'..='9' => 41u32,
'A'..='F' | 'a'..='f' => 42u32,
']' => 20u32,
_ => return false,
},
35u32 => match token {
':' => 26u32,
_ => return false,
},
36u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 43u32,
':' => 37u32,
_ => return false,
},
37u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 44u32,
':' => 45u32,
_ => return false,
},
38u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 137u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
39u32 => match token {
'.' => 84u32,
'0'..='9' => 139u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 137u32,
']' => 20u32,
_ => return false,
},
40u32 => match token {
'.' => 84u32,
'0'..='4' => 139u32,
'5' => 140u32,
'6'..='9' => 141u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 137u32,
']' => 20u32,
_ => return false,
},
41u32 => match token {
'.' => 84u32,
'0'..='9' => 141u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 137u32,
']' => 20u32,
_ => return false,
},
42u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 137u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
43u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 46u32,
':' => 37u32,
_ => return false,
},
44u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 47u32,
':' => 48u32,
_ => return false,
},
45u32 => match token {
'0' => 49u32,
'1' => 50u32,
'2' => 51u32,
'3'..='9' => 52u32,
'A'..='F' | 'a'..='f' => 53u32,
']' => 20u32,
_ => return false,
},
46u32 => match token {
':' => 37u32,
_ => return false,
},
47u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 54u32,
':' => 48u32,
_ => return false,
},
48u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 55u32,
':' => 56u32,
_ => return false,
},
49u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 129u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
50u32 => match token {
'.' => 84u32,
'0'..='9' => 131u32,
':' => 130u32,
'A'..='F' | 'a'..='f' => 129u32,
']' => 20u32,
_ => return false,
},
51u32 => match token {
'.' => 84u32,
'0'..='4' => 131u32,
'5' => 132u32,
'6'..='9' => 133u32,
':' => 130u32,
'A'..='F' | 'a'..='f' => 129u32,
']' => 20u32,
_ => return false,
},
52u32 => match token {
'.' => 84u32,
'0'..='9' => 133u32,
':' => 130u32,
'A'..='F' | 'a'..='f' => 129u32,
']' => 20u32,
_ => return false,
},
53u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 129u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
54u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 57u32,
':' => 48u32,
_ => return false,
},
55u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 58u32,
':' => 59u32,
_ => return false,
},
56u32 => match token {
'0' => 60u32,
'1' => 61u32,
'2' => 62u32,
'3'..='9' => 63u32,
'A'..='F' | 'a'..='f' => 64u32,
']' => 20u32,
_ => return false,
},
57u32 => match token {
':' => 48u32,
_ => return false,
},
58u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 65u32,
':' => 59u32,
_ => return false,
},
59u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 66u32,
':' => 67u32,
_ => return false,
},
60u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 121u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
61u32 => match token {
'.' => 84u32,
'0'..='9' => 123u32,
':' => 122u32,
'A'..='F' | 'a'..='f' => 121u32,
']' => 20u32,
_ => return false,
},
62u32 => match token {
'.' => 84u32,
'0'..='4' => 123u32,
'5' => 124u32,
'6'..='9' => 125u32,
':' => 122u32,
'A'..='F' | 'a'..='f' => 121u32,
']' => 20u32,
_ => return false,
},
63u32 => match token {
'.' => 84u32,
'0'..='9' => 125u32,
':' => 122u32,
'A'..='F' | 'a'..='f' => 121u32,
']' => 20u32,
_ => return false,
},
64u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 121u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
65u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 68u32,
':' => 59u32,
_ => return false,
},
66u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 69u32,
':' => 70u32,
_ => return false,
},
67u32 => match token {
'0' => 71u32,
'1' => 72u32,
'2' => 73u32,
'3'..='9' => 74u32,
'A'..='F' | 'a'..='f' => 75u32,
']' => 20u32,
_ => return false,
},
68u32 => match token {
':' => 59u32,
_ => return false,
},
69u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 76u32,
':' => 70u32,
_ => return false,
},
70u32 => match token {
'0' => 77u32,
'1' => 78u32,
'2' => 79u32,
'3'..='9' => 80u32,
':' => 81u32,
'A'..='F' | 'a'..='f' => 82u32,
_ => return false,
},
71u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 113u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
72u32 => match token {
'.' => 84u32,
'0'..='9' => 115u32,
':' => 114u32,
'A'..='F' | 'a'..='f' => 113u32,
']' => 20u32,
_ => return false,
},
73u32 => match token {
'.' => 84u32,
'0'..='4' => 115u32,
'5' => 116u32,
'6'..='9' => 117u32,
':' => 114u32,
'A'..='F' | 'a'..='f' => 113u32,
']' => 20u32,
_ => return false,
},
74u32 => match token {
'.' => 84u32,
'0'..='9' => 117u32,
':' => 114u32,
'A'..='F' | 'a'..='f' => 113u32,
']' => 20u32,
_ => return false,
},
75u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 113u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
76u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 83u32,
':' => 70u32,
_ => return false,
},
77u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 85u32,
':' => 86u32,
_ => return false,
},
78u32 => match token {
'.' => 84u32,
'0'..='9' => 87u32,
':' => 86u32,
'A'..='F' | 'a'..='f' => 85u32,
_ => return false,
},
79u32 => match token {
'.' => 84u32,
'0'..='4' => 87u32,
'5' => 88u32,
'6'..='9' => 89u32,
':' => 86u32,
'A'..='F' | 'a'..='f' => 85u32,
_ => return false,
},
80u32 => match token {
'.' => 84u32,
'0'..='9' => 89u32,
':' => 86u32,
'A'..='F' | 'a'..='f' => 85u32,
_ => return false,
},
81u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 90u32,
']' => 20u32,
_ => return false,
},
82u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 85u32,
':' => 86u32,
_ => return false,
},
83u32 => match token {
':' => 70u32,
_ => return false,
},
84u32 => match token {
'0' => 96u32,
'1' => 97u32,
'2' => 98u32,
'3'..='9' => 99u32,
_ => return false,
},
85u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 91u32,
':' => 86u32,
_ => return false,
},
86u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 90u32,
':' => 92u32,
_ => return false,
},
87u32 => match token {
'.' => 84u32,
'0'..='9' => 112u32,
':' => 86u32,
'A'..='F' | 'a'..='f' => 91u32,
_ => return false,
},
88u32 => match token {
'.' => 84u32,
'0'..='5' => 112u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 91u32,
':' => 86u32,
_ => return false,
},
89u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 91u32,
':' => 86u32,
_ => return false,
},
90u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 94u32,
']' => 20u32,
_ => return false,
},
91u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 93u32,
':' => 86u32,
_ => return false,
},
92u32 => match token {
']' => 20u32,
_ => return false,
},
93u32 => match token {
':' => 86u32,
_ => return false,
},
94u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 95u32,
']' => 20u32,
_ => return false,
},
95u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 92u32,
']' => 20u32,
_ => return false,
},
96u32 => match token {
'.' => 100u32,
_ => return false,
},
97u32 => match token {
'.' => 100u32,
'0'..='9' => 99u32,
_ => return false,
},
98u32 => match token {
'.' => 100u32,
'0'..='4' => 99u32,
'5' => 101u32,
'6'..='9' => 96u32,
_ => return false,
},
99u32 => match token {
'.' => 100u32,
'0'..='9' => 96u32,
_ => return false,
},
100u32 => match token {
'0' => 102u32,
'1' => 103u32,
'2' => 104u32,
'3'..='9' => 105u32,
_ => return false,
},
101u32 => match token {
'.' => 100u32,
'0'..='5' => 96u32,
_ => return false,
},
102u32 => match token {
'.' => 106u32,
_ => return false,
},
103u32 => match token {
'.' => 106u32,
'0'..='9' => 105u32,
_ => return false,
},
104u32 => match token {
'.' => 106u32,
'0'..='4' => 105u32,
'5' => 107u32,
'6'..='9' => 102u32,
_ => return false,
},
105u32 => match token {
'.' => 106u32,
'0'..='9' => 102u32,
_ => return false,
},
106u32 => match token {
'0' => 92u32,
'1' => 108u32,
'2' => 109u32,
'3'..='9' => 110u32,
_ => return false,
},
107u32 => match token {
'.' => 106u32,
'0'..='5' => 102u32,
_ => return false,
},
108u32 => match token {
'0'..='9' => 110u32,
']' => 20u32,
_ => return false,
},
109u32 => match token {
'0'..='4' => 110u32,
'5' => 111u32,
'6'..='9' => 92u32,
']' => 20u32,
_ => return false,
},
110u32 => match token {
'0'..='9' => 92u32,
']' => 20u32,
_ => return false,
},
111u32 => match token {
'0'..='5' => 92u32,
']' => 20u32,
_ => return false,
},
112u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 93u32,
':' => 86u32,
_ => return false,
},
113u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
114u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 90u32,
_ => return false,
},
115u32 => match token {
'.' => 84u32,
'0'..='9' => 120u32,
':' => 114u32,
'A'..='F' | 'a'..='f' => 118u32,
']' => 20u32,
_ => return false,
},
116u32 => match token {
'.' => 84u32,
'0'..='5' => 120u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
117u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 118u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
118u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 119u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
119u32 => match token {
':' => 114u32,
']' => 20u32,
_ => return false,
},
120u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 119u32,
':' => 114u32,
']' => 20u32,
_ => return false,
},
121u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 126u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
122u32 => match token {
'0' => 71u32,
'1' => 72u32,
'2' => 73u32,
'3'..='9' => 74u32,
'A'..='F' | 'a'..='f' => 75u32,
_ => return false,
},
123u32 => match token {
'.' => 84u32,
'0'..='9' => 128u32,
':' => 122u32,
'A'..='F' | 'a'..='f' => 126u32,
']' => 20u32,
_ => return false,
},
124u32 => match token {
'.' => 84u32,
'0'..='5' => 128u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 126u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
125u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 126u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
126u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 127u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
127u32 => match token {
':' => 122u32,
']' => 20u32,
_ => return false,
},
128u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 127u32,
':' => 122u32,
']' => 20u32,
_ => return false,
},
129u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 134u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
130u32 => match token {
'0' => 60u32,
'1' => 61u32,
'2' => 62u32,
'3'..='9' => 63u32,
'A'..='F' | 'a'..='f' => 64u32,
_ => return false,
},
131u32 => match token {
'.' => 84u32,
'0'..='9' => 136u32,
':' => 130u32,
'A'..='F' | 'a'..='f' => 134u32,
']' => 20u32,
_ => return false,
},
132u32 => match token {
'.' => 84u32,
'0'..='5' => 136u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 134u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
133u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 134u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
134u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 135u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
135u32 => match token {
':' => 130u32,
']' => 20u32,
_ => return false,
},
136u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 135u32,
':' => 130u32,
']' => 20u32,
_ => return false,
},
137u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 142u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
138u32 => match token {
'0' => 49u32,
'1' => 50u32,
'2' => 51u32,
'3'..='9' => 52u32,
'A'..='F' | 'a'..='f' => 53u32,
_ => return false,
},
139u32 => match token {
'.' => 84u32,
'0'..='9' => 144u32,
':' => 138u32,
'A'..='F' | 'a'..='f' => 142u32,
']' => 20u32,
_ => return false,
},
140u32 => match token {
'.' => 84u32,
'0'..='5' => 144u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 142u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
141u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 142u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
142u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 143u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
143u32 => match token {
':' => 138u32,
']' => 20u32,
_ => return false,
},
144u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 143u32,
':' => 138u32,
']' => 20u32,
_ => return false,
},
145u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 150u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
146u32 => match token {
'0' => 38u32,
'1' => 39u32,
'2' => 40u32,
'3'..='9' => 41u32,
'A'..='F' | 'a'..='f' => 42u32,
_ => return false,
},
147u32 => match token {
'.' => 84u32,
'0'..='9' => 152u32,
':' => 146u32,
'A'..='F' | 'a'..='f' => 150u32,
']' => 20u32,
_ => return false,
},
148u32 => match token {
'.' => 84u32,
'0'..='5' => 152u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 150u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
149u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 150u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
150u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 151u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
151u32 => match token {
':' => 146u32,
']' => 20u32,
_ => return false,
},
152u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 151u32,
':' => 146u32,
']' => 20u32,
_ => return false,
},
153u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 158u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
154u32 => match token {
'.' => 84u32,
'0'..='9' => 160u32,
':' => 159u32,
'A'..='F' | 'a'..='f' => 158u32,
']' => 20u32,
_ => return false,
},
155u32 => match token {
'.' => 84u32,
'0'..='4' => 160u32,
'5' => 161u32,
'6'..='9' => 162u32,
':' => 159u32,
'A'..='F' | 'a'..='f' => 158u32,
']' => 20u32,
_ => return false,
},
156u32 => match token {
'.' => 84u32,
'0'..='9' => 162u32,
':' => 159u32,
'A'..='F' | 'a'..='f' => 158u32,
']' => 20u32,
_ => return false,
},
157u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 158u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
158u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 163u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
159u32 => match token {
'0' => 27u32,
'1' => 28u32,
'2' => 29u32,
'3'..='9' => 30u32,
'A'..='F' | 'a'..='f' => 31u32,
_ => return false,
},
160u32 => match token {
'.' => 84u32,
'0'..='9' => 165u32,
':' => 159u32,
'A'..='F' | 'a'..='f' => 163u32,
']' => 20u32,
_ => return false,
},
161u32 => match token {
'.' => 84u32,
'0'..='5' => 165u32,
'6'..='9' | 'A'..='F' | 'a'..='f' => 163u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
162u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 163u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
163u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
164u32 => match token {
':' => 159u32,
']' => 20u32,
_ => return false,
},
165u32 => match token {
'.' => 84u32,
'0'..='9' | 'A'..='F' | 'a'..='f' => 164u32,
':' => 159u32,
']' => 20u32,
_ => return false,
},
166u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 170u32,
_ => return false,
},
167u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 170u32,
'0'..='9' => 169u32,
_ => return false,
},
168u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 170u32,
'0'..='4' => 169u32,
'5' => 171u32,
'6'..='9' => 166u32,
_ => return false,
},
169u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 170u32,
'0'..='9' => 166u32,
_ => return false,
},
170u32 => match token {
'!' | '$' | '&'..='.' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'0' => 172u32,
'1' => 173u32,
'2' => 174u32,
'3'..='9' => 175u32,
_ => return false,
},
171u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 170u32,
'0'..='5' => 166u32,
_ => return false,
},
172u32 => match token {
'!'
| '$'
| '&'..='-'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 176u32,
_ => return false,
},
173u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 176u32,
'0'..='9' => 175u32,
_ => return false,
},
174u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 176u32,
'0'..='4' => 175u32,
'5' => 177u32,
'6'..='9' => 172u32,
_ => return false,
},
175u32 => match token {
'!' | '$' | '&'..='-' | ';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 1u32,
'%' => 2u32,
'.' => 176u32,
'0'..='9' => 172u32,
_ => return false,
},
176u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='1'
| '3'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'2' => 178u32,
_ => return false,
},
177u32 => match token {
'!'
| '$'
| '&'..='-'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'.' => 176u32,
'0'..='5' => 172u32,
_ => return false,
},
178u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='4'
| '6'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
'5' => 179u32,
_ => return false,
},
179u32 => match token {
'!'
| '$'
| '&'..='.'
| '0'..='9'
| ';'
| '='
| 'A'..='Z'
| '_'
| 'a'..='z'
| '~' => 1u32,
'%' => 2u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(
self.state,
0u32 | 1u32
| 3u32 | 4u32
| 5u32 | 6u32
| 9u32 | 10u32
| 20u32 | 166u32
| 167u32 | 168u32
| 169u32 | 170u32
| 171u32 | 172u32
| 173u32 | 174u32
| 175u32 | 176u32
| 177u32 | 178u32
| 179u32
)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct UserInfo {
state: u32,
}
impl UserInfo {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | 'A'..='Z' | '_' | 'a'..='z' | '~' => 0u32,
'%' => 1u32,
_ => return false,
},
1u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 2u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 0u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(self.state, 0u32)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct Path {
state: u32,
}
impl Path {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..=';' | '=' | '@'..='Z' | '_' | 'a'..='z' | '~' => 0u32,
'%' => 1u32,
_ => return false,
},
1u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 2u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 0u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(self.state, 0u32)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct Segment {
state: u32,
}
impl Segment {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..='.' | '0'..=';' | '=' | '@'..='Z' | '_' | 'a'..='z' | '~' => 0u32,
'%' => 1u32,
_ => return false,
},
1u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 2u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 0u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(self.state, 0u32)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct Query {
state: u32,
}
impl Query {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 0u32,
'%' => 1u32,
_ => return false,
},
1u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 2u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 0u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(self.state, 0u32)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}
pub struct Fragment {
state: u32,
}
impl Fragment {
pub const fn new() -> Self {
Self { state: 0u32 }
}
pub const fn push(&mut self, token: char) -> bool {
self.state = match self.state {
0u32 => match token {
'!' | '$' | '&'..=';' | '=' | '?'..='Z' | '_' | 'a'..='z' | '~' => 0u32,
'%' => 1u32,
_ => return false,
},
1u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 2u32,
_ => return false,
},
2u32 => match token {
'0'..='9' | 'A'..='F' | 'a'..='f' => 0u32,
_ => return false,
},
_ => return false,
};
true
}
pub const fn is_accepting(&self) -> bool {
matches!(self.state, 0u32)
}
pub const fn validate_str(s: &str) -> bool {
Self::validate_bytes(s.as_bytes())
}
pub const fn validate_bytes(bytes: &[u8]) -> bool {
let mut i = 0;
let mut automaton = Self::new();
while i < bytes.len() {
match ::static_automata::decode_utf8_char(bytes, i) {
Ok((c, len)) => {
if !automaton.push(c) {
return false;
}
i += len;
}
Err(_) => return false,
}
}
automaton.is_accepting()
}
}