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

#1263 in Rust patterns

Download history 147/week @ 2024-10-15 45/week @ 2024-10-22 52/week @ 2024-10-29 231/week @ 2024-11-05 77/week @ 2024-11-12 73/week @ 2024-11-19 117/week @ 2024-11-26 795/week @ 2024-12-03 168/week @ 2024-12-10 58/week @ 2024-12-17 36/week @ 2024-12-24 277/week @ 2024-12-31 557/week @ 2025-01-07 138/week @ 2025-01-14 144/week @ 2025-01-21 28/week @ 2025-01-28

935 downloads per month
Used in 26 crates (20 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