canvas_lms_sync/
defer.rs

1pub struct Defer<F>
2where
3    F: FnOnce(),
4{
5    pub f: Option<F>,
6}
7
8impl<F> Drop for Defer<F>
9where
10    F: FnOnce(),
11{
12    fn drop(&mut self) {
13        if let Some(f) = self.f.take() {
14            f();
15        }
16    }
17}
18
19#[macro_export]
20macro_rules! defer {
21    ($code:block) => {
22        let _defer = crate::defer::Defer { f: Some(|| $code) };
23    };
24}