3 个版本
使用旧的 Rust 2015
0.1.2 | 2015 年 6 月 21 日 |
---|---|
0.1.1 | 2015 年 6 月 14 日 |
0.1.0 | 2015 年 6 月 7 日 |
2947 在 Rust 模式 中
67 每月下载量
用于 2 crates
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() {}
上述展开包括以下内容
-
具有
Io
、Message
和Other
变体的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!
的展开来添加额外的信息。