crate::ix!();
use std::path::{Path, PathBuf};
use std::time::{SystemTime, UNIX_EPOCH};
pub fn get_unique_path(base: &Path) -> PathBuf {
let nanos = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("time went backwards")
.as_nanos();
let mix = nanos ^ get_unique_path as usize as u128;
let name = format!("{:08x}", mix & 0xffff_ffff);
base.join(name)
}
#[cfg(test)]
mod get_unique_path_tests {
use super::*;
#[traced_test]
fn test_unique_path_is_different() {
let base = Path::new("/tmp");
let p1 = get_unique_path(base);
let p2 = get_unique_path(base);
assert_ne!(p1, p2);
assert!(p1.starts_with(base));
assert_eq!(p1.file_name().unwrap().to_str().unwrap().len(), 8);
}
}