use binrw::{BinRead, BinWrite, binrw}; pub trait IpcSegmentTrait: for<'a> BinRead = ()> + for<'a> BinWrite = ()> + std::fmt::Debug + 'static { fn calc_size(&self) -> u32; } #[binrw] #[derive(Debug, Clone)] pub struct IpcSegment where for<'a> OpCode: BinRead = ()> + 'a + std::fmt::Debug, for<'a> OpCode: BinWrite = ()> + 'a + std::fmt::Debug, for<'a> Data: BinRead = (&'a OpCode,)> + 'a + std::fmt::Debug, for<'a> Data: BinWrite = ()> + 'a + std::fmt::Debug, { pub unk1: u8, pub unk2: u8, #[br(dbg)] pub op_code: OpCode, #[brw(pad_before = 2)] // empty #[br(dbg)] pub server_id: u16, #[br(dbg)] pub timestamp: u32, #[brw(pad_before = 4)] #[br(args(&op_code))] pub data: Data, }