2个版本
0.1.1 | 2023年3月24日 |
---|---|
0.1.0 | 2023年3月24日 |
#1960 in 过程宏
每月547次下载
7KB
78 代码行
enum2pos
enum2pos 是一个用于枚举的 Rust derive 宏,它生成 from_index(usize, Vec<String>) -> Option<Self>
和 to_index()
方法,用于在枚举的变体及其声明中的位置(类似于索引)之间进行转换。
使用方法
将以下内容添加到您的 Cargo.toml
enum2pos = "0.1.1"
示例
use enum2pos::EnumIndex;
#[derive(EnumIndex, PartialEq, Debug)]
enum SampleEnum {
Unit,
Unnamed(i32, String),
}
#[test]
fn to_index() {
let unit = SampleEnum::Unit;
let unnamed = SampleEnum::Unnamed(42, String::from("test"));
assert_eq!(unit.to_index(), 0);
assert_eq!(unnamed.to_index(), 1);
}
#[test]
fn from_index_unit() {
let index = 0;
let args: Vec<String> = vec![];
let expected = Some(SampleEnum::Unit);
assert_eq!(SampleEnum::from_index(index, &args), expected);
}
#[test]
fn from_index_unnamed() {
let index = 1;
let args = vec!["42".to_string(), "test".to_string()];
let expected = Some(SampleEnum::Unnamed(42, String::from("test")));
assert_eq!(SampleEnum::from_index(index, &args), expected);
}
#[test]
fn from_index_invalid() {
let index = 2;
let args: Vec<String> = vec![];
assert_eq!(SampleEnum::from_index(index, &args), None);
}
依赖项
~1.5MB
~35K SLoC