# 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.