tvl-depot/fun/defer_rs/examples/defer.rs
Vincent Ambo 3d8ee62087 style(rust): Format all Rust code with rustfmt
Change-Id: Iab7e00cc26a4f9727d3ab98691ef379921a33052
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5240
Tested-by: BuildkiteCI
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Reviewed-by: Profpatsch <mail@profpatsch.de>
Reviewed-by: grfn <grfn@gws.fyi>
Reviewed-by: tazjin <tazjin@tvl.su>
2022-02-08 12:06:39 +00:00

31 lines
553 B
Rust

// Go's defer in Rust!
struct Defer<F: Fn()> {
f: F,
}
impl<F: Fn()> Drop for Defer<F> {
fn drop(&mut self) {
(self.f)()
}
}
// Only added this for Go-syntax familiarity ;-)
fn defer<F: Fn()>(f: F) -> Defer<F> {
Defer { f }
}
fn main() {
let mut i = 1;
// Calling it "token" ... could be something else. The lifetime of this
// controls when the action is run.
let _token = defer(move || println!("Value is: {}", i));
i += 1;
println!("Value is: {}", i);
}
// Prints:
// Value is: 2
// Value is: 1