#error #error-handling #derive

thiserror-ext

Useful extension utilities for thiserror

15 releases

0.2.0 Apr 26, 2024
0.1.2 Apr 18, 2024
0.1.1 Mar 6, 2024
0.1.0 Jan 15, 2024
0.0.9 Nov 29, 2023

#15 in #error-handling

Download history 4158/week @ 2024-03-29 4654/week @ 2024-04-05 4471/week @ 2024-04-12 3960/week @ 2024-04-19 2629/week @ 2024-04-26 3030/week @ 2024-05-03 2980/week @ 2024-05-10 2911/week @ 2024-05-17 1536/week @ 2024-05-24 1055/week @ 2024-05-31 894/week @ 2024-06-07 1011/week @ 2024-06-14 707/week @ 2024-06-21 1355/week @ 2024-06-28 1035/week @ 2024-07-05 974/week @ 2024-07-12

4,209 downloads per month
Used in 4 crates (2 directly)

Apache-2.0

26KB
437 lines

thiserror-ext

Crate Docs

Useful extension utilities for thiserror. See the documentation for more details.

#[derive(
    Debug,
    thiserror::Error,
    thiserror_ext::Box,
    thiserror_ext::Construct,
    thiserror_ext::ContextInto,
    thiserror_ext::Macro,
)]
#[thiserror_ext(
    newtype(name = Error, backtrace),
    macro(path = "crate::foo"),
)]
enum ErrorKind {
    #[error("cannot parse int from `{from}`")]
    Parse {
        source: std::num::ParseIntError,
        from: String,
    },

    #[error("not yet implemented: {msg}")]
    NotImplemented {
        issue: Option<i32>,
        #[message] msg: String,
    },

    #[error("internal error: {0}")]
    Internal(String),
}

// `thiserror_ext::Construct`
let error: Error = Error::internal("oops");

// `thiserror_ext::Box`
assert_eq!(std::mem::size_of::<Error>(), std::mem::size_of::<usize>());
let bt: &Backtrace = std::error::request_ref(&error).unwrap();

// `thiserror_ext::ContextInto`
let result: Result<i32, Error> = "foo".parse().into_parse("foo");

// `thiserror_ext::AsReport`
//
// "cannot parse int from `foo`: invalid digit found in string"
println!("{}", result.unwrap_err().as_report());

// `thiserror_ext::Macro`
bail_not_implemented!(issue = 42, "an {} feature", "awesome");

Dependencies

~300–770KB
~18K SLoC