1use std::{process::Command, error, result};
2use crate::sanitize_data::{sanitize, GetInfoError};
3
4pub fn name() -> Result<String, GetInfoError> {
5 let output = Command::new("wmic")
6 .arg("cpu")
7 .arg("get")
8 .arg("name")
9 .output()
10 .expect("failed to execute process");
11
12 sanitize(output)
13}
14
15pub fn cores() -> Result<String, GetInfoError> {
16 let output = Command::new("wmic")
17 .arg("cpu")
18 .arg("get")
19 .arg("numberofcores")
20 .output()
21 .expect("failed to execute process");
22
23 sanitize(output)
24}
25
26pub fn processor_id() -> Result<String, GetInfoError> {
27 let output = Command::new("wmic")
28 .arg("cpu")
29 .arg("get")
30 .arg("processorid")
31 .output()
32 .expect("failed to execute process");
33
34 sanitize(output)
35}
36
37
38#[derive(Debug)]
39pub struct CpuInfo {
40 pub name: String,
41 pub cores: String,
42 pub processor_id: String,
43}
44
45pub fn all() -> Result<CpuInfo, GetInfoError> {
46 let result = name();
47 if let Err(error) = result {
48 return Err(error);
49 }
50 let name = result.unwrap();
51
52 let result = cores();
53 if let Err(error) = result {
54 return Err(error);
55 }
56 let cores = result.unwrap();
57
58 let result = processor_id();
59 if let Err(error) = result {
60 return Err(error);
61 }
62 let processor_id = result.unwrap();
63
64 let data = CpuInfo {
65 name,
66 cores,
67 processor_id
68 };
69
70 Ok(data)
71}