#![cfg_attr(feature = "doc-images",
cfg_attr(
all(),
doc = ::embed_doc_image::embed_image!(
"publisher-subscriber-diagram",
"src/patterns/publisher_subscriber/publisher_subscriber.svg"
)))]
pub mod heap;
pub mod vec_publisher;
use crate::prelude::*;
use std::rc::Rc;
pub use vec_publisher::VecPublisher;
pub trait Publisher<M>
{
fn publish(
&self,
message: &M,
);
}
pub trait AttachablePublisher<M, S>: Publisher<M>
where
S: Subscriber<M>,
{
fn attach(
&mut self,
attach_subscriber: S,
);
}
pub trait DetachablePublisher<M, S, E>
where
S: Subscriber<M>,
{
fn detach(
&mut self,
detach_subscriber: &S,
) -> Result<(), E>;
}
pub trait MutablePublisher<M, S, E>:
DetachablePublisher<M, S, E> + AttachablePublisher<M, S>
where
S: Subscriber<M>,
Self: Publisher<M>,
{
}
pub trait Subscriber<M>
{
fn receive(
&self,
message: &M,
);
}
pub mod prelude
{
pub use super::{
AttachablePublisher,
DetachablePublisher,
Publisher,
Subscriber,
};
}
#[cfg(test)]
mod tests;