noa_parser/bytes/primitives/
whitespace.rs1use crate::bytes::token::Token;
4use crate::errors::{ParseError, ParseResult};
5use crate::recognizer::Recognizable;
6use crate::scanner::Scanner;
7use crate::visitor::Visitor;
8
9pub struct Whitespaces;
11
12pub struct OptionalWhitespaces;
14
15impl<'a> Visitor<'a, u8> for Whitespaces {
16 fn accept(scanner: &mut Scanner<'a, u8>) -> ParseResult<Self> {
17 let mut found = false;
18 while Token::Whitespace.recognize(scanner)?.is_some() {
19 found = true;
20 }
21 if !found {
22 return Err(ParseError::UnexpectedToken);
23 }
24 Ok(Whitespaces)
25 }
26}
27
28impl<'a> Visitor<'a, u8> for OptionalWhitespaces {
29 fn accept(scanner: &mut Scanner<'a, u8>) -> ParseResult<Self> {
30 if scanner.is_empty() {
31 return Ok(OptionalWhitespaces);
32 }
33 while Token::Whitespace.recognize(scanner)?.is_some() {}
34 Ok(OptionalWhitespaces)
35 }
36}