15 个不稳定版本 (6 个破坏性更新)

0.6.1 2023年8月24日
0.5.0 2023年4月23日
0.4.1 2023年3月8日
0.3.3 2021年11月1日
0.1.2 2020年12月13日

#10 in #event-system

每月下载量 38 次

MIT/Apache

17KB
353 代码行(不含注释)

wd_event: Rust 的异步事件库

wd_event GitHub Actions wd_event on crates.io wd_event on docs.rs License

这是一个 Rust 异步事件库。与之前版本相比,这是一个全新的版本。不兼容之前版本

  • 你可以自定义任何类型的消息事件
  • 事件处理器,可以是函数或特质
  • 根据注册顺序,事件按顺序执行并通过在线文本传播
  • 事件实体是抽象的,你可以按需组装它
  • 这是一个早期版本,API 在未来可能会更改

入门指南

wd_event 可在 crates.io 上找到。建议在那里查找最新发布的版本以及最新文档构建的链接。

在最后更新此 README 时,最新发布的版本可以使用如下方式使用

将以下依赖项添加到您的 Cargo 清单中...

[dependencies]
wd_event = "0.4"

示例

struct Message<V>{
    id : u64,
    value: V,
}
impl<V> Message<V> {
    fn new(id:u64,value:V)->Message<V>{
        Self{id,value}
    }
}
fn generate_event_entity()->Event<EventSchedule>{
    EventSchedule::default()
        .register(|ctx:Context, mut msg:Message<String>|{
            println!("this is first Message<String> handler ID[{}]--> {}",msg.id,msg.value);
            msg.value.push_str("->one");
            ctx.next(msg)  // no need async
        })
        .register(|ctx:Context, mut msg:Message<String>|async{
            println!("this is second Message<String> handler ID[{}]--> {}",msg.id,msg.value);
            msg.value.push_str("->two");
            ctx.next(msg).await //all is async
        })
        .register(|ctx:Context, mut msg:Message<i64>|{
            println!("this is third Message<i64> handle  ID[{}]--> {}",msg.id,msg.value);
            msg.value = 3;
            async move{
                ctx.next(msg).await //part is async
            }
        })
        .build()
}

#[tokio::test]
async fn test_message(){
    let event = generate_event_entity();
    let res = event.launch(Context::default(),Message::new(1,"hello world".to_string())).await.expect("first test handle failed");
    assert_eq!(res.value.as_str(),"hello world->one->two","Message<String> result assert failed");
    let res = event.launch(Context::default(),Message::new(1,1i64)).await.expect("second test failed");
    assert_eq!(res.value,3i64,"Message<i64> result assert failed")
}

注意:

  • 事件处理器按注册顺序执行,ctx.next 代表将执行事件的下一个处理器
  • Context 可以在上下文中传递消息
  • 上下文中的设置优先于全局设置

许可证

根据您选择的以下一项许可

任选其一。

贡献

除非您明确声明,否则任何有意提交以包含在本作品中的贡献,根据 Apache-2.0 许可证定义,将按上述方式双许可,而无需任何附加条款或条件。

依赖项

~2.5–4MB
~69K SLoC