aboutsummaryrefslogtreecommitdiff
path: root/src/utils/id.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/id.rs')
-rw-r--r--src/utils/id.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/utils/id.rs b/src/utils/id.rs
new file mode 100644
index 00000000..3f8a2a7d
--- /dev/null
+++ b/src/utils/id.rs
@@ -0,0 +1,27 @@
+use std::sync::atomic::{AtomicU32, Ordering};
+
+/// Counter that returns unique IDs.
+///
+/// Under the hood it uses a `u32` that will eventually wrap around. When incrementing it once a
+/// second, it will wrap around after about 136 years.
+pub struct IdCounter {
+ value: AtomicU32,
+}
+
+impl IdCounter {
+ pub const fn new() -> Self {
+ Self {
+ value: AtomicU32::new(0),
+ }
+ }
+
+ pub fn next(&self) -> u32 {
+ self.value.fetch_add(1, Ordering::SeqCst)
+ }
+}
+
+impl Default for IdCounter {
+ fn default() -> Self {
+ Self::new()
+ }
+}