kernel 1.1.0

Abstract Reactive Streams
Documentation
use commands::ast::AST;
use intercore::message::Message;
use reactors::scheduler::Scheduler;

#[derive(Debug,Clone,Copy)]
pub struct TaskId(pub usize, pub usize);

#[derive(Debug,PartialEq,Clone,Copy)]
pub enum Termination {
    Recursive,
    Corecursive,
}

#[derive(Debug)]
pub struct T3<T>(pub T, pub Termination);

#[derive(Debug)]
pub enum Poll<T, E> {
    Yield(T),
    End(T),
    Err(E),
    Infinite,
}

#[derive(Debug)]
pub enum Error {
    RuntimeError,
    WrongContext,
}

#[derive(PartialEq, Clone, Debug)]
pub enum Context<'a> {
    Cont(usize, &'a Message),
    Node(&'a AST<'a>),
    NodeAck(usize, usize),
    Intercore(&'a Message),
    Init(usize),
    Nil,
}

pub trait Task<'a> {
    fn init(&'a mut self, input: Option<&'a str>, task_id: usize);
    fn exec(&'a mut self, input: Option<&'a str>);
    fn poll(&'a mut self, c: Context<'a>, sched: &'a Scheduler<'a>) -> Poll<Context<'a>, Error>;
    fn finalize(&'a mut self);
}