use binrw::{BinRead, BinWrite, binrw};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[binrw]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(transparent))]
#[derive(Debug)]
pub struct BinaryDataChunkHolder<T>
where
T: BinRead + BinWrite + ChunkHolder + 'static,
T: for<'a> BinRead<Args<'a> = ()>,
T: for<'a> BinWrite<Args<'a> = ()>,
{
#[br(temp)]
#[bw(calc = T::VERSION)]
_version: u8,
#[br(temp)]
#[bw(calc = chunks.len() as u8)]
chunk_num: u8,
#[br(temp)]
#[bw(calc = [0u8, 0u8])]
_reserved: [u8; 2],
#[br(count = chunk_num as usize)]
#[brw(pad_size_to = T::BUFFER_SIZE - size_of::<u32>())]
pub chunks: Vec<T>,
}
pub trait ChunkHolder {
const BUFFER_SIZE: usize;
const VERSION: u8;
}