use yap::Tokens; use crate::parsing::{newline, parse_digit}; use super::HeightMap; pub fn parse_map(tokens: &mut impl Tokens) -> HeightMap { let map: Vec> = tokens.sep_by(|t| parse_line(t), |t| newline(t)).collect(); HeightMap::new(map) } pub fn parse_line(tokens: &mut impl Tokens) -> Option> { let digits: Vec = tokens.many(|t| parse_digit(t)).collect(); if digits.is_empty() { None } else { Some(digits) } } #[cfg(test)] mod test { use yap::IntoTokens; #[test] fn parse_line() { assert_eq!( dbg!(super::parse_line(&mut "2199943210".into_tokens()).unwrap()).len(), 10 ) } #[test] fn parse_map() { super::parse_map(&mut "01\n11".into_tokens()); } }