okee-wheel-timer 0.1.0

Deterministic hashed wheel timer with keyed deduplication.
Documentation
use okee_wheel_timer::KeyedHashedWheelTimer;

#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
enum Kind {
    Input,
    Output,
}

#[derive(Debug)]
struct MyData {
    kind: Kind,
    item_id: u64,
    pin: u16,
    value: bool,
}

fn main() {
    fn dedup_key(data: &MyData) -> (Kind, u64, u16, bool) {
        (data.kind, data.item_id, data.pin, data.value)
    }

    let mut time_wheel = KeyedHashedWheelTimer::new(4, dedup_key);

    let event_1 = time_wheel.schedule(
        time_wheel.curr_tick(),
        MyData {
            kind: Kind::Input,
            item_id: 1,
            pin: 0,
            value: true,
        },
    );
    println!("New id is: {:?}", event_1.id);

    let event_2 = time_wheel.schedule(
        time_wheel.curr_tick() + 10,
        MyData {
            kind: Kind::Output,
            item_id: 4,
            pin: 3,
            value: false,
        },
    );

    println!("New id is: {:?}", event_2.id);

    if let Some(event) = time_wheel.get(event_1.id) {
        println!("Event exists on tick {}", event.tick());
    }
}