1mod bsd;
2mod errors;
3mod linux;
4mod macos;
5mod utils;
6mod windows;
7
8use errors::MachineIdError;
9
10#[cfg(target_os = "macos")]
11use macos::get_machine_id;
12
13#[cfg(target_os = "windows")]
14use windows::get_machine_id;
15
16#[cfg(target_os = "linux")]
17use linux::get_machine_id;
18
19#[cfg(any(target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))]
20use bsd::get_machine_id;
21
22use crate::utils::sanitize;
23
24pub struct MachineId;
26
27impl MachineId {
28 pub fn get() -> Result<String, MachineIdError> {
31 let id = get_machine_id();
32 match id {
33 Ok(id) => Ok(sanitize(&id)),
34 Err(e) => Err(e),
35 }
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::MachineId;
42
43 #[test]
44 fn test_get() {
45 let id = MachineId::get();
46 assert!(id.is_ok());
47
48 let machine_id = id.unwrap();
49 println!("Generated Machine ID: {}", machine_id);
50 println!("Length: {}", machine_id.len());
51
52 assert!(!machine_id.is_empty());
53 assert!(machine_id.len() >= 6);
54 }
55
56 #[test]
57 fn test_id_uniqueness() {
58 let id1 = MachineId::get().unwrap();
59 let id2 = MachineId::get().unwrap();
60 let id3 = MachineId::get().unwrap();
61
62 println!("ID 1: {}", id1);
63 println!("ID 2: {}", id2);
64 println!("ID 3: {}", id3);
65
66 assert_eq!(id1, id2);
67 assert_eq!(id2, id3);
68 }
69}