use binrw::BinRead;
use std::io::Cursor;
use super::SqpackFile;
#[derive(BinRead, Debug, Clone, PartialEq, Eq)]
#[br(big)]
pub struct SqpkDeleteData {
#[br(pad_before = 3)]
pub target_file: SqpackFile,
#[br(map = |raw: u32| (raw as u64) << 7)]
pub block_offset: u64,
#[br(pad_after = 4)]
pub block_count: u32,
}
pub(crate) fn parse(body: &[u8]) -> crate::Result<SqpkDeleteData> {
Ok(SqpkDeleteData::read_be(&mut Cursor::new(body))?)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_delete_data() {
let mut body = Vec::new();
body.extend_from_slice(&[0u8; 3]); body.extend_from_slice(&4u16.to_be_bytes()); body.extend_from_slice(&5u16.to_be_bytes()); body.extend_from_slice(&6u32.to_be_bytes()); body.extend_from_slice(&2u32.to_be_bytes()); body.extend_from_slice(&7u32.to_be_bytes()); body.extend_from_slice(&[0u8; 4]);
let cmd = parse(&body).unwrap();
assert_eq!(cmd.target_file.main_id, 4);
assert_eq!(cmd.block_offset, 256);
assert_eq!(cmd.block_count, 7);
}
}