2 个不稳定版本
0.2.0 | 2020年8月10日 |
---|---|
0.1.0 | 2020年7月31日 |
#893 in 并发
16KB
231 行
simple_event_map
这允许您注册将被广播到接收器的类型
示例
#[derive(Clone, Debug, PartialEq)]
struct Message { data: String }
let mut map = EventMap::new();
// nothing is registered by default
assert_eq!(map.is_empty::<i32>(), true);
assert_eq!(map.is_empty::<String>(), true);
assert_eq!(map.is_empty::<Message>(), true);
// register two subscriptions for the message
// you can get a blocking iterator
let mut m1 = map.register_iter::<Message>();
// or you can get an async stream
let mut m2 = map.register_stream::<Message>();
let msg = Message{ data: String::from("hello world") };
// send the message, will return a bool if any messages were sent
assert_eq!(map.send(msg.clone()), true);
// we should have 2 still active
assert_eq!(map.active::<Message>(), 2);
assert_eq!(m1.next().unwrap(), msg);
// m2 is a stream, so we have to await it (and use StreamExt::next)
assert_eq!(m2.next().await.unwrap(), msg);
// drop a subscription (will be cleaned up in the eventmap on next send)
drop(m1);
let msg = Message{ data: String::from("testing") };
assert_eq!(map.send(msg.clone()), true);
// we only have 1 active now
assert_eq!(map.active::<Message>(), 1);
许可证
simple_event_map
主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
请参阅 LICENSE-APACHE 和 LICENSE-MIT 了解详细信息。
依赖项
~1MB
~16K SLoC