1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use std::mem; pub struct Defer<F: FnOnce()> { f: Option<F>, } impl<F: FnOnce()> Drop for Defer<F> { fn drop(&mut self) { if let Some(f) = mem::replace(&mut self.f, None) { f(); } } } pub fn defer<F: FnOnce()>(f: F) -> Defer<F> { Defer { f: Some(f) } }