lustre-executor 0.2.0

A blazingly fast, minimal async executor with pluggable ID generation and I/O support.
Documentation
//! Pluggable ID generation for tasks.

use std::fmt::Debug;
use std::sync::atomic::{AtomicU64, Ordering};

/// Trait for generating unique IDs.
pub trait IdGenerator<Id> {
    fn generate() -> Id;
}

/// A type-safe wrapper for task IDs.
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub struct TaskId<Id: Clone + Copy + Eq + Ord + Debug> {
    id: Id,
}

impl<Id: Clone + Copy + Eq + Ord + Debug> TaskId<Id> {
    /// Creates a new TaskId from an ID value.
    pub fn new(id: Id) -> Self {
        Self { id }
    }

    /// Returns the inner ID value.
    pub fn id(&self) -> Id {
        self.id
    }
}

/// Default atomic generator for u64 IDs.
pub struct AtomicU64Generator;

impl IdGenerator<u64> for AtomicU64Generator {
    fn generate() -> u64 {
        static NEXT_ID: AtomicU64 = AtomicU64::new(0);
        NEXT_ID.fetch_add(1, Ordering::Relaxed)
    }
}

pub type TaskIdU64 = TaskId<u64>;