phantomdrop 1.0.0

Go-like deferring of function calls
Documentation
  • Coverage
  • 100%
    13 out of 13 items documented1 out of 13 items with examples
  • Links
  • Crates.io
  • Dependencies
  • Versions
  • Owners
  • notflan

Small library for defering the running of function until the end of a block.

Uasge

Similar to the defer mechanism in Go, we can use this to defer the calling of functions

fn do_something()
{
let _guard = phantomdrop::defer(|| println!("Hello!"));
// do some work
} // "Hello!" will now be printed when the function returns or unwinds (unless unwinds are disabled).

The guard can also hold a value

fn do_something(print: String)
{
# use phantomdrop::PhantomDrop;
let _guard = PhantomDrop::new(print, |string| println!("Dropped: {}", string));
// do some work
} // `print` will now be printed here.

Or capture a value, by reference, mutable reference, or moving.

fn do_something(print: String)
{
let _guard = phantomdrop::defer(move || println!("Dropped: {}", print)); // Moves `print` into itself.
// do some work
} // `print` will now be printed here.

fn do_something_by_reference(print: String)
{
let _guard = phantomdrop::defer(|| println!("Dropped: {}", print)); // Holds an immutable reference to `print`.
let trimmed = print.trim(); // Can still be used
} // `print` will now be printed here.

fn do_something_by_mutable_reference(print: &mut String)
{
let _guard = phantomdrop::defer(|| *print = String::from("Dropped")); // Holds a mutable reference to `print`.
} // `print` will now be set to "Dropped" here.