noa_parser/bytes/
recognizer.rs1use crate::errors::{ParseError, ParseResult};
2use crate::matcher::{Match, MatchSize};
3use crate::recognizer::Recognizable;
4use crate::scanner::Scanner;
5
6impl<'a, M: Match<u8> + MatchSize> Recognizable<'a, u8, &'a [u8]> for M {
9 fn recognize(self, scanner: &mut Scanner<'a, u8>) -> ParseResult<Option<&'a [u8]>> {
10 if scanner.is_empty() {
11 return Err(ParseError::UnexpectedEndOfInput);
12 }
13
14 let data = scanner.remaining();
15
16 let (result, size) = self.matcher(data);
17 if !result {
18 return Ok(None);
19 }
20 let curent_position = scanner.current_position();
21 if !scanner.is_empty() {
22 scanner.bump_by(size);
23 }
24 Ok(Some(
25 &scanner.data()[curent_position..curent_position + size],
26 ))
27 }
28}