1use crate::{Line, Parse};
2
3use nom::{combinator::map, multi::length_count, number::complete::le_u32};
4
5#[derive(Debug, PartialEq)]
7pub struct Layer {
8 pub lines: Vec<Line>,
9}
10
11impl<'i> Parse<'i> for Layer {
12 fn parse(input: &'i [u8]) -> nom::IResult<&'i [u8], Self> {
17 map(length_count(le_u32, Line::parse), |lines| Layer { lines })(input)
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24
25 #[test]
26 fn test_parse() {
27 let bytes = include_bytes!("../data/test-layer.rm");
28
29 let res = Layer::parse(bytes);
30 assert!(res.is_ok());
31
32 let (rest, layer) = res.unwrap();
33 assert_eq!(rest, &[][..]);
34 assert_eq!(layer.lines.len(), 2);
35 }
36}