diff --git a/src/lib.rs b/src/lib.rs index 3adfc3b..27e452c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -168,20 +168,20 @@ impl Level { } fn read_rle(map: &str) -> std::result::Result { - let mut n: usize = 1; - Self::read( map.chars() - .filter_map(|c| match c { - '0'..='9' => { - n = c.to_digit(10).unwrap() as usize; - None - } - '|' => Some("\n".into()), - _ => Some(c.to_string().repeat(n)), + .scan(1, |n, c| { + Some(match c { + '0'..='9' => { + *n = c.to_digit(10).unwrap() as usize; + None + } + '|' => Some("\n".to_string()), + _ => Some(c.to_string().repeat(*n)), + }) }) - .collect::>() - .join("") + .flatten() + .collect::() .as_bytes(), ) }