extern crate alloc;
use alloc::vec::Vec;
#[cfg(feature = "parse")] pub mod parse;
#[derive(Debug, Clone, PartialEq)]
pub struct LocalFileHeaderFixed {
pub local_file_header_signature: u32,
pub version_needed_to_extract: u16,
pub general_purpose_bit_flag: u16,
pub compression_method: u16,
pub last_mod_file_time: u16,
pub last_mod_file_date: u16,
pub crc_32: u32,
pub compressed_size: u32,
pub uncompressed_size: u32,
pub file_name_length: u16,
pub extra_field_length: u16,
}
#[derive(Debug, Clone, PartialEq)]
pub struct LocalFileHeader {
pub fixed: LocalFileHeaderFixed,
pub file_name: Vec<u8>,
pub extra_field: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct DataDescriptor {
pub crc_32: u32,
pub compressed_size: u32,
pub uncompressed_size: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct DataDescriptorSignature {
pub signature: u32,
pub crc_32: u32,
pub compressed_size: u32,
pub uncompressed_size: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct DataDescriptorZip64 {
pub crc_32: u32,
pub compressed_size: u64,
pub uncompressed_size: u64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct DataDescriptorZip64Signature {
pub signature: u32,
pub crc_32: u32,
pub compressed_size: u64,
pub uncompressed_size: u64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ArchiveExtraDataRecordFixed {
pub archive_extra_data_signature: u32,
pub extra_field_length: u64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ArchiveExtraDataRecord {
pub fixed: ArchiveExtraDataRecordFixed,
pub extra_field_data: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CentralDirectoryHeaderFixed {
pub central_file_header_signature: u32,
pub version_made_by: u16,
pub version_needed_to_extract: u16,
pub general_purpose_bit_flag: u16,
pub compression_method: u16,
pub last_mod_file_time: u16,
pub last_mod_file_date: u16,
pub crc_32: u32,
pub compressed_size: u32,
pub uncompressed_size: u32,
pub file_name_length: u16,
pub extra_field_length: u16,
pub file_comment_length: u16,
pub disk_number_start: u16,
pub internal_file_attributes: u16,
pub external_file_attributes: u32,
pub relative_offset_of_local_header: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CentralDirectoryHeader {
pub fixed: CentralDirectoryHeaderFixed,
pub file_name: Vec<u8>,
pub extra_field: Vec<u8>,
pub file_comment: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct DigitalSignatureFixed {
pub header_signature: u32,
pub size_of_data: u16,
}
#[derive(Debug, Clone, PartialEq)]
pub struct DigitalSignature {
pub fixed: DigitalSignatureFixed,
pub signature_data: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Zip64EndOfCentralDirectoryFixed {
pub zip64_end_of_central_dir_signature: u32,
pub size_of_zip64_end_of_central_directory_record: u64,
pub version_made_by: u16,
pub version_needed_to_extract: u16,
pub number_of_this_disk: u32,
pub number_of_the_disk_with_the_start_of_the_central_directory: u32,
pub total_number_of_entries_in_the_central_directory_on_this_disk: u64,
pub total_number_of_entries_in_the_central_directory: u64,
pub size_of_the_central_directory: u64,
pub offset_of_start_of_central_directory_with_respect_to_the_starting_disk_number: u64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Zip64EndOfCentralDirectory {
pub fixed: Zip64EndOfCentralDirectoryFixed,
pub zip64_extensible_data_sector: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Zip64EndOfCentralDirectoryLocator {
pub zip64_end_of_central_dir_locator_signature: u32,
pub number_of_the_disk_with_the_start_of_the_central_directory: u32,
pub relative_offset_of_the_zip64_end_of_central_directory_record: u64,
pub number_of_this_disk: u32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct EndOfCentralDirectoryFixed {
pub end_of_central_dir_signature: u32,
pub number_of_this_disk: u16,
pub number_of_the_disk_with_the_start_of_the_central_directory: u16,
pub total_number_of_entries_in_the_central_directory_on_this_disk: u16,
pub total_number_of_entries_in_the_central_directory: u16,
pub size_of_the_central_directory: u32,
pub offset_of_start_of_central_directory_with_respect_to_the_starting_disk_number: u32,
pub zip_file_comment_length: u16,
}
#[derive(Debug, Clone, PartialEq)]
pub struct EndOfCentralDirectory {
pub fixed: EndOfCentralDirectoryFixed,
pub zip_file_comment: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ExtensibleDataFixed {
pub header_id: u16,
pub data_size: u16,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ExtensibleData {
pub fixed: ExtensibleDataFixed,
pub data: Vec<u8>,
}
impl LocalFileHeaderFixed {
pub const LOCAL_FILE_HEADER_SIGNATURE: u32 = 0x04034b50;
pub const SIZE_IN_BYTES: usize = 30;
}
impl DataDescriptor {
pub const SIGNATURE: u32 = 0x08074b50;
pub const SIZE_IN_BYTES: usize = 12;
}
impl DataDescriptorSignature {
pub const SIZE_IN_BYTES: usize = 16;
}
impl DataDescriptorZip64 {
pub const SIZE_IN_BYTES: usize = 20;
}
impl DataDescriptorZip64Signature {
pub const SIZE_IN_BYTES: usize = 24;
}
impl ArchiveExtraDataRecordFixed {
pub const SIZE_IN_BYTES: usize = 12;
}
impl ArchiveExtraDataRecordFixed {
pub const ARCHIVE_EXTRA_DATE_SIGNATURE: u32 = 0x08064b50;
}
impl CentralDirectoryHeaderFixed {
pub const CENTRAL_FILE_HEADER_SIGNATURE: u32 = 0x02014b50;
pub const SIZE_IN_BYTES: usize = 46;
}
impl DigitalSignatureFixed {
pub const HEADER_SIGNATURE: u32 = 0x05054b50;
pub const SIZE_IN_BYTES: usize = 6;
}
impl Zip64EndOfCentralDirectoryFixed {
pub const SIZE_IN_BYTES: usize = 56;
pub const ZIP64_END_OF_CENTRAL_DIR_SIGNATURE: u32 = 0x06064b50;
}
impl Zip64EndOfCentralDirectoryLocator {
pub const SIZE_IN_BYTES: usize = 20;
pub const ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE: u32 = 0x07064b50;
}
impl EndOfCentralDirectoryFixed {
pub const END_OF_CENTRAL_DIR_SIGNATURE: u32 = 0x06054b50;
pub const SIZE_IN_BYTES: usize = 22;
}
impl ExtensibleDataFixed {
pub const SIZE_IN_BYTES: usize = 4;
}