use sha2::{Digest, Sha256};
pub struct MachineId;
impl MachineId {
#[must_use]
pub fn derive(salt: &str) -> String {
let raw = machine_uid::get().unwrap_or_else(|_| uuid::Uuid::new_v4().to_string());
let mut hasher = Sha256::new();
hasher.update(salt.as_bytes());
hasher.update(raw.as_bytes());
let digest = hasher.finalize();
hex_encode(&digest)
}
}
fn hex_encode(bytes: &[u8]) -> String {
let mut out = String::with_capacity(bytes.len() * 2);
for b in bytes {
use std::fmt::Write;
let _ = write!(out, "{b:02x}");
}
out
}