#[derive(Clone, Debug, derive_more::Display)]
pub enum Platform {
#[display("Windows")]
Windows,
#[display("Linux")]
Linux,
#[display("Mac")]
Mac,
#[display("Unknown(os={_0})")]
Unknown(String),
}
#[derive(Clone, Debug, derive_more::Display)]
pub enum Architecture {
#[display("x64")]
X64,
#[display("x86")]
X86,
#[display("Armv7l")]
Armv7l,
#[display("Aarch64")]
Aarch64,
#[display("Unknown(arch={_0})")]
Unknown(String),
}
impl Platform {
pub fn as_str(&self) -> &str {
match self {
Platform::Windows => "windows",
Platform::Linux => "linux",
Platform::Mac => "osx",
Platform::Unknown(s) => s,
}
}
pub fn detect() -> Self {
tracing::debug!("⚙️ Detecting current platform");
let os = std::env::consts::OS;
tracing::debug!(os = os, "✅ Detected platform");
match os {
"windows" => Platform::Windows,
"linux" => Platform::Linux,
"macos" => Platform::Mac,
_ => Platform::Unknown(os.to_string()),
}
}
}
impl Architecture {
pub fn as_str(&self) -> &str {
match self {
Architecture::X64 => "x64",
Architecture::X86 => "x86",
Architecture::Armv7l => "armv7l",
Architecture::Aarch64 => "arm64",
Architecture::Unknown(s) => s,
}
}
pub fn detect() -> Self {
tracing::debug!("⚙️ Detecting current architecture");
let arch = std::env::consts::ARCH;
tracing::debug!(arch = arch, "✅ Detected architecture");
match arch {
"x86_64" => Architecture::X64,
"x86" => Architecture::X86,
"armv7l" => Architecture::Armv7l,
"aarch64" => Architecture::Aarch64,
_ => Architecture::Unknown(arch.to_string()),
}
}
}