#error-chain #error #io-error #minimalist #mini #addition #don-t

error-chain-mini

适用于极简主义的 error-chain

8 个版本

使用旧的 Rust 2015

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

#1745Rust 模式


用于 telegrambot

MIT/Apache 许可协议

27KB
262 行代码(不包括注释)

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

许可证

本项目许可协议为以下之一

供您选择。

无运行时依赖