dbin 0.1.7

Regex-like utility for parsing and rendering binary data
Documentation
use crate::Data;
use crate::ParseError;
use crate::Scope;

pub struct Expr(Box<dyn Fn(&Scope) -> Result<Data, ParseError>>);

impl Expr {
    pub fn new<F: Fn(&Scope) -> Result<Data, ParseError> + 'static>(f: F) -> Expr {
        Expr(Box::new(f))
    }
    pub fn eval(&self, scope: &Scope) -> Result<Data, ParseError> {
        (self.0)(scope)
    }
}

impl<T: Into<Data>> From<T> for Expr {
    fn from(t: T) -> Expr {
        let t = t.into();
        Expr(Box::new(move |_| Ok(t.clone())))
    }
}