use { crate::Error, serde::{Deserialize, Serialize}, std::{fmt, str}, }; #[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)] pub enum Arch { Any, Arm, Arm64, RiscV64, X86, X86_64, } impl fmt::Display for Arch { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "{}", match self { Self::Any => "any", Self::Arm => "armv7l", Self::Arm64 => "aarch64", Self::RiscV64 => "riscv64", Self::X86 => "i486", Self::X86_64 => "x86_64", } ) } } impl str::FromStr for Arch { type Err = Error; fn from_str(s: &str) -> Result { match s { "any" | "Any" | "noarch" => Ok(Self::Any), "armv7l" | "ArmV7L" | "Armv7L" => Ok(Self::Arm), "arm64" | "Arm64" | "aarch64" | "Aarch64" => Ok(Self::Arm64), "RiscV64" | "riscv64" => Ok(Self::RiscV64), "x86" | "X86" | "i486" => Ok(Self::X86), "X86_64" | "Amd64" | "x86_64" | "amd64" => Ok(Self::X86_64), _ => Err(Error::ParseArch), } } }