rs_machineid/
lib.rs

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
24/// Get the machine ID
25pub struct MachineId;
26
27impl MachineId {
28    /// Obtain the unique identifier of the machine.
29    /// Return a unique ID in string form.
30    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}