struct DeferClosure { f: Option, } impl Drop for DeferClosure { fn drop(&mut self) { if let Some(f) = self.f.take() { f(); } } } // Run some code when a scope is exited, similar to Go's defer statement pub fn defer(f: F) -> impl Drop + Sized { DeferClosure { f: Some(f) } }