1 个不稳定版本
0.1.0 | 2021 年 6 月 23 日 |
---|
2533 在 Rust 模式
8KB
convertable-errors
此包定义了一个宏,用于为 Rust 枚举的变体派生 From 转换。例如
enum ForeignType;
enum MyEnum {
Variant(ForeignType)
}
impl From<ForeignType> for MyEnum {
fn from(v: ForeignType) -> Self {
Self::Variant(v)
}
}
这是我们通常如何定义从外部类型到包含这些外部类型的枚举变体的转换的方法。但是 convertable-errors 提供了一个声明性的 Rust 宏来为我们生成这些转换。可转换的错误可以用于为任何类型的 Rust 枚举(目前不包括具有结构体变体的枚举)生成这些类型的转换,但我的主要用例是类似错误的枚举。
使用 convertable-errors,我们可以像这样为我们枚举的变体生成 From<T>
定义
enum ForeignType;
convertable_error! {
enum MyEnum {
(Variant(ForeignType), [(ForeignType, Self::Variant)]
}
}
使用 convertable-errors 定义可转换枚举的语法如下
- 枚举的每个变体都必须被一个元组包裹:
enum MyError { (Variant(ForeignType), (Variant1) }
- 元组的第一个成员表示你的变体。目前,仅支持元组变体和单元变体,因为我是个懒惰的家伙。
- 元组的第二个成员(可选)表示可以转换为该变体的类型:
enum MyError { (Variant(ForeignType), [ ... ]), (Variant1) }
- 可转换类型数组的成员是每个表示可以转换为您的枚举的外部类型的元组,以及应用外部值的方法或变体:
[(ForeignType, Self::Variant)]
. 内部,这个第二个成员可以是一个闭包|x| Self::Variant(x)
,一个单元变体闭包|_| Self::Variant1
,或者简单的是一个变体标识符,其中将存储外部类型的值:Self::Variant
. 实际上,您可以使用这个宏对任何枚举进行操作,但我发现它对于类似Error的枚举最有用。
注意:这不是一个严肃的项目,我可能犯了一些错误,所以请随意提出PR :) 这只是一个有用的代码片段,我觉得分享一下。