mid 5.0.1

Creating a Machine ID hash for MacOS/Windows/Linux/iOS
Documentation
#![cfg(target_os = "linux")]

use std::collections::HashSet;
use crate::errors::MIDError;
use crate::utils::run_shell_command;

pub(crate) fn get_mid_result() -> Result<String, MIDError> {
    let machine_output = run_shell_command(
        "sh",
        [
            "-c",
            r#"hostnamectl status | awk '/Machine ID:/ {print $3}'; cat /var/lib/dbus/machine-id || true; cat /etc/machine-id || true; cat /sys/class/dmi/id/product_uuid || true"#,
        ],
    )?;

    let combined_string = process_output(&machine_output);

    if combined_string.is_empty() {
        return Err(MIDError::ResultMidError);
    }

    Ok(combined_string)
}

fn process_output(output_str: &str) -> String {
    let mut mid_result = HashSet::new();

    for line in output_str.to_lowercase().lines() {
        let clean_line = line.trim().replace("-", "");
        if !clean_line.is_empty() {
            mid_result.insert(clean_line);
        }
    }

    let mut result: Vec<&str> = mid_result.iter().map(|s| s.as_str()).collect();
    result.sort();

    result.join("|").trim().to_string()
}