os_identifier/windows/
mod.rs

1mod 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}