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
37
use super::*;
use super::directory::*;
use super::header::*;
use types::*;

/// Parses a demo.
pub fn demo(input: &[u8]) -> IResult<&[u8], Demo, Error> {
    #[cfg_attr(rustfmt, rustfmt_skip)]
    do_parse!(input,
        header:    peek!(header)                                                         >>
        directory: call!(offset_directory_with_frames, header.directory_offset as usize) >>
        (
            Demo {
                header,
                directory,
            }
        )
    )
}

/// Parses a demo's header and directory, without parsing frame data.
///
/// Parsing frames usually takes a long time, so this function can be used when the frame data
/// isn't needed.
pub fn demo_without_frames(input: &[u8]) -> IResult<&[u8], Demo, Error> {
    #[cfg_attr(rustfmt, rustfmt_skip)]
    do_parse!(input,
        header:    peek!(header)                                             >>
        directory: call!(offset_directory, header.directory_offset as usize) >>
        (
            Demo {
                header,
                directory,
            }
        )
    )
}