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