rvs 0.5.0

A library for defining and evaluating random variables using a simple DSL
Documentation
use crate::transform::CrateRng;
use crate::model::{Expr, ExprData};

use std::fmt;

#[derive(Clone)]
pub struct Done {
    data: ExprData,
    expr: Box<dyn Expr>,
}

impl Done {
    pub fn new(expr: Box<dyn Expr>) -> Done {
        Done {
            data: Default::default(),
            expr,
        }
    }
}

impl Expr for Done {
    fn next(&mut self, rng: &mut CrateRng) -> u32 {
        self.data.prev = self.expr.next(rng);
        self.data.done = true;

        self.data.prev
    }

    fn data(&self) -> &ExprData {
        &self.data
    }
}

impl fmt::Display for Done {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Done({})", self.expr)
    }
}