3个不稳定版本
0.3.0 | 2023年11月15日 |
---|---|
0.2.1 | 2021年3月3日 |
0.2.0 | 2019年5月13日 |
495 在 Rust模式
1,818 每月下载量
用于 19 crates
5KB
55 行
Frunk枚举支持
使用方法
这些crates增强了frunk crate,允许将枚举以及结构体进行变形。有关变形和基于LabelledGeneric
trait的更多信息,请参阅https://docs.rs/frunk/latest/frunk/#transmogrifying和https://docs.rs/frunk/latest/frunk/labelled/trait.LabelledGeneric.html。
要使用此功能来增强自己的枚举,您需要
-
将
frunk-enum-derive
作为[dev-dependency]
添加到您的Cargo.toml
-
使用自定义derive标记枚举
#[derive(LabelledGenericEnum)] enum Foo { Bar(String), Baz { name: String, id: Identity }, }
-
将
frunk-enum-core
和frunk-core
crates作为[dependency]
条目添加到您的Cargo.toml
-
然后(假设有一个与
Foo
具有相同结构的NewFoo
枚举)您可以编写let foo = Foo::Baz { name: "Andy".into(), id: Identity }; let new_foo: NewFoo = foo.transmogrify();
这是通过为Foo
推导出LabelledGeneric
的实现来实现的,这允许在泛型求和类型的实例之间进行转换。核心crate提供了在变体的主体是递归可变形的情况下在这些泛型求和类型之间进行转换的工具。这允许在类型之间进行任意深度的转换,特别是在两个类型都来自某些公共输入文件,但被rust编译器视为不同类型的情况下非常有用(例如,因为它们在不同的crate中)。
贡献
感谢您对frunk-enum感兴趣,所有贡献都受欢迎,无论是问题报告、功能请求还是代码贡献。
问题贡献
在打开问题时,请提供问题的描述、frunk和frunk-enum的版本以及展示问题的示例代码。
代码贡献
如果您希望向frunk-enum贡献代码,您可以使用GitHub pull request来这样做,但您需要为每个提交签字,以表明您同意遵守DCO的条款。
lib.rs
:
此crate增强了frunk
crate的功能,允许在结构相似的枚举之间进行transmogrification。
该crate专门定义了用于枚举泛型表示的数据结构,frunk-enum-derive
crate添加了一个proc-macro来自动生成利用此核心功能所需的对每种类型的代码。
依赖关系
~0.5–1MB
~21K SLoC