6个版本

使用旧的Rust 2015

0.0.5 2021年2月26日
0.0.4 2017年10月4日
0.0.3 2017年1月29日

688过程宏

Download history 1514/week @ 2024-03-14 1431/week @ 2024-03-21 2557/week @ 2024-03-28 1610/week @ 2024-04-04 1585/week @ 2024-04-11 1399/week @ 2024-04-18 1787/week @ 2024-04-25 2004/week @ 2024-05-02 1953/week @ 2024-05-09 1563/week @ 2024-05-16 1327/week @ 2024-05-23 1984/week @ 2024-05-30 1952/week @ 2024-06-06 2050/week @ 2024-06-13 1995/week @ 2024-06-20 1546/week @ 2024-06-27

每月8,097次下载
用于 288 个crate(直接使用29个)

MIT/Apache

17KB
311

派生Rust错误

Build Status Latest Version Docs

该crate使用宏1.1派生自定义错误。

入门

将此crate添加到您的依赖项部分:

[dependencies]
derive-error = "0.0.4"

在您的 main.rslib.rs 中导入它:

#[macro_use]
extern crate derive_error;

派生错误很简单。只需创建一个枚举用于您的错误,如Rust书中建议的 在Rust书中,使用文档注释为枚举变体添加简短描述,添加一个 #[derive(Debug, Error)] 即可完成。以下是书中示例使用此库的实现:

#[derive(Debug, Error)]
enum CliError {
  /// IO Error
  Io(io::Error),
  /// Failed to parse the CSV file
  Csv(csv::Error),
  /// No matching cities with a population were found
  NotFound,
}

这将派生 DisplayErrorFrom 的实现。有关如何使用此crate的实际情况,请参阅 reql crate

配置

并非所有错误都是完全相同的,并且需要例如 From 实现等。derive-error支持枚举变体的属性,允许您启用/禁用Error派生函数的某些方面。可以附加到派生 Error 的枚举变体上的有3个属性:non_stdmsg_embeddedno_from

msg_embedded 通过变体中的项目显示错误,通常是一个 String

no_from 跳过枚举变体的 From 实现,如果您希望错误不是来自其他地方,并且您的代码基本上是错误源,则希望这样做。

non_std 通过它的文档注释 /// 或嵌入的消息(如果变体有该属性)显示来自变体的错误,否则它将尝试使用变体内部错误的原因。这通常与 no_from 结合使用。

#[derive(Debug, Error)]
enum Error {
	#[error(msg_embedded, no_from, non_std)]
	RuntimeError(String),

	Io(Io::Error),

	#[error(non_std, no_from)]
	Json(serde_json::Value)
}

此示例展示了如何附加属性。内部 RuntimeError 有一个 String,在出错的情况下将用于显示。 Io 获得了一个 From 实现用于 Io::Error,这通常是最常见的用法。也可以直接在错误中嵌入值,在 Json 变体中嵌入一个 Value,稍后用于其他信息。

这些是从 reql crate 的 derive-error 使用中改编的

依赖项

~1.5MB
~41K SLoC