Skip to main content

lustre_executor/
id.rs

1use std::fmt::Debug;
2use std::sync::atomic::{AtomicU64, Ordering};
3
4pub trait IdGenerator<Id> {
5    fn generate() -> Id;
6}
7
8#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
9pub struct TaskId<Id: Clone + Copy + Eq + Ord + Debug> {
10    id: Id,
11}
12
13impl<Id: Clone + Copy + Eq + Ord + Debug> TaskId<Id> {
14    pub fn new(id: Id) -> Self {
15        Self { id }
16    }
17
18    pub fn id(&self) -> Id {
19        self.id
20    }
21}
22
23pub struct AtomicU64Generator;
24
25impl IdGenerator<u64> for AtomicU64Generator {
26    fn generate() -> u64 {
27        static NEXT_ID: AtomicU64 = AtomicU64::new(0);
28        NEXT_ID.fetch_add(1, Ordering::Relaxed)
29    }
30}
31
32pub type TaskIdU64 = TaskId<u64>;