//! The header item: <https://source.android.com/docs/core/runtime/dex-format#header-item>

use crate as androscalpel_serializer;
use crate::{DexFileMagic, EndianConstant, Serializable};

/// <https://source.android.com/docs/core/runtime/dex-format#header-item>
/// alignment: 4 bytes
#[derive(Serializable, Clone, PartialEq, Eq, Debug)]
pub struct HeaderItem {
    pub magic: DexFileMagic,
    pub checksum: u32,
    pub signature: [u8; 20],
    pub file_size: u32,
    pub header_size: u32, // should be = 0x70
    pub endian_tag: EndianConstant,
    pub link_size: u32, // should be 0
    pub link_off: u32,  // should be 0
    pub map_off: u32,
    pub string_ids_size: u32,
    pub string_ids_off: u32,
    pub type_ids_size: u32, // At most 0xffff
    pub type_ids_off: u32,
    pub proto_ids_size: u32, // At most 0xffff
    pub proto_ids_off: u32,
    pub field_ids_size: u32,
    pub field_ids_off: u32,
    pub method_ids_size: u32,
    pub method_ids_off: u32,
    pub class_defs_size: u32,
    pub class_defs_off: u32,
    pub data_size: u32, // Must be an even multiple of sizeof(uint) -> % 8 = 0
    pub data_off: u32,
}

// TODO: add checks
