use crate::structs::{ByteOrder, Settings, StructResult, VariantIndexType}; use serde::{Deserialize, Serialize}; pub const FILE_HEADER_SIGNATURE: [u8; 4] = [0x50, 0x4b, 0x03, 0x04]; pub const FILE_HEADER_SIZE: usize = 30; pub const EOCDR_SIGNATURE: [u8; 4] = [0x50, 0x4b, 0x05, 0x06]; pub const EOCDR_SIZE: usize = 22; #[derive(Serialize, Deserialize)] pub struct Eocdr { pub eocdr_disk: u16, pub cd_disk: u16, pub cd_disk_records: u16, pub cd_records: u16, pub cd_size: u32, pub cd_pointer: u32, pub comment_len: u16, } pub const EOCDR64_LOCATOR_SIGNATURE: [u8; 4] = [0x50, 0x4b, 0x06, 0x07]; pub const EOCDR64_LOCATOR_SIZE: usize = 20; #[derive(Serialize, Deserialize)] pub struct Eocdr64Locator { pub eocdr64_disk: u32, pub eocdr64_pointer: u64, pub disks: u32, } pub const EOCDR64_SIGNATURE: [u8; 4] = [0x50, 0x4b, 0x06, 0x06]; pub const EOCDR64_SIZE: usize = 56; #[derive(Serialize, Deserialize)] pub struct Eocdr64 { pub eocdr64_size: u64, pub version: u16, pub version_needed: u16, pub eocdr64_disk: u32, pub cd_disk: u32, pub cd_disk_records: u64, pub cd_records: u64, pub cd_size: u64, pub cd_pointer: u64, } pub const CDR_SIGNATURE: [u8; 4] = [0x50, 0x4b, 0x01, 0x02]; pub const CDR_SIZE: usize = 46; #[derive(Serialize, Deserialize)] pub struct Cdr { pub version: u16, pub version_needed: u16, pub bit_flag: u16, pub compression_method: u16, pub dos_time: u16, pub dos_date: u16, pub crc: u32, pub compressed_size: u32, pub size: u32, pub name_len: u16, pub extra_field_len: u16, pub comment_len: u16, pub disk: u16, pub internal_attributes: u16, pub external_attributes: u32, pub header_pointer: u32, } #[derive(Serialize, Deserialize)] pub struct ExtraHeader { pub id: u16, pub size: u16, } #[derive(Serialize, Deserialize)] pub struct AesField { pub version: u16, pub id: [u8; 2], pub strength: u8, pub compression_method: u16, } #[inline] #[allow(dead_code)] pub fn serialize(object: &mut T) -> StructResult> { Settings::new(ByteOrder::Le, VariantIndexType::U8).serialize(object) } #[inline] pub fn deserialize<'de, T: Deserialize<'de>>(object: &'de [u8]) -> StructResult { Settings::new(ByteOrder::Le, VariantIndexType::U8).deserialize(object) }