view lazycall_support/src/lib.rs @ 1:babb2f9cb5ad

All features working
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 20 Nov 2020 23:20:03 +0100
parents 7401c615042c
children 2b71ed370156
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);
    }
}