9 个重大版本
0.12.2 | 2023 年 9 月 14 日 |
---|---|
0.12.0 | 2023 年 7 月 22 日 |
0.11.0 | 2023 年 6 月 28 日 |
221 in 并发
在 3 个 Crates 中使用(通过 logid-core)
65KB
974 行
evident
此 crate 使您能够轻松地为 Rust 应用程序创建自定义的多线程 pub/sub 功能。它使用 事件 在发布者和订阅者之间发送信息,并使用 ID 订阅和识别这些 事件(因此为 evIDent)。
pub/sub 通信通过一个中央静态 发布者 进行,该发布者捕获一组事件,并将它们转发给订阅者。为了允许在不同场景中使用 evident,必须为每个场景创建一个发布者,并且不能由 evident 本身提供。请参阅下面的设置部分,了解如何创建您的自定义 pub/sub 实例。
设置
要自定义 evident 以适应您的用例,您需要实现以下特质
Id
... 定义用于识别事件的 ID 结构EventEntry
... 允许向事件添加附加信息IntermediaryEvent
... 允许自动捕获超出作用域的事件
用于进一步自定义 evident 的可选特质
创建您的 pub/sub 实例
create_static_publisher!()
... 创建自定义EvidentPublisher
的便利宏create_set_event_macro!()
... 创建set_event!()
宏的便利宏,该宏可用于设置自定义事件
示例
- /tests/min_concretise ... 包含一个最小化的发布/订阅设置
- /tests/min_filter ... 包含一个使用自定义过滤器的最小化发布/订阅设置
- /tests/min_msg ... 包含一个带有自定义消息的最小化发布/订阅设置
用法
在创建自己的发布者之后,您可以使用 set_event!()
宏来设置事件。
示例
let some_id = MinId { id: 3 };
let msg = "Some msg";
let sub = PUBLISHER.subscribe(some_id).unwrap();
set_event!(some_id, msg).finalize();
let event = sub
.get_receiver()
.recv_timeout(std::time::Duration::from_millis(100))
.unwrap();
注意: finalize()
被显式设置以确保事件在订阅尝试接收它之前发送。否则,它将在事件超出作用域(被丢弃)后发送。
许可证
MIT 许可证
依赖项
~580KB