#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(u16)]
#[allow(clippy::upper_case_acronyms)]
pub enum MachineTypes {
AMD64 = object::pe::IMAGE_FILE_MACHINE_AMD64,
ARMNT = object::pe::IMAGE_FILE_MACHINE_ARMNT,
ARM64 = object::pe::IMAGE_FILE_MACHINE_ARM64,
ARM64EC = object::pe::IMAGE_FILE_MACHINE_ARM64EC,
ARM64X = 0xA64E,
I386 = object::pe::IMAGE_FILE_MACHINE_I386,
}
impl From<MachineTypes> for u16 {
fn from(val: MachineTypes) -> Self {
val as u16
}
}
impl TryInto<MachineTypes> for u16 {
type Error = ();
fn try_into(self) -> Result<MachineTypes, Self::Error> {
match self {
object::pe::IMAGE_FILE_MACHINE_AMD64 => Ok(MachineTypes::AMD64),
object::pe::IMAGE_FILE_MACHINE_ARMNT => Ok(MachineTypes::ARMNT),
object::pe::IMAGE_FILE_MACHINE_ARM64 => Ok(MachineTypes::ARM64),
object::pe::IMAGE_FILE_MACHINE_ARM64EC => Ok(MachineTypes::ARM64EC),
0xA64E => Ok(MachineTypes::ARM64X),
object::pe::IMAGE_FILE_MACHINE_I386 => Ok(MachineTypes::I386),
_ => Err(()),
}
}
}
pub fn is_arm64ec(machine: MachineTypes) -> bool {
machine == MachineTypes::ARM64EC || machine == MachineTypes::ARM64X
}
pub fn is_any_arm64(machine: MachineTypes) -> bool {
machine == MachineTypes::ARM64 || is_arm64ec(machine)
}
pub fn is_64_bit(machine: MachineTypes) -> bool {
machine == MachineTypes::AMD64 || is_any_arm64(machine)
}
#[derive(PartialEq, Eq, Copy, Clone)]
#[repr(u16)]
pub enum ImportType {
Code = 0,
Data = 1,
Const = 2,
}
impl From<ImportType> for u16 {
fn from(val: ImportType) -> Self {
val as u16
}
}
#[derive(PartialEq, Eq, Copy, Clone)]
#[repr(u16)]
pub enum ImportNameType {
Ordinal = 0,
Name = 1,
NameNoprefix = 2,
NameUndecorate = 3,
NameExportas = 4,
}
impl From<ImportNameType> for u16 {
fn from(val: ImportNameType) -> Self {
val as u16
}
}