bulwark 0.1.0

Panic-aware scope guards
Documentation
# Bulwark

An implementation of "scope guards", little bits of code scheduled to run when
the current scope exits.

* `scope_exit! { ... }` executes the block whenever the surrounding scope exits.
* `scope_success! { ... }` executes the block only when the surrounding scope
  exits without panicking.
* `scope_failure! { ... }` executes the block only when the surrounding scope
  exits due to a panic.

## Cargo.toml

```toml
[dependencies]
bulwark = "0.1.0"
```

## Example

**Code**:

```rust
#[macro_use]
extern crate bulwark;

fn main() {
  scope_failure! {
    println!("The main thread has panicked!");
  }

  {
    scope_exit! {
      println!("Leaving inner scope.");
    }

    scope_success! {
      println!("Never printed, because of the below panic in this scope.");
    }

    println!("In the inner scope.");
    panic!("Woman overboard!");
  }

  println!("End of main never reached, but the scope_failure still runs.");
}
```

**Output**:

```
In the inner scope.
thread 'main' panicked at 'Woman overboard!', src/main.rs:19
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Leaving inner scope.
The main thread has panicked!
```

## License

Licensed under either of
  * Apache License, Version 2.0 ([LICENSE-APACHE]LICENSE-APACHE or
    http://www.apache.org/licenses/LICENSE-2.0)
  * MIT license ([LICENSE-MIT]LICENSE-MIT or
    http://opensource.org/licenses/MIT) at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you shall be dual licensed as above, without any
additional terms or conditions.