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}