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}