netstack3_base/testutil/
monotonic_id.rs1use core::fmt::{self, Debug, Display};
8use core::sync::atomic::{self, AtomicUsize};
9
10pub struct MonotonicIdentifier(usize);
12
13impl Debug for MonotonicIdentifier {
14 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15 let Self(id) = self;
19 Debug::fmt(id, f)
20 }
21}
22
23impl Display for MonotonicIdentifier {
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 Debug::fmt(self, f)
26 }
27}
28
29static MONOTONIC_COUNTER: AtomicUsize = AtomicUsize::new(1);
30
31impl MonotonicIdentifier {
32 pub fn new() -> Self {
34 Self(MONOTONIC_COUNTER.fetch_add(1, atomic::Ordering::SeqCst))
35 }
36}
37
38impl Default for MonotonicIdentifier {
39 fn default() -> Self {
40 Self::new()
41 }
42}