diode-base 0.1.0

Basic services for the diode library
Documentation
pub fn defer<F>(f: F) -> impl Drop
where
    F: FnOnce(),
{
    struct Defer<F: FnOnce()>(Option<F>);
    impl<F: FnOnce()> Drop for Defer<F> {
        fn drop(&mut self) {
            self.0.take().unwrap()();
        }
    }
    Defer(Some(f))
}

#[macro_export]
macro_rules! defer {
    ($e:expr) => {
        let _defer = $crate::defer(|| $e);
    };
    ($($data: tt)*) => {
        $crate::defer!({ $($data)* });
    };
}