lustre_executor/core/
id.rs1use std::fmt::Debug;
4use std::sync::atomic::{AtomicU64, Ordering};
5
6pub trait IdGenerator<Id> {
8 fn generate() -> Id;
9}
10
11#[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 pub fn new(id: Id) -> Self {
20 Self { id }
21 }
22
23 pub fn id(&self) -> Id {
25 self.id
26 }
27}
28
29pub 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>;