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 日 |
#1745 在 Rust 模式
用于 telegrambot
27KB
262 行代码(不包括注释)
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 许可协议,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。