virtfw-libefi 0.6.3

library to read + write efi data structures
Documentation
//! efi architectures

#[cfg(feature = "std")]
extern crate std;
#[cfg(feature = "std")]
use clap::{builder::PossibleValue, ValueEnum};

#[derive(Debug, Clone, Copy)]
pub enum EfiArch {
    X64,
    Aa64,
}

impl EfiArch {
    pub fn name(self) -> &'static str {
        match self {
            EfiArch::X64 => "x64",
            EfiArch::Aa64 => "aa64",
        }
    }

    pub fn name_uc(self) -> &'static str {
        match self {
            EfiArch::X64 => "X64",
            EfiArch::Aa64 => "AA64",
        }
    }

    #[cfg(target_arch = "aarch64")]
    pub fn native() -> Self {
        EfiArch::Aa64
    }

    #[cfg(target_arch = "x86_64")]
    pub fn native() -> Self {
        EfiArch::X64
    }
}

#[cfg(feature = "std")]
impl ValueEnum for EfiArch {
    fn value_variants<'a>() -> &'a [Self] {
        static VARIANTS: [EfiArch; 2] = [EfiArch::Aa64, EfiArch::X64];
        &VARIANTS
    }

    fn to_possible_value(&self) -> Option<PossibleValue> {
        let pv = match self {
            EfiArch::Aa64 => PossibleValue::new("aa64").aliases(["AA64", "aarch64", "arm64"]),
            EfiArch::X64 => PossibleValue::new("x64").aliases(["X64", "x86_64", "amd64"]),
        };
        Some(pv)
    }
}