vault/data/chunks/
chunk.rs

1use crate::data::chunks::{
2    DataAutoChunk, DataDataChunk, DataSdscChunk, FoldChunk, Header, TrashDataChunk,
3};
4use crate::data::{ParserResult, Span};
5
6#[derive(Debug)]
7pub enum Chunk {
8    Fold(FoldChunk),
9    Data(#[allow(unused)] TrashDataChunk),
10    DataAuto(DataAutoChunk),
11    DataData(DataDataChunk),
12    DataSdsc(DataSdscChunk),
13}
14
15impl Chunk {
16    pub fn parse(version: u16) -> impl FnMut(Span) -> ParserResult<Chunk> {
17        move |input: Span| {
18            let (input, header) = Header::parse(input)?;
19
20            match &header.chunk_kind as &str {
21                "DATA" => match &header.chunk_type as &str {
22                    "AUTO" => DataAutoChunk::parse(input, header),
23                    "DATA" => DataDataChunk::parse(input, header),
24                    "SDSC" => DataSdscChunk::parse(input, header),
25                    _ => TrashDataChunk::parse(input, header),
26                },
27                "FOLD" => FoldChunk::parse(input, header, version),
28                _ => panic!(),
29            }
30        }
31    }
32}