orfail
======
[](https://crates.io/crates/orfail)
[](https://docs.rs/orfail)
[](https://github.com/sile/orfail/actions)

An error handling library for portable unrecoverable errors.
This crate provides,
- `Failure` struct that represents an unrecoverable error with an error message and user-level backtrace
- Constituted with simple types (`u32`, `String`, and `Vec` of those)
- Portable across process and language boundaries
- Doesn't implement `std::error::Error` trait
- `OrFail` trait
- Backtrace location is appended to `Failure` each time when calling `OrFail::or_fail()`
- `bool`, `Option<_>` and `Result<_, _>` implement `OrFail`
Examples
--------
```rust
use orfail::{OrFail, Result};
fn check_non_zero(n: isize) -> Result<()> {
(n != 0).or_fail()?;
Ok(())
}
fn safe_div(x: isize, y: isize) -> Result<isize> {
check_non_zero(y).or_fail()?;
Ok(x / y)
}
// OK
assert_eq!(safe_div(4, 2), Ok(2));
// NG
r#"expected `true` but got `false`
at src/lib.rs:8
at src/lib.rs:13
"#.to_owned()));
```