kernel 1.1.0

Abstract Reactive Streams
Documentation
pub mod plus;
pub mod minus;
pub mod eq;
pub mod mul;
pub mod div;
pub mod dot;

use commands::ast::*;

pub fn eval<'ast>(verb: Verb, left: &'ast AST<'ast>, right: &'ast AST<'ast>) -> Result<AST<'ast>, Error> {
    match verb {
        Verb::Plus => {
            let mut a = plus::new(left, right);
            Ok(a.next().expect("Verb Plus"))
        }
        Verb::Minus => {
            let mut a = minus::new(left, right);
            Ok(a.next().expect("Verb Minus"))
        }
        Verb::Times => {
            let mut a = mul::new(left, right);
            Ok(a.next().expect("Verb Times"))
        }
        Verb::Divide => {
            let mut a = div::new(left, right);
            Ok(a.next().expect("Verb Divide"))
        }
        Verb::Equal => {
            let mut a = eq::new(left, right);
            Ok(a.next().expect("Verb Equal"))
        }
        x => {
            Err(Error::EvalError {
                desc: "Verb is not implemented".to_string(),
                ast: format!("{:?}", AST::Nil),
            })
        }
    }
}