3 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2017 年 5 月 23 日 |
---|---|
0.1.1 | 2017 年 4 月 30 日 |
0.1.0 | 2017 年 4 月 30 日 |
#1246 在 Rust 模式
20,680 每月下载量
用于 50 个 包(5 个直接使用)
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;