4 个版本 (2 个重大更改)
0.13.0 | 2019 年 6 月 21 日 |
---|---|
0.12.1 | 2019 年 6 月 20 日 |
0.1.1 | 2019 年 6 月 20 日 |
0.1.0 | 2019 年 6 月 18 日 |
#2290 在 Rust 模式
用于 errer_derive
5KB
70 行
errer - 平滑 & 灵活错误处理
结合来自失败和 SNAFU 的想法。
概览
use errer::ErrorContext;
#[derive(Errer)]
enum Error {
#[errer(from)] //implements From<request::Error>
Request(request::Error),
//implements Display
//from specifies the base for ErrorContext, which is implemented with context
//this generates a struct, akin to SNAFU, except you can use context on structs and enums of all kinds
#[errer(from, context, display = "Error parsing section {}: {}", 1, 0)]
ParsingSection { from: parse::Error, section: usize },
#[errer(from, std, display = "IO error: {}", 0)] //std implements std::error::Error if Self: Debug + Display
IO(io::Error)
}
res!(Error);
fn main_res() -> Res<()> {
let data = request::do()?;
data.parse().context(ParsingSection { section: 0 })?;
Ok(())
}
main_res!(main_res);
一些建议
- 上下文依赖于
from
指定基本错误;更多信息请参阅 内部特性。 - 您还可以使用结构体和枚举外部(设置默认值)的所有属性。
- 您可以使用
#[errer(context = name)]
设置生成的上下文结构的名称。 - 类似地,您可以使用
#[errer(from = member)]
设置from
使用的成员。 - 您可以在枚举的外部使用
display
设置周围的格式字符串。 - 并记住您始终可以自己实现
Display
。
依赖关系
~0–7MB
~38K SLoC