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

Download history 46/week @ 2024-07-21 107/week @ 2024-07-28 90/week @ 2024-08-04 90/week @ 2024-08-11 47/week @ 2024-08-18 109/week @ 2024-08-25 193/week @ 2024-09-01 275/week @ 2024-09-08 62/week @ 2024-09-15 259/week @ 2024-09-22 687/week @ 2024-09-29 204/week @ 2024-10-06 157/week @ 2024-10-13 26/week @ 2024-10-20 66/week @ 2024-10-27 129/week @ 2024-11-03

382 downloads per month
Used in 23 crates (17 directly)

MIT/Apache

11KB
187 lines

orfail

orfail Documentation Actions Status License

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
      • Optional serde support ("serde" feature)
    • 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

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