12个版本 (3个稳定版本)
1.0.2 | 2023年2月8日 |
---|---|
1.0.0 | 2022年2月24日 |
0.6.0 | 2021年3月3日 |
0.5.0 | 2020年7月21日 |
0.2.3 | 2017年6月19日 |
#229 in #target
12,292 每月下载量
在 37 个crate中使用(通过 from_variants)
12KB
266 行代码
新类型变体转换
Rust宏crate,可自动从变体类型生成目标枚举的转换。
此crate需要Rust 1.45或更高版本在稳定版上编译。
示例
use from_variants::FromVariants;
#[derive(Debug, Clone, PartialEq, Eq, FromVariants)]
pub enum Lorem {
Str(String),
Num(u16),
}
fn main() {
assert_eq!(Lorem::Num(10), Lorem::from(10));
}
您可以跳过变体以避免类型冲突
use from_variants::FromVariants;
#[derive(Debug, Clone, PartialEq, Eq, FromVariants)]
pub enum Ipsum {
Hello(String),
#[from_variants(skip)]
Goodbye(String),
}
fn main() {
assert_eq!(Ipsum::Hello("John".to_string()), Ipsum::from("John".to_string()));
}
特性
- 变体选择退出:要跳过一个变体,请将该变体添加到
#[from_variants(skip)]
。 - 转换选择进入:在枚举或变体上使用
#[from_variants(into)]
以生成将自动转换的转换,例如,接受一个&str
用于String
变体。这必须谨慎使用,以避免生成冲突的impl。 - no_std支持:生成的转换不依赖于标准库。
依赖关系
~2MB
~42K SLoC