| 1 | #[macro_use (defer)] |
| 2 | extern crate scopeguard; |
| 3 | |
| 4 | use scopeguard::guard; |
| 5 | |
| 6 | fn f() { |
| 7 | defer! { |
| 8 | println!("Called at return or panic" ); |
| 9 | } |
| 10 | panic!(); |
| 11 | } |
| 12 | |
| 13 | use std::fs::File; |
| 14 | use std::io::Write; |
| 15 | |
| 16 | fn g() { |
| 17 | let f = File::create("newfile.txt" ).unwrap(); |
| 18 | let mut file = guard(f, |f| { |
| 19 | // write file at return or panic |
| 20 | let _ = f.sync_all(); |
| 21 | }); |
| 22 | // access the file through the scope guard itself |
| 23 | file.write_all(b"test me \n" ).unwrap(); |
| 24 | } |
| 25 | |
| 26 | fn main() { |
| 27 | f(); |
| 28 | g(); |
| 29 | } |
| 30 | |