separated_list/
separated_list.rs

1use noa_parser::bytes::primitives::number::Number;
2use noa_parser::bytes::token::Token;
3use noa_parser::errors::ParseResult;
4use noa_parser::recognizer::recognize;
5use noa_parser::scanner::Scanner;
6use noa_parser::separated_list::SeparatedList;
7use noa_parser::visitor::Visitor;
8
9#[derive(Debug)]
10struct Separator;
11
12impl<'a> Visitor<'a, u8> for Separator {
13    fn accept(scanner: &mut noa_parser::scanner::Scanner<u8>) -> ParseResult<Self> {
14        recognize(Token::Tilde, scanner)?;
15        recognize(Token::Tilde, scanner)?;
16        recognize(Token::Tilde, scanner)?;
17        Ok(Separator)
18    }
19}
20
21fn main() {
22    let data = b"1~~~2~~~3~~~4";
23    let mut scanner = Scanner::new(data);
24    let result =
25        SeparatedList::<u8, Number<usize>, Separator>::accept(&mut scanner).map(|x| x.data);
26    println!("{:?}", result); // Ok([Number(1), Number(2), Number(3), Number(4)])
27}