os_identifier/windows/
mod.rs1mod windows_10;
2mod windows_11;
3mod windows_7;
4mod windows_8;
5mod windows_vista;
6mod windows_xp;
7
8mod windows_server_1709ff;
9
10mod windows_2000;
11
12mod windows_server_2003;
13
14mod windows_server_2008;
15
16mod windows_server_2008_r2;
17
18mod windows_server_2012;
19
20mod windows_server_2012_r2;
21
22mod windows_server_2016;
23
24mod windows_server_2019ff;
25
26use windows_7::Windows7;
27use windows_8::Windows8;
28use windows_10::Windows10;
29use windows_11::Windows11;
30use windows_2000::Windows2000;
31use windows_server_1709ff::WindowsServer1709ff;
32use windows_server_2003::WindowsServer2003;
33use windows_server_2008::WindowsServer2008;
34use windows_server_2008_r2::WindowsServer2008R2;
35use windows_server_2012::WindowsServer2012;
36use windows_server_2012_r2::WindowsServer2012R2;
37use windows_server_2016::WindowsServer2016;
38use windows_server_2019ff::WindowsServer2019ff;
39use windows_vista::WindowsVista;
40use windows_xp::WindowsXP;
41
42#[derive(Debug)]
43pub struct Windows(WindowsClientOS);
44
45impl Windows {
46 pub fn to_string(&self) -> Vec<String> {
47 self.0.to_string()
48 }
49}
50
51impl TryFrom<&str> for Windows {
52 type Error = String;
53
54 fn try_from(value: &str) -> Result<Self, Self::Error> {
55 let os = WindowsClientOS::try_from(value)?;
56 Ok(Self(os))
57 }
58}
59
60#[derive(Debug)]
61enum WindowsClientOS {
62 Windows7(Windows7),
63 Windows8(Windows8),
64 Windows10(Windows10),
65 Windows11(Windows11),
66 Windows2000(Windows2000),
67 WindowsServer1709ff(WindowsServer1709ff),
68 WindowsServer2003(WindowsServer2003),
69 WindowsServer2008(WindowsServer2008),
70 WindowsServer2008R2(WindowsServer2008R2),
71 WindowsServer2012(WindowsServer2012),
72 WindowsServer2012R2(WindowsServer2012R2),
73 WindowsServer2016(WindowsServer2016),
74 WindowsServer2019ff(WindowsServer2019ff),
75 WindowsVista(WindowsVista),
76 WindowsXP(WindowsXP),
77}
78
79impl WindowsClientOS {
80 pub fn to_string(&self) -> Vec<String> {
81 match self {
82 WindowsClientOS::Windows7(windows) => windows.to_string(),
83 WindowsClientOS::Windows8(windows) => windows.to_string(),
84 WindowsClientOS::Windows10(windows) => windows.to_string(),
85 WindowsClientOS::Windows11(windows) => windows.to_string(),
86 WindowsClientOS::Windows2000(windows) => windows.to_string(),
87 WindowsClientOS::WindowsServer1709ff(windows) => windows.to_string(),
88 WindowsClientOS::WindowsServer2003(windows) => windows.to_string(),
89 WindowsClientOS::WindowsServer2008(windows) => windows.to_string(),
90 WindowsClientOS::WindowsServer2008R2(windows) => windows.to_string(),
91 WindowsClientOS::WindowsServer2012(windows) => windows.to_string(),
92 WindowsClientOS::WindowsServer2012R2(windows) => windows.to_string(),
93 WindowsClientOS::WindowsServer2016(windows) => windows.to_string(),
94 WindowsClientOS::WindowsServer2019ff(windows) => windows.to_string(),
95 WindowsClientOS::WindowsVista(windows) => windows.to_string(),
96 WindowsClientOS::WindowsXP(windows) => windows.to_string(),
97 }
98 }
99}
100
101impl TryFrom<&str> for WindowsClientOS {
102 type Error = String;
103
104 fn try_from(value: &str) -> Result<Self, Self::Error> {
105 if let Ok(windows) = Windows11::try_from(value) {
106 Ok(WindowsClientOS::Windows11(windows))
107 } else if let Ok(windows) = Windows10::try_from(value) {
108 Ok(WindowsClientOS::Windows10(windows))
109 } else if let Ok(windows) = Windows8::try_from(value) {
110 Ok(WindowsClientOS::Windows8(windows))
111 } else if let Ok(windows) = Windows7::try_from(value) {
112 Ok(WindowsClientOS::Windows7(windows))
113 } else if let Ok(windows) = WindowsVista::try_from(value) {
114 Ok(WindowsClientOS::WindowsVista(windows))
115 } else if let Ok(windows) = WindowsXP::try_from(value) {
116 Ok(WindowsClientOS::WindowsXP(windows))
117 } else if let Ok(windows) = WindowsServer2019ff::try_from(value) {
118 Ok(WindowsClientOS::WindowsServer2019ff(windows))
119 } else if let Ok(windows) = WindowsServer2016::try_from(value) {
120 Ok(WindowsClientOS::WindowsServer2016(windows))
121 } else if let Ok(windows) = WindowsServer2012R2::try_from(value) {
122 Ok(WindowsClientOS::WindowsServer2012R2(windows))
123 } else if let Ok(windows) = WindowsServer2012::try_from(value) {
124 Ok(WindowsClientOS::WindowsServer2012(windows))
125 } else if let Ok(windows) = WindowsServer2008R2::try_from(value) {
126 Ok(WindowsClientOS::WindowsServer2008R2(windows))
127 } else if let Ok(windows) = WindowsServer2008::try_from(value) {
128 Ok(WindowsClientOS::WindowsServer2008(windows))
129 } else if let Ok(windows) = WindowsServer2003::try_from(value) {
130 Ok(WindowsClientOS::WindowsServer2003(windows))
131 } else if let Ok(windows) = Windows2000::try_from(value) {
132 Ok(WindowsClientOS::Windows2000(windows))
133 } else if let Ok(windows) = WindowsServer1709ff::try_from(value) {
134 Ok(WindowsClientOS::WindowsServer1709ff(windows))
135 } else {
136 Err(format!("Not a windows: {}", value))
137 }
138 }
139}