#[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_all(b"test me\n").unwrap(); } fn main() { f(); g(); }