Skip to main content

lustre_executor/core/
id.rs

1//! Pluggable ID generation for tasks.
2
3use std::fmt::Debug;
4use std::sync::atomic::{AtomicU64, Ordering};
5
6/// Trait for generating unique IDs.
7pub trait IdGenerator<Id> {
8    fn generate() -> Id;
9}
10
11/// A type-safe wrapper for task IDs.
12#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
13pub struct TaskId<Id: Clone + Copy + Eq + Ord + Debug> {
14    id: Id,
15}
16
17impl<Id: Clone + Copy + Eq + Ord + Debug> TaskId<Id> {
18    /// Creates a new TaskId from an ID value.
19    pub fn new(id: Id) -> Self {
20        Self { id }
21    }
22
23    /// Returns the inner ID value.
24    pub fn id(&self) -> Id {
25        self.id
26    }
27}
28
29/// Default atomic generator for u64 IDs.
30pub struct AtomicU64Generator;
31
32impl IdGenerator<u64> for AtomicU64Generator {
33    fn generate() -> u64 {
34        static NEXT_ID: AtomicU64 = AtomicU64::new(0);
35        NEXT_ID.fetch_add(1, Ordering::Relaxed)
36    }
37}
38
39pub type TaskIdU64 = TaskId<u64>;