#pipeline #enums #execute #ordered #describe #data-pipeline #variant

enum_pipeline

提供了一种使用枚举来描述和执行有序数据管道的方法

1 个稳定版本

2.0.0 2021 年 10 月 29 日
0.1.0 2021 年 10 月 21 日

#1298Rust 模式

MIT 许可证

14KB
220

enum-pipeline

提供了一种使用枚举来描述和执行有序数据管道的方法。 🦀🐾

CI Crates.io docs.rs dependency status

我需要一个简洁的方式来描述我为正在开发的游戏设计的 2D 像素图操作。我希望调用者能够轻松地确定所有可能的操作(因此是 enum),每个操作的数据(因此是变体),以及它们的特定于操作的逻辑。这是我想到的!

快速入门

一些快速示例以供您开始。更多信息请参阅 docs.rs/enum_pipelinedocs.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