#variant #enums #generate #conversion #target #helper #from-variants

from_variants_impl

FromVariants crate的内部辅助工具包

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

Download history 4522/week @ 2024-03-14 3528/week @ 2024-03-21 4218/week @ 2024-03-28 5485/week @ 2024-04-04 3484/week @ 2024-04-11 4660/week @ 2024-04-18 4932/week @ 2024-04-25 2676/week @ 2024-05-02 3272/week @ 2024-05-09 3135/week @ 2024-05-16 3206/week @ 2024-05-23 3929/week @ 2024-05-30 3928/week @ 2024-06-06 3359/week @ 2024-06-13 2950/week @ 2024-06-20 1361/week @ 2024-06-27

12,292 每月下载量
37 个crate中使用(通过 from_variants

MIT/Apache

12KB
266 行代码

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 变体。这必须谨慎使用,以避免生成冲突的impl。
  • no_std支持:生成的转换不依赖于标准库。

依赖关系

~2MB
~42K SLoC