lightwave_3d/
iff.rs

1use binrw::{binread, BinRead};
2use std::ops::Deref;
3
4#[binread]
5#[derive(Debug)]
6pub struct Chunk<D>
7where
8    for<'a> D: BinRead<Args<'a> = (u32,)>,
9{
10    pub length: u32,
11    #[br(pad_size_to = length, align_after = 2, args(length))]
12    pub data: D,
13}
14
15impl<D> Deref for Chunk<D>
16where
17    for<'a> D: BinRead<Args<'a> = (u32,)>,
18{
19    type Target = D;
20
21    fn deref(&self) -> &Self::Target {
22        &self.data
23    }
24}
25
26#[binread]
27#[derive(Debug)]
28pub struct SubChunk<D>
29where
30    for<'a> D: BinRead<Args<'a> = (u32,)>,
31{
32    pub length: u16,
33    #[br(pad_size_to = length, align_after = 2, args(length as u32))]
34    pub data: D,
35}
36
37impl<D> Deref for SubChunk<D>
38where
39    for<'a> D: BinRead<Args<'a> = (u32,)>,
40{
41    type Target = D;
42
43    fn deref(&self) -> &Self::Target {
44        &self.data
45    }
46}