#![cfg_attr(feature = "doc-images",
cfg_attr(
all(),
doc = ::embed_doc_image::embed_image!(
"observer-diagram",
"src/patterns/observer/observer.svg"
)))]
pub mod hash_subject;
pub mod vec_subject;
use crate::prelude::*;
pub use hash_subject::HashSubject;
pub use vec_subject::VecSubject;
#[cfg(test)]
mod tests;
pub trait Subject
{
fn notify(&self);
}
pub trait Observer
{
fn notify(&self);
}
pub trait AttachableSubject<O>: Subject
where
O: Observer,
{
fn attach(
&mut self,
attach_observer: O,
);
}
pub trait DetachableSubject<O, E>: Subject
where
O: Observer,
{
fn detach(
&mut self,
detach_observer: &O,
) -> Result<(), E>;
}
pub mod prelude
{
pub use super::{
AttachableSubject,
DetachableSubject,
Observer,
Subject,
};
}