3个不稳定版本
新 0.2.1 | 2024年8月3日 |
---|---|
0.2.0 | 2022年1月14日 |
0.1.0 | 2021年3月5日 |
120 在 #枚举 中
79 每月下载量
在 enum_cycling 中使用
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