#enums #index #string #macro #macro-derive

过程宏 enum2pos

enum2pos 是一个用于枚举的 Rust derive 宏,它生成 "from_index(usize, Vec) -> Option" 和 "to_index()" 方法,用于在枚举的变体及其声明中的位置(类似于索引)之间进行转换。

2个版本

0.1.1 2023年3月24日
0.1.0 2023年3月24日

#1960 in 过程宏

Download history 147/week @ 2024-03-10 156/week @ 2024-03-17 284/week @ 2024-03-24 600/week @ 2024-03-31 75/week @ 2024-04-07 107/week @ 2024-04-14 99/week @ 2024-04-21 63/week @ 2024-04-28 177/week @ 2024-05-05 176/week @ 2024-05-12 173/week @ 2024-05-19 128/week @ 2024-05-26 108/week @ 2024-06-02 147/week @ 2024-06-09 89/week @ 2024-06-16 202/week @ 2024-06-23

每月547次下载

MIT许可证

7KB
78 代码行

enum2pos

github crates.io docs.rs

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