1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
pub mod size;
pub mod voxel;
use {Size, Voxel};
use model::size::parse_size;
use model::voxel::parse_voxels;
use nom::le_u32;
#[derive(Debug, PartialEq)]
pub struct Model {
pub size: Size,
pub voxels: Vec<Voxel>,
}
named!(parse_model <&[u8], Model>, do_parse!(
size: parse_size >>
voxels: parse_voxels >>
(Model { size: size, voxels: voxels })
));
named!(parse_models <&[u8], Vec<Model> >, do_parse!(
take!(12) >>
model_count: le_u32 >>
models: many_m_n!(model_count as usize, model_count as usize, parse_model) >>
(models)
));
named!(pub extract_models <&[u8], Vec<Model> >, switch!(peek!(take!(4)),
b"PACK" => call!(parse_models) |
b"SIZE" => map!(parse_model, |m| vec!(m))
));