pub struct Defer T, T>(Option); impl T, T> Defer { pub fn new(f: F) -> Self { Defer(Some(f)) } } impl T, T> Drop for Defer { fn drop(&mut self) { if let Some(f) = self.0.take() { let _ = f(); } } }