30 lines
506 B
Rust
30 lines
506 B
Rust
|
#[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();
|
||
|
}
|