3 个版本

使用旧的 Rust 2015

0.1.2 2015 年 6 月 21 日
0.1.1 2015 年 6 月 14 日
0.1.0 2015 年 6 月 7 日

2947Rust 模式

Download history 33/week @ 2024-03-24 103/week @ 2024-03-31 20/week @ 2024-04-07 29/week @ 2024-04-14 31/week @ 2024-04-21 29/week @ 2024-04-28 28/week @ 2024-05-05 27/week @ 2024-05-12 27/week @ 2024-05-19 23/week @ 2024-05-26 26/week @ 2024-06-02 13/week @ 2024-06-09 25/week @ 2024-06-16 23/week @ 2024-06-23 5/week @ 2024-06-30 11/week @ 2024-07-07

67 每月下载量
用于 2 crates

MIT 许可证

18KB
314

error_type

此 crate 提供了 error_type! 宏,该宏可以从简洁的定义中生成一个全新、功能丰富的错误类型。

以下是一个简单使用示例

#[macro_use] extern crate error_type;

use std::borrow::Cow;
use std::error::Error;
use std::io;

error_type! {
    #[derive(Debug)]
    pub enum LibError {
        Io(std::io::Error) {
            cause;
        },
        Message(Cow<'static, str>) {
            desc (e) &**e;
            from (s: &'static str) s.into();
            from (s: String) s.into();
        },
        Other(Box<Error>) {
            desc (e) e.description();
            cause (e) Some(&**e);
        }
    }
}

fn main() {}

上述展开包括以下内容

  • 具有 IoMessageOther 变体的 LibError 枚举(加上提供的 #[derive(Debug)] 注释)。

  • 每个变体的负载类型都有一个隐式的 impl From<Payload> for LibError

  • 一个隐式的 impl Display for LibError,使用每个变体负载类型的现有 Display 实现进行。

  • 一个隐式的 impl Error for LibError

  • 对于 Io 变体

    • 一个隐式的 description,转发到现有的 std::io::Error 定义。

    • 一个自动的 cause,转发到现有的 std::io::Error 定义。

      注意:自动的 cause 返回 std::io::Error::cause 的结果,而不是 负载数据本身。此宏将负载数据视为 错误,而不是根本原因。

  • 对于 Message 变体

    • 一个显式的 description,它只返回 Cow<'static, str> 的内容。

    • 一个隐式的 cause,它只返回 None

    • 一个显式的 From<&'static str> 转换。

    • 一个显式的 From<String> 转换。

  • 对于 Other 变体

    • 一个显式的 description,它将转发到现有定义的带框 Error

    • 一个显式的 cause,它返回作为原因的带框错误 本身。这与自动 cause 的行为不同。

常见问题解答

  • 我能否使用没有负载数据的单个变体?

    不,目前还不行。如果有需求可能会。

  • 我能否使用包含多个元素的元组变体?

    不。由于实现各个部分的构建方式,这可能会相当不便。不过并非不可能。

  • 我能否使用结构体变体?

    不,原因与元组变体类似。

  • 我能否有对所有变体都通用的字段;也就是说,将枚举包裹在结构体中?

    不。这会很理想,但我不确定如何实现。你可以在自定义结构体中使用 error_type! 的展开来添加额外的信息。

无运行时依赖