#枚举 # #过程宏

enum_cycling_derive

用于处理枚举的小宏

3个不稳定版本

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

120#枚举

Download history 79/week @ 2024-07-28

79 每月下载量
enum_cycling 中使用

MIT 协议

10KB
154

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,
    }
}

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

依赖关系

~1.5MB
~35K SLoC