6个版本
0.1.5 | 2023年7月10日 |
---|---|
0.1.4 | 2023年6月21日 |
#758 in 异步
每月 46 次下载
30KB
344 行
Basu
一个灵活的事件总线crate,通过事件驱动模式解耦应用程序的不同组件。
Basu提供异步和同步事件处理的支持。
示例
功能
-
同步
- 要使用同步Basu,请确保在
Cargo.toml
中禁用basu crate的default-features
[dependencies] basu = { version = "0.1", default-features = false, features = ["sync"] }
- 要使用同步Basu,请确保在
-
异步
- 要在Rust项目中使用异步Basu,请在
Cargo.toml
中添加以下行[dependencies] basu = "0.1"
- 要在Rust项目中使用异步Basu,请在
用法
要运行示例,请在Cargo.toml
中添加以下行
[dependencies]
tokio = { version = "1", default-features = false, features = [ "macros", "rt-multi-thread"] }
basu = "0.1"
然后,在你的main.rs
use basu::{async_trait, error::BasuError, event::Event, EventBus, Handle};
#[derive(Debug)]
struct Data {
message: String,
}
struct MyEventHandler;
// Implement the Handle trait for your event handler structs
#[async_trait]
impl Handle<Data> for MyEventHandler {
async fn handle(&self, event: &Event<Data>) -> Result<(), BasuError> {
// Handle the event logic here
Ok(())
}
}
#[tokio::main]
async fn main() -> Result<(), BasuError> {
let event_bus = EventBus::new();
let eveny_type = "my_event";
// Subscribe to events by providing an event name and the corresponding event handler
let handler = Box::new(MyEventHandler);
let handler_id = event_bus.subscribe(eveny_type, handler).await;
// Publish events
let event = Event::new(Data {
message: "hello".to_owned(),
});
event_bus.publish(eveny_type, &event).await?;
// Unsubscribe from events
event_bus.unsubscribe(eveny_type, &handler_id).await
}
许可证
本项目遵循MIT许可证。
依赖
~1–3MB
~61K SLoC