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
7enum OperatorTokens {
8 Equal,
10 NotEqual,
12}
13
14impl Match<u8> for OperatorTokens {
15 fn matcher(&self, data: &[u8]) -> (bool, usize) {
16 match self {
17 OperatorTokens::Equal => match_pattern(b"==", data),
18 OperatorTokens::NotEqual => match_pattern(b"!=", data),
19 }
20 }
21}
22
23impl MatchSize for OperatorTokens {
24 fn size(&self) -> usize {
25 match self {
26 OperatorTokens::Equal => 2,
27 OperatorTokens::NotEqual => 2,
28 }
29 }
30}
31
32fn main() -> ParseResult<()> {
33 let data = b"== 2";
34 let mut scanner = Scanner::new(data);
35 let recognized = Recognizer::new(&mut scanner)
36 .try_or(OperatorTokens::NotEqual)?
37 .try_or(OperatorTokens::Equal)?
38 .finish()
39 .ok_or(ParseError::UnexpectedToken)?;
40
41 println!("{}", String::from_utf8_lossy(recognized)); let data = b"!= 2";
44 let mut scanner = Scanner::new(data);
45 let recognized = Recognizer::new(&mut scanner)
46 .try_or(OperatorTokens::NotEqual)?
47 .try_or(OperatorTokens::Equal)?
48 .finish()
49 .ok_or(ParseError::UnexpectedToken)?;
50
51 println!("{}", String::from_utf8_lossy(recognized)); let data = b"> 2";
54 let mut scanner = Scanner::new(data);
55 let recognized = Recognizer::new(&mut scanner)
56 .try_or(OperatorTokens::NotEqual)?
57 .try_or(OperatorTokens::Equal)?
58 .finish()
59 .ok_or(ParseError::UnexpectedToken);
60
61 println!("{:?}", recognized); Ok(())
64}