From 743f1e46fcb184fb9033e21a9085e50390f81a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Christian=20Gr=C3=BCnhage?= Date: Sat, 11 Dec 2021 14:46:53 +0100 Subject: [PATCH] add helper method for parsing exactly N of something --- src/parsing.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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;