1 个稳定版本
2.0.0 | 2021 年 10 月 29 日 |
---|---|
0.1.0 |
|
#1298 在 Rust 模式 中
14KB
220 行
enum-pipeline
提供了一种使用枚举来描述和执行有序数据管道的方法。 🦀🐾
我需要一个简洁的方式来描述我为正在开发的游戏设计的 2D 像素图操作。我希望调用者能够轻松地确定所有可能的操作(因此是 enum
),每个操作的数据(因此是变体),以及它们的特定于操作的逻辑。这是我想到的!
快速入门
一些快速示例以供您开始。更多信息请参阅 docs.rs/enum_pipeline 和 docs.rs/enum_pipeline_derive。
派生
#[derive(Default)]
struct MacroMutRefData {
a_count: i32,
b_count: i32,
}
#[derive(ExecuteWithMut)]
#[execute_with(MacroMutRefData)]
enum MacroMutRefPipeline {
#[handler(handle_a)]
A(i32),
#[handler(handle_b)]
B,
}
impl MacroMutRefPipeline {
fn handle_a(i: i32, arg: &mut MacroMutRefData) {
arg.a_count += 1;
}
fn handle_b(arg: &mut MacroMutRefData) {
arg.b_count += 1;
}
}
然后创建并执行一些管道
let mut arg = MacroMutRefData::default();
vec![MacroMutRefPipeline::A(23), MacroMutRefPipeline::B].execute_with_mut(&mut arg);
手册
#[derive(Default)]
struct MutRefData {
a_count: i32,
b_count: i32,
}
enum MutRefPipeline {
A(i32),
B,
}
impl ExecuteWithMut<MutRefData> for MutRefPipeline {
fn execute_with_mut(self, arg: &mut MutRefData) {
match self {
MutRefPipeline::A(i) => arg.a_count += 1,
MutRefPipeline::B => arg.b_count += 1,
}
}
}
然后创建并执行一些管道
let mut arg = MutRefData::default();
vec![MutRefPipeline::A(23), MutRefPipeline::B].execute_with_mut(&mut arg);
许可证
MIT
依赖项
~1.5MB
~35K SLoC