github_bin_downloader/
sysinfo.rs1use nix::sys::utsname;
2
3pub const APPLE: [&str; 4] = ["macos", "darwin", "mac", "dmg"];
4pub const LINUX: [&str; 1] = ["linux"];
5pub const AMD64: [&str; 4] = ["x64", "x86_64", "amd64", "64bit"];
6pub const ARM64: [&str; 2] = ["aarch64", "arm64"];
7
8#[derive(Debug, Default)]
9pub struct SystemInfo {
10 pub arch: String,
11 pub os: String,
12}
13
14#[derive(Debug)]
15pub enum PlatformOS {
16 Windows,
17 Linux,
18 Darwin,
19 Unknown,
20}
21
22#[derive(Debug)]
23pub enum PlatformArch {
24 X8664,
25 Arm64,
26 Unknown,
27}
28
29impl SystemInfo {
30 pub fn new() -> Self {
31 let uts_name = utsname::uname();
32 Self {
33 os: uts_name.sysname().to_lowercase(),
34 arch: uts_name.machine().to_lowercase(),
35 }
36 }
37
38 pub fn platform_os(&self) -> PlatformOS {
39 for apple in APPLE.iter() {
40 if self.os.contains(apple) {
41 return PlatformOS::Darwin;
42 }
43 }
44 for linux in LINUX.iter() {
45 if self.os.contains(linux) {
46 return PlatformOS::Linux;
47 }
48 }
49 PlatformOS::Unknown
50 }
51
52 pub fn platform_arch(&self) -> PlatformArch {
53 for amd64 in AMD64.iter() {
54 if self.arch.contains(amd64) {
55 return PlatformArch::X8664;
56 }
57 }
58
59 for arm64 in ARM64.iter() {
60 if self.arch.contains(arm64) {
61 return PlatformArch::Arm64;
62 }
63 }
64 PlatformArch::Unknown
65 }
66}