Expand description
A local publish-subscribe pattern implementation.
§Example
use lps::*;
use std::sync::Arc;
#[derive(Debug, Clone, Copy)]
struct Msg(i32);
impl Message for Msg {}
struct Pub {
msg_broker: Arc<dyn MessageBroker>,
}
impl Pub {
fn new(msg_broker: Arc<dyn MessageBroker>) -> Self {
Self { msg_broker }
}
}
impl Publisher for Pub {
fn message_broker(&self) -> Arc<dyn MessageBroker> {
Arc::clone(&self.msg_broker)
}
fn set_message_broker(&mut self, msg_broker: Arc<dyn MessageBroker>) {
self.msg_broker = msg_broker;
}
}
struct Sub {
sub: Subscription<Msg>,
}
impl Sub {
fn new() -> Self {
Self {
sub: Subscription::unregistered(),
}
}
}
impl Subscriber for Sub {
fn subscribe(&mut self, msg_broker: Arc<dyn MessageBroker>) {
let _ = self.sub.register(msg_broker);
}
fn unsubscribe(&mut self) {
let _ = self.sub.unregister();
}
fn activate(&self) {
let _ = self.sub.activate();
}
fn deactivate(&self) {
let _ = self.sub.deactivate();
}
fn process_messages(&mut self) {
self.sub
.message_iter()
.handle(|msg: Arc<Msg>| {
println!("The subscriber received a message: {:?}", msg);
})
.run();
}
}
let msg_broker: Arc<dyn MessageBroker> = Arc::new(DefaultMessageBroker::new());
let mut s = Sub::new();
s.subscribe(Arc::clone(&msg_broker));
let p = Pub::new(Arc::clone(&msg_broker));
p.publish(Arc::new(Msg(1)));
p.publish(Arc::new(Msg(2)));
p.publish(Arc::new(Msg(3)));
s.process_messages();
Macros§
- match_
message - Downcasts
Arc<dyn Message>
to the one of the given types and runs the code which corresponds to it.
Structs§
- Default
Message Broker - Handle
Message - A message iterator which handles messages with
f
. - Message
Handler - A function for handling messages of specific type.
- Message
Iter - An iterator which yields messages from one
ErasedSubscription
. - Message
Topic - Message
Type Id - The type id of the message.
- Multi
Subscription - Subscription
- A type which is used for receiving messages of a specific type from the message broker.
Enums§
Traits§
- Erased
Message Handler - A function with erased type for handling messages.
- Erased
Subscription - A
Subscription
with and erased message type. - Into
Message Handler - A type which can be converted into a
ErasedMessageHandler
. - Message
- A type which is used for communicating between publishers and subscribers.
- Message
Broker - A type which delivers messages from publishers to subscribers.
- Message
Iterator - An iterator which yields messages.
- Publisher
- A sender of messages.
- Subscriber
- A receiver of messages.