# drop_guard
[](https://crates.io/crates/drop_guard)
[](https://docs.rs/drop_guard)
[](https://travis-ci.org/dns2utf8/drop_guard)
[](https://ci.appveyor.com/project/dns2utf8/drop-guard)
A RAII that executes you function whenever the wrapped object gets dropped.
## Use cases
Joining threads when they fall out of scope:
```rust
extern crate drop_guard;
use drop_guard::DropGuard;
use std::thread::{spawn, sleep};
use std::time::guard;
fn main() {
let _ = guard(spawn(move || {
sleep(Duration::from_secs(2));
println!("println! from thread");
})
, |join_handle| join_handle.join().unwrap());
println!("Waiting for thread ...");
}
```
## Examples
Feel free to run the included examples:
```bash
cargo run --example drop
cargo run --example rainbow
cargo run --example thread
cargo run --example threadpool
```
## Contribute
Contributions are very welcome.
Feel free to bring your own ideas or continue one of these:
* Add example/test with panic between guard and drop
* Add example/test with panic in guard closure
* Add minimal rustc version
## 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 discression.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.