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