view lazycall_support/src/lib.rs @ 2:2b71ed370156

rustfmt
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 20 Nov 2020 23:26:10 +0100
parents babb2f9cb5ad
children
line wrap: on
line source

pub struct LazyVal<'a, Result>(&'a mut dyn FnMut() -> Result);

impl<'a, Result> LazyVal<'a, Result> {
    pub fn new<F: 'a + FnMut() -> Result>(f: &'a mut F) -> LazyVal<'a, Result> {
        LazyVal(f)
    }
}

pub trait Evaluate<R> {
    fn eval(self) -> R;
}

impl<'a, R> Evaluate<R> for LazyVal<'a, R> {
    fn eval(self) -> R {
        (self.0)()
    }
}

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}