turbofish_data/
turbofish_data.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::visitor::Visitor;
6
7#[derive(Debug)]
8#[allow(dead_code)]
9struct Turbofish(usize);
10
11// Implement the `Visitor` trait for the turbofish operator.
12impl<'a> Visitor<'a, u8> for Turbofish {
13    fn accept(scanner: &mut noa_parser::scanner::Scanner<u8>) -> ParseResult<Self> {
14        // recognize the turbofish operator start "::<".
15        recognize(Token::Colon, scanner)?;
16        recognize(Token::Colon, scanner)?;
17        recognize(Token::LessThan, scanner)?;
18        // recognize the number
19        let number = Number::accept(scanner)?.0;
20        // recognize the turbofish operator end ">"
21        recognize(Token::GreaterThan, scanner)?;
22        Ok(Turbofish(number))
23    }
24}
25
26fn main() {
27    let data = b"::<45>garbage";
28    let mut scanner = noa_parser::scanner::Scanner::new(data);
29    let result = Turbofish::accept(&mut scanner);
30    println!("{:?}", result); // Ok(Turbofish(45))
31}