vault/data/chunks/
chunk.rs1use 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}