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 中使用
7KB
168 行
error-chain-mini
我认为 error-chain 很好,尤其是我喜欢 chain_err
方法。
然而,有时我觉得它太复杂了。我不想通过宏生成 ResultExt
和 ChainedError
。这不是很令人困惑吗?
所以,我制作了这个小库,提供了非常直接的 ResultExt
、ChainedError
和一些相关特质的实现。
此外,您可以使用 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 需要)
许可协议
该项目受以下任一许可协议的保护:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
lib.rs
:
推导
依赖关系
~2MB
~47K SLoC