use std::sync::atomic::{AtomicU64, Ordering};
use std::time::{SystemTime, UNIX_EPOCH};
static SESSION_COUNTER: AtomicU64 = AtomicU64::new(1);
pub fn now_millis() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.map(|d| d.as_millis() as u64)
.unwrap_or(0)
}
pub fn new_session_id() -> String {
let ts = now_millis();
let pid = std::process::id();
let seq = SESSION_COUNTER.fetch_add(1, Ordering::Relaxed);
format!("sess-{ts}-{pid}-{seq}")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn session_ids_are_unique() {
let a = new_session_id();
let b = new_session_id();
assert_ne!(a, b);
}
}