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 次
17KB
353 代码行(不含注释)
wd_event: Rust 的异步事件库
这是一个 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 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则任何有意提交以包含在本作品中的贡献,根据 Apache-2.0 许可证定义,将按上述方式双许可,而无需任何附加条款或条件。
依赖项
~2.5–4MB
~69K SLoC