Skip to main content

turbofish_data/
turbofish_data.rs

1use elyze::bytes::primitives::number::Number;
2use elyze::bytes::token::Token;
3use elyze::errors::ParseResult;
4use elyze::recognizer::recognize;
5use elyze::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 elyze::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 = elyze::scanner::Scanner::new(data);
29    let result = Turbofish::accept(&mut scanner);
30    println!("{:?}", result); // Ok(Turbofish(45))
31}