number/
number.rs

1use noa_parser::bytes::matchers::match_number;
2use noa_parser::matcher::{Match, MatchSize};
3use noa_parser::recognizer::Recognizable;
4
5struct TokenNumber;
6
7/// Implement the `Match` trait for the token number.
8impl Match<u8> for TokenNumber {
9    fn matcher(&self, data: &[u8]) -> (bool, usize) {
10        match_number(data)
11    }
12}
13
14/// Implement the `MatchSize` trait for the token number.
15impl MatchSize for TokenNumber {
16    fn size(&self) -> usize {
17        0
18    }
19}
20
21fn main() {
22    let data = b"123abc";
23    let mut scanner = noa_parser::scanner::Scanner::new(data);
24    let result = TokenNumber.recognize(&mut scanner);
25    println!("{:?}", result); // Ok(Some([49, 50, 51]))
26    // If the result is successful
27    if let Ok(Some(data)) = result {
28        // Convert the data to a string
29        let str_data = std::str::from_utf8(data).unwrap();
30        // Convert the string to a number
31        let result = str_data.parse::<usize>().unwrap();
32        println!("{}", result); // 123
33    }
34}