1use noa_parser::bytes::matchers::match_pattern;
2use noa_parser::errors::{ParseError, ParseResult};
3use noa_parser::matcher::{Match, MatchSize};
4use noa_parser::recognizer::Recognizer;
5use noa_parser::scanner::Scanner;
6
7#[derive(Debug)]
8enum OperatorTokens {
9 Equal,
11 NotEqual,
13}
14
15impl Match<u8> for OperatorTokens {
16 fn matcher(&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
24impl MatchSize for OperatorTokens {
25 fn size(&self) -> usize {
26 match self {
27 OperatorTokens::Equal => 2,
28 OperatorTokens::NotEqual => 2,
29 }
30 }
31}
32
33fn main() -> ParseResult<()> {
34 let data = b"== 2";
35 let mut scanner = Scanner::new(data);
36 let recognized = Recognizer::new(&mut scanner)
37 .try_or(OperatorTokens::NotEqual)?
38 .try_or(OperatorTokens::Equal)?
39 .finish()
40 .ok_or(ParseError::UnexpectedToken)?;
41
42 println!("{:?}", recognized); let data = b"!= 2";
45 let mut scanner = Scanner::new(data);
46 let recognized = Recognizer::new(&mut scanner)
47 .try_or(OperatorTokens::NotEqual)?
48 .try_or(OperatorTokens::Equal)?
49 .finish()
50 .ok_or(ParseError::UnexpectedToken)?;
51
52 println!("{:?}", recognized); let data = b"> 2";
55 let mut scanner = Scanner::new(data);
56 let recognized = Recognizer::new(&mut scanner)
57 .try_or(OperatorTokens::NotEqual)?
58 .try_or(OperatorTokens::Equal)?
59 .finish()
60 .ok_or(ParseError::UnexpectedToken);
61
62 println!("{:?}", recognized); Ok(())
65}