flock 0.2.0

Parallel runner for asynchronous tasks.
Documentation
use std::sync::mpsc::Sender;

use kernel::Kernel;
use worker::WorkerId;
use actor::Task;

#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct EventId(pub u64);

pub struct Event<K: Kernel> {
    pub id: EventId,
    pub topic: K::Token,
    pub data: Option<K::Data>,
}

pub enum Command<K: Kernel> {
    Publish(K::Token, K::Data),
    Kill(K::Token),
    Listen(K::Token, K::Token),
    Ignore(K::Token, K::Token),
    Spawn(K::Token, K::Token, Sender<Event<K>>),
    Sleep(WorkerId, K::Token, EventId),
}

pub enum Syscall<K: Kernel> {
    Command(Command<K>),
    Open(K::Token, K::OpenParam, K::Token),
}

pub enum Request<K: Kernel> {
    Publish(K::Data),
    Kill,
    Listen(K::Token),
    Ignore(K::Token),
    Open(K::OpenParam, K::Token),
    Spawn(Task<K>, K::Token),
}

impl<K: Kernel> Clone for Event<K> {
    fn clone(&self) -> Self {
        Event {
            id: self.id.clone(),
            topic: self.topic.clone(),
            data: self.data.clone(),
        }
    }
}