15 个版本 (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 日 |
#504 in Rust 模式
14,113 每月下载量
在 34 个 crate 中使用 34 (7 直接)
6KB
新类型变体转换
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
变体。这必须谨慎使用,以避免生成冲突的实现。 - 无标准库支持:生成的转换不依赖于标准库。
依赖
~2MB
~42K SLoC