novel-api 0.19.1

Novel APIs from various sources
Documentation
use std::sync::OnceLock;

use uuid::Uuid;

#[must_use]
pub(crate) fn uid() -> &'static Uuid {
    static UID: OnceLock<Uuid> = OnceLock::new();

    UID.get_or_init(|| match machine_uid::get() {
        Ok(uid) if !uid.is_empty() => match Uuid::parse_str(&uid) {
            Ok(uuid) => uuid,
            Err(error) => {
                tracing::error!("Machine id is not uuid, use uuid instead: {error}");
                Uuid::new_v4()
            }
        },
        _ => {
            tracing::error!("Machine id generation failed, use uuid instead");
            Uuid::new_v4()
        }
    })
}