1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
pub struct OnDrop<F: FnOnce()>(Option<F>); impl<F: FnOnce()> OnDrop<F> { pub fn new(f: F) -> Self { OnDrop(Some(f)) } } impl<F: FnOnce()> Drop for OnDrop<F> { fn drop(&mut self) { if let Some(f) = self.0.take() { f() } } }