6 releases (2 stable)
1.1.0 | Aug 18, 2023 |
---|---|
1.0.0 | Aug 18, 2023 |
0.1.3 | Feb 15, 2023 |
0.1.1 | Dec 3, 2022 |
0.1.0 | Oct 25, 2022 |
#1001 in Rust patterns
382 downloads per month
Used in 23 crates
(17 directly)
11KB
187 lines
orfail
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
, andVec
of those)- Portable across process and language boundaries
- Optional
serde
support ("serde" feature)
- Doesn't implement
std::error::Error
trait
- Constituted with simple types (
OrFail
trait- Backtrace location is appended to
Failure
each time when callingOrFail::or_fail()
bool
,Option<_>
andResult<_, _>
implementOrFail
- Backtrace location is appended to
Examples
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
assert_eq!(safe_div(4, 0).err().map(|e| e.to_string()),
Some(
r#"expected `true` but got `false`
at src/lib.rs:8
at src/lib.rs:13
"#.to_owned()));
Dependencies
~160KB