diff options
| author | Jonas Maier <> | 2026-03-10 15:00:44 +0100 |
|---|---|---|
| committer | Jonas Maier <> | 2026-03-10 15:00:44 +0100 |
| commit | 83e5044fd6e5c2a8bccd29f5a8462e7016823aed (patch) | |
| tree | 3b07230cc7f373bf49a4d78b61e1635be87bfc93 /src/defer.rs | |
| parent | 956e67aafd0ca9bf49782e308644590406d11989 (diff) | |
| download | pish-83e5044fd6e5c2a8bccd29f5a8462e7016823aed.tar.gz | |
defer macro
Diffstat (limited to 'src/defer.rs')
| -rw-r--r-- | src/defer.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/defer.rs b/src/defer.rs new file mode 100644 index 0000000..362c7d1 --- /dev/null +++ b/src/defer.rs @@ -0,0 +1,16 @@ +pub struct Defer<T: FnOnce()>(pub Option<T>); + +impl<T: FnOnce()> Drop for Defer<T> { + fn drop(&mut self) { + if let Some(f) = self.0.take() { + f(); + } + } +} + +#[macro_export] +macro_rules! defer { + ($($x:tt)*) => { + let _defer = crate::defer::Defer(Some(move || {$($x)*})); + }; +} |
