#枚举 #变体 #转换 #自动 #新类型 #生成 #

from_variants

Rust 宏,用于自动生成新类型枚举的转换

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 模式

Download history 5155/week @ 2024-04-21 4202/week @ 2024-04-28 2377/week @ 2024-05-05 3286/week @ 2024-05-12 3028/week @ 2024-05-19 3514/week @ 2024-05-26 4067/week @ 2024-06-02 3689/week @ 2024-06-09 3524/week @ 2024-06-16 1739/week @ 2024-06-23 2489/week @ 2024-06-30 2534/week @ 2024-07-07 2230/week @ 2024-07-14 3274/week @ 2024-07-21 4706/week @ 2024-07-28 3672/week @ 2024-08-04

14,113 每月下载量
34 crate 中使用 34 (7 直接)

MIT/Apache

6KB

Build Status Latest Version

新类型变体转换

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