#枚举 #变体 #try-from #

enum_variant_macros

生成 From & TryFrom 枚举的宏

3 个版本 (重大更新)

0.3.0 2023年4月8日
0.2.0 2022年5月30日
0.1.0 2022年2月23日

#2338Rust 模式

Download history 1/week @ 2024-03-16 1/week @ 2024-03-23 69/week @ 2024-03-30 44/week @ 2024-04-06 4/week @ 2024-04-13 22/week @ 2024-04-20 7/week @ 2024-04-27 73/week @ 2024-05-11 6/week @ 2024-05-18 139/week @ 2024-05-25 55/week @ 2024-06-01 57/week @ 2024-06-08 15/week @ 2024-06-15 39/week @ 2024-06-22 2/week @ 2024-06-29

每月下载量 116 次
用于 xcodeproj

MIT/Apache

10KB
50 代码行

Enum Variant Macros

用于生成未命名单成员枚举的 From & TryFrom 实现的宏库。换句话说,以下格式的。

pub enum Variants {
    Integer(i32),
    Float(f32),
    Bool(bool),
    Byte(u8),
}

该库包含 2 个宏,TryFromVariants & FromVariants。

TryFromVariants 为每个变体类型实现 TryFrom,允许代码如下所示:

use enum_variant_macros::*;
use std::error::Error;
use strum_macros::IntoStaticStr;

#[derive(IntoStaticStr, TryFromVariants)]
enum Variants {
    Integer(i32),
    Float(f32),
}

fn main() -> Result<(), Box<dyn Error>> {
    let variant = Variants::Float(12.0);
    let float: f32 = TryFrom::try_from(variant)?;
    Ok(())
}

注意:此类型的派生还需要实现 impl From<Variant> for &'static str

FromVariants 相对简单,它只为每个包装类型生成 From。

use enum_variant_macros::*;

#[derive(Debug, PartialEq, FromVariants)]
enum Variants {
    Integer(i32),
    Float(f32),
}

let variant = Variants::from(12);
assert_eq!(Variants::Integer(12), variant);

注意

如果这个库不符合您的喜好,我推荐 enum dispatch,这是一个功能更全面的库,也为枚举提供了 from & try_into。

许可证

根据您的选择,许可协议为 Apache License, Version 2.0 或 MIT 许可证。Apache 许可证,版本 2.0MIT 许可证

依赖关系

~300–760KB
~18K SLoC