github-bin-downloader 0.1.2

Download binary for your OS from Github.
Documentation
use nix::sys::utsname;

pub const APPLE: [&str; 4] = ["macos", "darwin", "mac", "dmg"];
pub const LINUX: [&str; 1] = ["linux"];
pub const AMD64: [&str; 4] = ["x64", "x86_64", "amd64", "64bit"];
pub const ARM64: [&str; 2] = ["aarch64", "arm64"];

#[derive(Debug, Default)]
pub struct SystemInfo {
    pub arch: String,
    pub os: String,
}

#[derive(Debug)]
pub enum PlatformOS {
    Windows,
    Linux,
    Darwin,
    Unknown,
}

#[derive(Debug)]
pub enum PlatformArch {
    X8664,
    Arm64,
    Unknown,
}

impl SystemInfo {
    pub fn new() -> Self {
        let uts_name = utsname::uname();
        Self {
            os: uts_name.sysname().to_lowercase(),
            arch: uts_name.machine().to_lowercase(),
        }
    }

    pub fn platform_os(&self) -> PlatformOS {
        for apple in APPLE.iter() {
            if self.os.contains(apple) {
                return PlatformOS::Darwin;
            }
        }
        for linux in LINUX.iter() {
            if self.os.contains(linux) {
                return PlatformOS::Linux;
            }
        }
        PlatformOS::Unknown
    }

    pub fn platform_arch(&self) -> PlatformArch {
        for amd64 in AMD64.iter() {
            if self.arch.contains(amd64) {
                return PlatformArch::X8664;
            }
        }

        for arm64 in ARM64.iter() {
            if self.arch.contains(arm64) {
                return PlatformArch::Arm64;
            }
        }
        PlatformArch::Unknown
    }
}