1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use regex::Regex;
use std::process::Command;
pub struct WindowsVer {
pub version: Option<String>
}
pub fn retrieve() -> Option<WindowsVer> {
let output = match Command::new("ver").output() {
Ok(o) => o,
Err(_) => return None
};
let stdout = String::from_utf8_lossy(&output.stdout);
Some(parse(stdout.to_string()))
}
pub fn parse(output: String) -> WindowsVer {
let version_regex = Regex::new(r"^Microsoft Windows \[Version\s(\d+\.\d+\.\d+)\]$").unwrap();
let version = match version_regex.captures_iter(&output).next() {
Some(m) => {
match m.get(1) {
Some(version) => Some(version.as_str().to_owned()),
None => None
}
},
None => None
};
WindowsVer { version: version }
}