#枚举 #索引 # #宏-derive

enum_index

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

3 个不稳定版本

使用旧的 Rust 2015

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

#1246Rust 模式

Download history 7297/week @ 2024-02-27 5537/week @ 2024-03-05 6434/week @ 2024-03-12 10411/week @ 2024-03-19 6716/week @ 2024-03-26 7304/week @ 2024-04-02 5616/week @ 2024-04-09 6524/week @ 2024-04-16 7372/week @ 2024-04-23 5443/week @ 2024-04-30 5597/week @ 2024-05-07 4894/week @ 2024-05-14 4678/week @ 2024-05-21 4995/week @ 2024-05-28 5578/week @ 2024-06-04 4590/week @ 2024-06-11

20,680 每月下载量
用于 50 包(5 个直接使用)

MIT 许可协议

1KB

EnumIndex

EnumIndex 是一个用于从 Rust 的枚举中提取变体索引的特质。
IndexEnum 是一个特质,允许您通过索引来获取枚举变体。它仅在所有枚举参数实现 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"

然后导入所需的特性和宏

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

无运行时依赖