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

#410 in Rust patterns

Download history 43/week @ 2023-12-18 61/week @ 2023-12-25 119/week @ 2024-01-08 217/week @ 2024-01-15 123/week @ 2024-01-22 66/week @ 2024-01-29 181/week @ 2024-02-05 111/week @ 2024-02-12 205/week @ 2024-02-19 179/week @ 2024-02-26 186/week @ 2024-03-04 87/week @ 2024-03-11 146/week @ 2024-03-18 68/week @ 2024-03-25 216/week @ 2024-04-01

549 downloads per month
Used in 18 crates (12 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

~180KB