pub const ELF_IDENT_DATA_INDEX: usize = 5;
pub const ELF_IDENT_DATA_NONE: u8 = 0;
pub const ELF_IDENT_DATA_2LSB: u8 = 1;
pub const ELF_IDENT_DATA_2MSB: u8 = 2;
pub const ELF_IDENT_DATA_NUM: u8 = 3;
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum ElfData {
None,
TwosComplementLSB,
TwosComplementMSB,
Num,
Any(u8),
}
impl std::fmt::Display for ElfData {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Self::None => "None".to_string(),
Self::TwosComplementLSB => "2's Complement Little Endian".to_string(),
Self::TwosComplementMSB => "2's Complement Big Endian".to_string(),
Self::Num => format!("Unknown!({})", ELF_IDENT_DATA_NUM),
Self::Any(v) => format!("Unknown!({})", v),
};
write!(f, "{}", s)
}
}
impl From<u8> for ElfData {
fn from(value: u8) -> Self {
match value {
ELF_IDENT_DATA_NONE => Self::None,
ELF_IDENT_DATA_2LSB => Self::TwosComplementLSB,
ELF_IDENT_DATA_2MSB => Self::TwosComplementMSB,
ELF_IDENT_DATA_NUM => Self::Num,
_ => Self::Any(value),
}
}
}
impl From<ElfData> for u8 {
fn from(value: ElfData) -> Self {
match value {
ElfData::None => ELF_IDENT_DATA_NONE,
ElfData::TwosComplementLSB => ELF_IDENT_DATA_2LSB,
ElfData::TwosComplementMSB => ELF_IDENT_DATA_2MSB,
ElfData::Num => ELF_IDENT_DATA_NUM,
ElfData::Any(v) => v,
}
}
}
impl Default for ElfData {
fn default() -> Self {
Self::None
}
}