This commit is contained in:
JMARyA 2025-03-10 18:43:32 +01:00
parent 18c663fcdb
commit 46cb21dc2a
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
8 changed files with 575 additions and 6 deletions

View file

@ -1,16 +1,22 @@
use std::mem::take;
pub struct Defer {
f: Box<dyn Fn()>,
f: Option<Box<dyn FnOnce()>>,
}
impl Defer {
pub fn new<F: Fn() + 'static>(f: F) -> Self {
Self { f: Box::new(f) }
pub fn new<F: FnOnce() + 'static>(f: F) -> Self {
Self {
f: Some(Box::new(f)),
}
}
}
impl Drop for Defer {
fn drop(&mut self) {
log::debug!("Calling defer function");
self.f.as_ref()();
if let Some(f) = take(&mut self.f) {
f();
}
}
}