#![allow(dead_code)]
use std::sync::atomic::{AtomicU64, Ordering};
use std::time::{SystemTime, UNIX_EPOCH};
static SEQ: AtomicU64 = AtomicU64::new(1);
pub fn unique_id(prefix: &str) -> String {
let nanos = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("system clock should be after UNIX epoch")
.as_nanos();
format!("{prefix}-{nanos}-{}", SEQ.fetch_add(1, Ordering::Relaxed))
}
pub fn run_token() -> u128 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.map(|d| d.as_nanos())
.unwrap_or(0)
^ u128::from(std::process::id())
}
pub fn unique(prefix: &str) -> String {
format!(
"{prefix}_{:x}_{}",
run_token(),
SEQ.fetch_add(1, Ordering::SeqCst)
)
}