#枚举 # #pro-macro

enum_cycling

用于处理枚举的小宏

4个版本

0.2.1 2024年8月3日
0.2.0 2024年8月3日
0.1.1 2022年1月14日
0.1.0 2021年3月5日

#428Rust模式

Download history 4/week @ 2024-05-20 3/week @ 2024-06-03 181/week @ 2024-07-29 36/week @ 2024-08-05

217 每月下载量
2 crates 中使用

MIT 许可证

7KB

Enum Cycling

Enum Cycling只是一个宏,旨在使在Rust中处理枚举变得更容易。

将库包含到项目中

通过在Cargo.toml文件中添加此行将enum_cycling导入到您的项目中。

[dependencies]
enum_cycling = "0.2.1"
enum_cycling_derive = "0.2.1"

# You can also just use the "derive" feature
# enum_cycling = { version = "0.2.1", features = ["derive"] }

Enum Cycling宏

Enum Cycling实现了以下宏

描述
EnumCycle 添加两个方法 .up().down() 来从一个枚举变体跳转到其上方或下方的变体。

使用方法

EnumCycle

这个derive最初是在我开发游戏的过程中编写的,当时我在处理内部菜单。我厌倦了手动编写matches,因此花费了更多的时间学习和编写一个宏来帮我完成这项工作。

use enum_cycling::EnumCycle;

#[derive(EnumCycle)]
pub enum Menu {
    Main,
    Settings,
    Quit,

    #[skip]
    Secret,
}

// KeyCode is not defined within the crate. It is used to demonstrate a use case for EnumCycle
pub fn current_menu(menu: Menu, player_input: KeyCode) -> Menu {
    match player_input {
        KeyCode::W => menu.up(),
        KeyCode::S => menu.down(),
        _ => menu,
    }
}

但是,假设你不想担心枚举的排序方式,或者你可能想按字母顺序排序,但仍想使用EnumCycle。在这种情况下,你可能喜欢使用'cycle'属性!

use enum_cycling::EnumCycle;

#[derive(EnumCycle)]
#[cycle(Main, Settings, Quit)]
pub enum Menu {
    Main,
    Quit,
    Secret,
    Settings,
}

pub fn current_menu(menu: Menu, player_input: KeyCode) -> Menu {
    match player_input {
        KeyCode::W => menu.up(),
        KeyCode::S => menu.down(),
        _ => menu,
    }
}

这两个示例运行效果完全相同,生成的代码也相同!

依赖关系

~215KB