ziyy_core/scanner/source.rs
1pub trait Source<T: PartialEq> {
2 fn null(&self) -> T;
3 fn nl(&self) -> T;
4 fn len(&self) -> usize;
5 fn at(&self, i: usize) -> T;
6}
7
8impl Source<char> for Vec<char> {
9 fn null(&self) -> char {
10 '\0'
11 }
12
13 fn nl(&self) -> char {
14 '\n'
15 }
16
17 fn len(&self) -> usize {
18 self.as_slice().len()
19 }
20
21 fn at(&self, i: usize) -> char {
22 self[i]
23 }
24}
25
26impl Source<u8> for Vec<u8> {
27 fn null(&self) -> u8 {
28 b'\0'
29 }
30
31 fn nl(&self) -> u8 {
32 b'\n'
33 }
34
35 fn len(&self) -> usize {
36 self.as_slice().len()
37 }
38
39 fn at(&self, i: usize) -> u8 {
40 self[i]
41 }
42}