#枚举 #

enum_index_derive

用于提取枚举变体索引的宏

3个不稳定版本

使用旧的Rust 2015

0.2.0 2017年5月23日
0.1.1 2017年4月30日
0.1.0 2017年4月30日

113#枚举

Download history 11501/week @ 2023-11-29 8879/week @ 2023-12-06 8889/week @ 2023-12-13 4881/week @ 2023-12-20 4626/week @ 2023-12-27 5559/week @ 2024-01-03 7168/week @ 2024-01-10 10113/week @ 2024-01-17 5847/week @ 2024-01-24 5702/week @ 2024-01-31 13638/week @ 2024-02-07 10711/week @ 2024-02-14 6777/week @ 2024-02-21 7315/week @ 2024-02-28 5580/week @ 2024-03-06 5369/week @ 2024-03-13

27,228 每月下载量
用于 50 个crate (6 个直接使用)

MIT 许可证

4KB
97

EnumIndex

EnumIndex 是一个 trait,用于从 Rust 中的枚举中提取变体索引。
IndexEnum 是一个 trait,允许您通过索引获取枚举变体。它只适用于所有 Enum 参数实现 Default 的情况。

主要用例是实现您自己的枚举序列化。

pub trait EnumIndex {
    fn enum_index(&self) -> usize;
}

pub trait IndexEnum {
    fn index_enum(index: usize) -> Option<Self> where Self: Sized;
}

示例

// Contains needed traits
extern crate enum_index;
// Contains derives
#[macro_use]
extern crate enum_index_derive;
use enum_index::{EnumIndex, IndexEnum};

// IndexEnum can only be derived for enums with parameters implementing Default
// In this example Default is checked for String, f32 and u64.
#[derive(EnumIndex, IndexEnum, Debug)]
enum OpCode {
    Disconnect,                       // 0
    SendData(String),                 // 1
    SomethingElse { a: f32, b: u64 }  // 2
}

fn main() {
    let first = OpCode::Disconnect;
    let second = OpCode::SendData("hello");
    let third = OpCode::SomethingElse {a: 1f32, b: 2u64};
    println!("{}", first.enum_index()); // prints 0
    println!("{}", second.enum_index()); // prints 1
    println!("{}", third.enum_index()); // prints 2

    let opcode_variant = OpCode::index_enum(2).unwrap();
    println!("{:?}", opcode_variant); // prints SomethingElse{a: 0f32, b: 0u64}
}

在您的项目中使用

在您的 Cargo.toml 文件中添加以下内容

[dependencies]
enum_index = "0.2.0"
enum_index_derive = "0.2.0"

然后导入所需的 trait 和宏

extern crate enum_index;
#[macro_use]
extern crate enum_index_derive;

依赖项

~1.5MB
~40K SLoC