continuwuity/src/core/utils/defer.rs
strawberry 77e0b76408
apply new rustfmt.toml changes, fix some clippy lints
Signed-off-by: strawberry <strawberry@puppygock.gay>
2024-12-15 01:00:41 -05:00

26 lines
480 B
Rust

#[macro_export]
macro_rules! defer {
($body:block) => {
struct _Defer_<F: FnMut()> {
closure: F,
}
impl<F: FnMut()> Drop for _Defer_<F> {
fn drop(&mut self) { (self.closure)(); }
}
let _defer_ = _Defer_ { closure: || $body };
};
($body:expr) => {
$crate::defer! {{ $body }}
};
}
#[macro_export]
macro_rules! scope_restore {
($val:ident, $ours:expr) => {
let theirs = $crate::utils::exchange($val, $ours);
$crate::defer! {{ *$val = theirs; }};
};
}