aoc-rs-2021/src/parsing.rs
2021-12-04 23:49:22 +01:00

21 lines
566 B
Rust

use std::str::FromStr;
use yap::{IntoTokens, Tokens};
pub fn space(tokens: &mut impl Tokens<Item = char>) -> bool {
tokens.token(' ')
}
pub fn newline(tokens: &mut impl Tokens<Item = char>) -> bool {
tokens.tokens("\r\n".into_tokens()) || tokens.token('\n')
}
pub fn parse_number<T: FromStr>(tokens: &mut impl Tokens<Item = char>) -> Option<T> {
tokens.skip_tokens_while(|t| *t == ' ');
let digits: String = tokens.tokens_while(|c| c.is_digit(10)).collect();
if digits.len() > 0 {
digits.parse().ok()
} else {
None
}
}