rtic_common/
dropper.rs

1//! A drop implementation runner.
2
3/// Runs a closure on drop.
4pub struct OnDrop<F: FnOnce()> {
5    f: core::mem::MaybeUninit<F>,
6}
7
8impl<F: FnOnce()> OnDrop<F> {
9    /// Make a new droppper given a closure.
10    pub fn new(f: F) -> Self {
11        Self {
12            f: core::mem::MaybeUninit::new(f),
13        }
14    }
15
16    /// Make it not run drop.
17    pub fn defuse(self) {
18        core::mem::forget(self)
19    }
20}
21
22impl<F: FnOnce()> Drop for OnDrop<F> {
23    fn drop(&mut self) {
24        unsafe { self.f.as_ptr().read()() }
25    }
26}