view lazycall_support/src/lib.rs @ 0:7401c615042c

Initial commit
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 20 Nov 2020 22:15:20 +0100
parents
children babb2f9cb5ad
line wrap: on
line source


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

impl<'a, Result> LazyVal<'a, Result> {
    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);
    }
}