Rust crate for a convenient RAII scope guard that will run a given closure when it goes out of scope, even if the code between panics (assuming unwinding panic).
The defer! macro and guard are no_std compatible (require only core), but the on unwinding strategy requires linking to std.
Requires Rust 1.11.
Please read the API documentation here
<object data="https://travis-ci.org/bluss/scopeguard.svg" type="image/svg+xml">build_status</object>
#[macro_use(defer)] extern crate scopeguard; use scopeguard::guard; fn f() { defer!(println!("Called at return or panic")); panic!(); } use std::fs::File; use std::io::Write; fn g() { let f = File::create("newfile.txt").unwrap(); let mut file = guard(f, |f| { // write file at return or panic let _ = f.sync_all(); }); // Access the file through the scope guard itself file.write(b"test me\n").unwrap(); }
defer_on_unwind!
, Strategy
traitGuard
→ ScopeGuard
ScopeGuard::with_strategy
.ScopeGuard
now implements Debug
.defer!()