1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#[cfg(not(test))]
use std::sync::atomic::AtomicUsize;
#[cfg(not(test))]
static HISTORY_ID: AtomicUsize = AtomicUsize::new(0);

#[cfg(not(test))]
pub trait HistoryId {
    fn generate(&self) -> String {
        use std::sync::atomic::Ordering;

        let id = HISTORY_ID.load(Ordering::Relaxed);
        HISTORY_ID.store(id + 1, Ordering::Relaxed);
        format!("{}", id)
    }
}

#[cfg(test)]
pub trait HistoryId {
    fn generate(&self) -> &str {
        "123"
    }
}