#error-handling #type #result #bool

orfail

Error handling library for portable unrecoverable errors

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

#623 in Rust patterns

Download history 433/week @ 2023-08-12 434/week @ 2023-08-19 257/week @ 2023-08-26 115/week @ 2023-09-02 84/week @ 2023-09-09 148/week @ 2023-09-16 128/week @ 2023-09-23 96/week @ 2023-09-30 55/week @ 2023-10-07 79/week @ 2023-10-14 97/week @ 2023-10-21 85/week @ 2023-10-28 119/week @ 2023-11-04 109/week @ 2023-11-11 92/week @ 2023-11-18 162/week @ 2023-11-25

491 downloads per month
Used in 16 crates (8 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

~175KB