# ⚾ #\[catch_panic\]
[](https://crates.io/crates/catch_panic)
[](https://docs.rs/catch_panic)
[](https://github.com/HermitSocialClub/catch_panic)
A helper macro for safe Java-Rust interop that "catches" Rust panics and rethrows them as Java exceptions.
## Getting Started
Add `catch_panic` as a dependency to your `Cargo.toml`:
```toml
[dependencies]
catch_panic = "1.0.0"
```
## Usage
Attach `#[catch_panic]` to a JNI callback to have panics converted into `RuntimeException`s:
```rust
use jni::JNIEnv;
use catch_panic::catch_panic;
#[no_mangle]
#[catch_panic]
pub extern "C" fn Java_com_example_Example_panic(_env: JNIEnv) {
panic!("everything is not fine");
}
```
See the [docs](https://docs.rs/catch_panic) for macro options and more information.
## License
This crate is dual-licensed under either:
- the [Apache License, Version 2.0](LICENSE-APACHE)
- the [MIT license](LICENSE-MIT)
at your option.
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.
The code in this crate is a derivative of code from [HermitSocialClub/HermitRepo][HermitRepo],
specifically the files [`ProjectTomato/tomato_macros/src/lib.rs`][tomato_macros_lib] and
[`ProjectTomato/tomato/src/util.rs`][tomato_util].
All authors of these two files have agreed to relicense the original code under the above license.
[HermitRepo]: https://github.com/HermitSocialClub/HermitRepo
[tomato_macros_lib]: https://github.com/HermitSocialClub/HermitRepo/blob/bedfbbd8ca332d473a4cde7b063d370990afd68f/ProjectTomato/tomato_macros/src/lib.rs
[tomato_util]: https://github.com/HermitSocialClub/HermitRepo/blob/bedfbbd8ca332d473a4cde7b063d370990afd68f/ProjectTomato/tomato/src/util.rs