#错误 #错误处理 #灵活 #上下文 #显示 #错误上下文 #snafu

errer

针对 Rust 的灵活错误处理。在失败和 SNAFU 之间的折衷方案

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 日

#2290Rust 模式


用于 errer_derive

MIT 许可证

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