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}