15 个版本

0.2.0 2024年4月26日
0.1.2 2024年4月18日
0.1.1 2024年3月6日
0.1.0 2024年1月15日
0.0.9 2023年11月29日

943Rust 模式

Download history 1690/week @ 2024-04-29 3627/week @ 2024-05-06 2832/week @ 2024-05-13 2680/week @ 2024-05-20 1332/week @ 2024-05-27 1037/week @ 2024-06-03 993/week @ 2024-06-10 860/week @ 2024-06-17 732/week @ 2024-06-24 1505/week @ 2024-07-01 999/week @ 2024-07-08 1045/week @ 2024-07-15 652/week @ 2024-07-22 1006/week @ 2024-07-29 612/week @ 2024-08-05 1089/week @ 2024-08-12

每月下载量 3,404
4 包中使用 (直接使用 2 个)

Apache-2.0 许可

26KB
437

thiserror-ext

Crate Docs

thiserror 提供有用的扩展工具。有关更多详细信息,请参阅文档

#[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");

依赖项

~310–780KB
~18K SLoC