diff --git a/src/parsing.rs b/src/parsing.rs index aea66a0..6ddd29c 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -1,4 +1,5 @@ use num::Num; +use std::fmt::Debug; use yap::{IntoTokens, Tokens}; pub fn space(tokens: &mut impl Tokens) -> bool { tokens.token(' ') @@ -36,6 +37,19 @@ pub fn parse_number_with_radix( } } +pub fn parse_n, const N: usize>( + tokens: &mut P, + parser: &dyn Fn(&mut P) -> Option, + separator: &dyn Fn(&mut P) -> bool, +) -> Option<[T; N]> { + let elements: Vec = tokens.sep_by(parser, separator).collect(); + if elements.len() != 10 { + None + } else { + Some(elements.try_into().unwrap()) + } +} + #[cfg(test)] mod test { use yap::IntoTokens;