1use elyze::bytes::matchers::match_pattern;
2use elyze::errors::{ParseError, ParseResult};
3use elyze::matcher::Match;
4use elyze::recognizer::Recognizer;
5use elyze::scanner::Scanner;
6
7#[derive(Debug)]
8enum OperatorTokens {
9 Equal,
11 NotEqual,
13}
14
15impl Match<u8> for OperatorTokens {
16 fn is_matching(&self, data: &[u8]) -> (bool, usize) {
17 match self {
18 OperatorTokens::Equal => match_pattern(b"==", data),
19 OperatorTokens::NotEqual => match_pattern(b"!=", data),
20 }
21 }
22
23 fn size(&self) -> usize {
24 match self {
25 OperatorTokens::Equal => 2,
26 OperatorTokens::NotEqual => 2,
27 }
28 }
29}
30
31fn main() -> ParseResult<()> {
32 let data = b"== 2";
33 let mut scanner = Scanner::new(data);
34 let recognized = Recognizer::new(&mut scanner)
35 .try_or(OperatorTokens::NotEqual)?
36 .try_or(OperatorTokens::Equal)?
37 .finish()
38 .ok_or(ParseError::UnexpectedToken)?;
39
40 println!("{:?}", recognized); let data = b"!= 2";
43 let mut scanner = Scanner::new(data);
44 let recognized = Recognizer::new(&mut scanner)
45 .try_or(OperatorTokens::NotEqual)?
46 .try_or(OperatorTokens::Equal)?
47 .finish()
48 .ok_or(ParseError::UnexpectedToken)?;
49
50 println!("{:?}", recognized); let data = b"> 2";
53 let mut scanner = Scanner::new(data);
54 let recognized = Recognizer::new(&mut scanner)
55 .try_or(OperatorTokens::NotEqual)?
56 .try_or(OperatorTokens::Equal)?
57 .finish()
58 .ok_or(ParseError::UnexpectedToken);
59
60 println!("{:?}", recognized); Ok(())
63}