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}