#error-chain #error-derive #error #derive #error-chain-mini

error-chain-mini-derive

为 error-chain-mini 提供推导

8 个版本

使用旧的 Rust 2015

0.2.0 2018 年 5 月 24 日
0.1.2 2018 年 5 月 16 日
0.0.4 2018 年 5 月 14 日
0.0.2 2018 年 4 月 21 日

#17 in #error-derive


2 个 crate 中使用

MIT/Apache

7KB
168

error-chain-mini

documentation Build Status

我认为 error-chain 很好,尤其是我喜欢 chain_err 方法。

然而,有时我觉得它太复杂了。我不想通过宏生成 ResultExtChainedError。这不是很令人困惑吗?

所以,我制作了这个小库,提供了非常直接的 ResultExtChainedError 和一些相关特质的实现。

此外,您可以使用 derive 实现您自己的 ErrorKind 类型。

示例

extern crate error_chain_mini;
#[macro_use]
extern crate error_chain_mini_derive;
use std::io;
use error_chain_mini::*;
use std::error::Error;
#[derive(ErrorKind)]
enum MyErrorKind {
    #[msg(short = "io error", detailed = "inner: {:?}", _0)]
    IoError(io::Error),
    #[msg(short = "index error", detailed = "invalid index: {:?}", _0)]
    IndexEroor(usize),
    TrivialError,
}
type MyError = ChainedError<MyErrorKind>;
type MyResult<T> = Result<T, MyError>;
fn always_fail() -> MyResult<()> {
    Err(MyErrorKind::TrivialError.into_with("Oh my god!"))
}
fn main() {
    assert_eq!("index error invalid index: 10", MyErrorKind::IndexEroor(10).full());
    let chained = always_fail().chain_err("Error in main()");
    assert!(chained.is_err());
    if let Err(chained) = chained {
        assert_eq!(chained.description(), "MyErrorKind::TrivialError");
        assert_eq!(chained.context[0], "Oh my god!");
        assert_eq!(chained.context[1], "Error in main()");
    }
}

所需 Rust 最小版本

1.26.0 (match_default_bindings 需要)

许可协议

该项目受以下任一许可协议的保护:

任选其一。


lib.rs:

推导

依赖关系

~2MB
~47K SLoC