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日 |
#428 在 Rust模式
217 每月下载量
在 2 crates 中使用
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