os_info/
os_type.rs

1use std::fmt::{self, Display, Formatter};
2
3/// A list of supported operating system types.
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
6#[allow(non_camel_case_types, clippy::upper_case_acronyms)]
7#[non_exhaustive]
8pub enum Type {
9    /// IBM AIX (<https://en.wikipedia.org/wiki/IBM_AIX>).
10    AIX,
11    /// AlmaLinux (<https://en.wikipedia.org/wiki/AlmaLinux>).
12    AlmaLinux,
13    /// Alpaquita Linux (<https://bell-sw.com/alpaquita-linux/>).
14    Alpaquita,
15    /// Alpine Linux (<https://en.wikipedia.org/wiki/Alpine_Linux>).
16    Alpine,
17    /// Amazon Linux AMI (<https://en.wikipedia.org/wiki/Amazon_Machine_Image#Amazon_Linux_AMI>).
18    Amazon,
19    /// Android (<https://en.wikipedia.org/wiki/Android_(operating_system)>).
20    Android,
21    /// AOSC OS (<https://aosc.io/aosc-os/>).
22    AOSC,
23    /// Arch Linux (<https://en.wikipedia.org/wiki/Arch_Linux>).
24    Arch,
25    /// Artix Linux (<https://en.wikipedia.org/wiki/Artix_Linux>).
26    Artix,
27    /// Bluefin (<https://projectbluefin.io>).
28    Bluefin,
29    /// CachyOS (<https://en.wikipedia.org/wiki/Arch_Linux#Derivatives>).
30    CachyOS,
31    /// CentOS (<https://en.wikipedia.org/wiki/CentOS>).
32    CentOS,
33    /// Debian (<https://en.wikipedia.org/wiki/Debian>).
34    Debian,
35    /// DragonFly BSD (<https://en.wikipedia.org/wiki/DragonFly_BSD>).
36    DragonFly,
37    /// Emscripten (<https://en.wikipedia.org/wiki/Emscripten>).
38    Emscripten,
39    /// EndeavourOS (<https://en.wikipedia.org/wiki/EndeavourOS>).
40    EndeavourOS,
41    /// Fedora (<https://en.wikipedia.org/wiki/Fedora_(operating_system)>).
42    Fedora,
43    /// FreeBSD (<https://en.wikipedia.org/wiki/FreeBSD>).
44    FreeBSD,
45    /// Garuda Linux (<https://en.wikipedia.org/wiki/Garuda_Linux>)
46    Garuda,
47    /// Gentoo Linux (<https://en.wikipedia.org/wiki/Gentoo_Linux>).
48    Gentoo,
49    /// HardenedBSD (https://hardenedbsd.org/).
50    HardenedBSD,
51    /// Illumos (https://en.wikipedia.org/wiki/Illumos).
52    Illumos,
53    /// Kali Linux (https://en.wikipedia.org/wiki/Kali_Linux).
54    Kali,
55    /// Linux based operating system (<https://en.wikipedia.org/wiki/Linux>).
56    Linux,
57    /// Mabox (<https://maboxlinux.org/>).
58    Mabox,
59    /// Mac OS X/OS X/macOS (<https://en.wikipedia.org/wiki/MacOS>).
60    Macos,
61    /// Manjaro (<https://en.wikipedia.org/wiki/Manjaro>).
62    Manjaro,
63    /// Mariner (<https://en.wikipedia.org/wiki/CBL-Mariner>).
64    Mariner,
65    /// MidnightBSD (<https://en.wikipedia.org/wiki/MidnightBSD>).
66    MidnightBSD,
67    /// Mint (<https://en.wikipedia.org/wiki/Linux_Mint>).
68    Mint,
69    /// NetBSD (<https://en.wikipedia.org/wiki/NetBSD>).
70    NetBSD,
71    /// NixOS (<https://en.wikipedia.org/wiki/NixOS>).
72    NixOS,
73    /// Nobara (<https://nobaraproject.org/>).
74    Nobara,
75    /// OpenBSD (<https://en.wikipedia.org/wiki/OpenBSD>).
76    OpenBSD,
77    /// OpenCloudOS (<https://www.opencloudos.org>).
78    OpenCloudOS,
79    /// openEuler (<https://en.wikipedia.org/wiki/EulerOS>).
80    openEuler,
81    /// openSUSE (<https://en.wikipedia.org/wiki/OpenSUSE>).
82    openSUSE,
83    /// Oracle Linux (<https://en.wikipedia.org/wiki/Oracle_Linux>).
84    OracleLinux,
85    /// Pop!_OS (<https://en.wikipedia.org/wiki/Pop!_OS>)
86    Pop,
87    /// Raspberry Pi OS (<https://en.wikipedia.org/wiki/Raspberry_Pi_OS>).
88    Raspbian,
89    /// Red Hat Linux (<https://en.wikipedia.org/wiki/Red_Hat_Linux>).
90    Redhat,
91    /// Red Hat Enterprise Linux (<https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux>).
92    RedHatEnterprise,
93    /// Redox (<https://en.wikipedia.org/wiki/Redox_(operating_system)>).
94    Redox,
95    /// Rocky Linux (<https://en.wikipedia.org/wiki/Rocky_Linux>).
96    RockyLinux,
97    /// Solus (<https://en.wikipedia.org/wiki/Solus_(operating_system)>).
98    Solus,
99    /// SUSE Linux Enterprise Server (<https://en.wikipedia.org/wiki/SUSE_Linux_Enterprise>).
100    SUSE,
101    /// Ubuntu (<https://en.wikipedia.org/wiki/Ubuntu_(operating_system)>).
102    Ubuntu,
103    /// Ultramarine (<https://ultramarine-linux.org/>).
104    Ultramarine,
105    /// Uos (<https://uos.uniontech.com/>).
106    Uos,
107    /// Void Linux (<https://en.wikipedia.org/wiki/Void_Linux>).
108    Void,
109    /// Unknown operating system.
110    Unknown,
111    /// Windows (<https://en.wikipedia.org/wiki/Microsoft_Windows>).
112    Windows,
113}
114
115impl Default for Type {
116    fn default() -> Self {
117        Type::Unknown
118    }
119}
120
121impl Display for Type {
122    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
123        match *self {
124            Type::Alpaquita => write!(f, "Alpaquita Linux"),
125            Type::Alpine => write!(f, "Alpine Linux"),
126            Type::AlmaLinux => write!(f, "AlmaLinux"),
127            Type::Amazon => write!(f, "Amazon Linux AMI"),
128            Type::AOSC => write!(f, "AOSC OS"),
129            Type::Arch => write!(f, "Arch Linux"),
130            Type::Bluefin => write!(f, "Bluefin"),
131            Type::CachyOS => write!(f, "CachyOS Linux"),
132            Type::Artix => write!(f, "Artix Linux"),
133            Type::DragonFly => write!(f, "DragonFly BSD"),
134            Type::Garuda => write!(f, "Garuda Linux"),
135            Type::Gentoo => write!(f, "Gentoo Linux"),
136            Type::Illumos => write!(f, "illumos"),
137            Type::Kali => write!(f, "Kali Linux"),
138            Type::Macos => write!(f, "Mac OS"),
139            Type::MidnightBSD => write!(f, "Midnight BSD"),
140            Type::Mint => write!(f, "Linux Mint"),
141            Type::Nobara => write!(f, "Nobara Linux"),
142            Type::openEuler => write!(f, "EulerOS"),
143            Type::OracleLinux => write!(f, "Oracle Linux"),
144            Type::Pop => write!(f, "Pop!_OS"),
145            Type::Raspbian => write!(f, "Raspberry Pi OS"),
146            Type::Redhat => write!(f, "Red Hat Linux"),
147            Type::RedHatEnterprise => write!(f, "Red Hat Enterprise Linux"),
148            Type::RockyLinux => write!(f, "Rocky Linux"),
149            Type::SUSE => write!(f, "SUSE Linux Enterprise Server"),
150            Type::Ultramarine => write!(f, "Ultramarine Linux"),
151            Type::Uos => write!(f, "UOS"),
152            Type::Void => write!(f, "Void Linux"),
153            _ => write!(f, "{self:?}"),
154        }
155    }
156}
157#[cfg(test)]
158mod tests {
159    use super::*;
160    use pretty_assertions::assert_eq;
161
162    #[test]
163    fn default() {
164        assert_eq!(Type::Unknown, Type::default());
165    }
166
167    #[test]
168    fn display() {
169        let data = [
170            (Type::AIX, "AIX"),
171            (Type::AlmaLinux, "AlmaLinux"),
172            (Type::Alpaquita, "Alpaquita Linux"),
173            (Type::Alpine, "Alpine Linux"),
174            (Type::Amazon, "Amazon Linux AMI"),
175            (Type::Android, "Android"),
176            (Type::AOSC, "AOSC OS"),
177            (Type::Arch, "Arch Linux"),
178            (Type::Artix, "Artix Linux"),
179            (Type::Bluefin, "Bluefin"),
180            (Type::CachyOS, "CachyOS Linux"),
181            (Type::CentOS, "CentOS"),
182            (Type::Debian, "Debian"),
183            (Type::DragonFly, "DragonFly BSD"),
184            (Type::Emscripten, "Emscripten"),
185            (Type::EndeavourOS, "EndeavourOS"),
186            (Type::Fedora, "Fedora"),
187            (Type::FreeBSD, "FreeBSD"),
188            (Type::Garuda, "Garuda Linux"),
189            (Type::Gentoo, "Gentoo Linux"),
190            (Type::HardenedBSD, "HardenedBSD"),
191            (Type::Illumos, "illumos"),
192            (Type::Kali, "Kali Linux"),
193            (Type::Linux, "Linux"),
194            (Type::Mabox, "Mabox"),
195            (Type::Macos, "Mac OS"),
196            (Type::Manjaro, "Manjaro"),
197            (Type::Mariner, "Mariner"),
198            (Type::MidnightBSD, "Midnight BSD"),
199            (Type::Mint, "Linux Mint"),
200            (Type::NetBSD, "NetBSD"),
201            (Type::NixOS, "NixOS"),
202            (Type::Nobara, "Nobara Linux"),
203            (Type::OpenCloudOS, "OpenCloudOS"),
204            (Type::OpenBSD, "OpenBSD"),
205            (Type::openEuler, "EulerOS"),
206            (Type::openSUSE, "openSUSE"),
207            (Type::OracleLinux, "Oracle Linux"),
208            (Type::Pop, "Pop!_OS"),
209            (Type::Raspbian, "Raspberry Pi OS"),
210            (Type::Redhat, "Red Hat Linux"),
211            (Type::RedHatEnterprise, "Red Hat Enterprise Linux"),
212            (Type::Redox, "Redox"),
213            (Type::RockyLinux, "Rocky Linux"),
214            (Type::Solus, "Solus"),
215            (Type::SUSE, "SUSE Linux Enterprise Server"),
216            (Type::Ubuntu, "Ubuntu"),
217            (Type::Ultramarine, "Ultramarine Linux"),
218            (Type::Unknown, "Unknown"),
219            (Type::Uos, "UOS"),
220            (Type::Void, "Void Linux"),
221            (Type::Windows, "Windows"),
222        ];
223
224        for (t, expected) in &data {
225            assert_eq!(&t.to_string(), expected);
226        }
227    }
228}