use crate::{header, program_header, section};

/// the entire of ELF file.
pub enum ElfFile {
    /// 64bit representation
    Elf64(Elf64File),
    /// 32bit representation
    Elf32,
}

/// the entire ELF64 file.
pub struct Elf64File {
    /// ELF header.
    pub header: header::Elf64Header,
    /// ELF program header table.
    pub program_headers: program_header::Elf64ProgramHeaderTable,
    // ELF section header table.
    // pub section_headers: section::RawElf64SectionHeaderTable,
    // ELF sections.
    // pub sections: section::RawElf64Sections,
}

/// the raw version of entire ELF file.
pub enum RawElfFile {
    /// 64bit representation
    Elf64(RawElf64File),
    /// 32bit representation
    Elf32,
}

/// the raw representation of entire ELF64 file.
pub struct RawElf64File {
    /// ELF header.
    pub header: header::RawElf64Header,
    /// ELF program header table.
    pub program_headers: program_header::RawElf64ProgramHeaderTable,
    /// ELF section header table.
    pub section_headers: section::RawElf64SectionHeaderTable,
    /// ELF sections.
    pub sections: section::RawElf64Sections,
}
