edit-xlsx 0.4.4

A quick and easy-to-use Rust library for Excel file editing.
Documentation
use std::collections::hash_map::DefaultHasher;
use std::collections::HashSet;
use std::hash::{Hash, Hasher};
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::{SystemTime, UNIX_EPOCH};

pub(crate) fn new_id() -> u64 {
    let time = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_micros();
    let mut hasher = DefaultHasher::new();
    time.hash(&mut hasher);
    std::process::id().hash(&mut hasher);
    thread::current().id().hash(&mut hasher);
    hasher.finish()
}

#[test]
fn test_id() {
    let mut v = Arc::new(Mutex::new(vec![]));
    for _ in 0..10 {
        let handles: Vec<_> = (0..5000).map(|i| {
            let atomic_vec = Arc::clone(&v);
            thread::spawn(move || {
                atomic_vec.lock().unwrap().push(new_id());
            })
        }).collect();
        for handle in handles {
            handle.join().unwrap();
        }
    }
    let len_before = v.lock().unwrap().len();
    let len: usize = v.lock().unwrap().iter().collect::<HashSet<&u64>>().iter().count();
    assert_eq!(len_before, len);
}