pub struct DefaultMediator { /* private fields */ }Expand description
A default implementation for the Mediator trait.
§Examples
§Request handler
use std::sync::atomic::AtomicU64;
use mediator::{DefaultMediator, Mediator, Request, RequestHandler};
struct GetNextId;
impl Request<u64> for GetNextId { }
struct GetNextIdHandler;
impl RequestHandler<GetNextId, u64> for GetNextIdHandler {
fn handle(&mut self, _: GetNextId) -> u64 {
static NEXT_ID : AtomicU64 = AtomicU64::new(1);
NEXT_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst)
}
}
let mut mediator = DefaultMediator::builder()
.add_handler(GetNextIdHandler)
.build();
assert_eq!(Ok(1), mediator.send(GetNextId));
assert_eq!(Ok(2), mediator.send(GetNextId));
assert_eq!(Ok(3), mediator.send(GetNextId));§Event handler
use mediator::{Event, DefaultMediator, Mediator};
#[derive(Clone)]
struct Product { name: String };
#[derive(Clone)]
struct ProductAddedEvent(Product);
impl Event for ProductAddedEvent { }
struct ProductService(Vec<Product>, DefaultMediator);
impl ProductService {
pub fn add<S: Into<String>>(&mut self, product: S) {
let product = Product { name: product.into() };
self.0.push(product.clone());
self.1.publish(ProductAddedEvent(product));
}
}
let mut mediator = DefaultMediator::builder()
.subscribe_fn(move |event: ProductAddedEvent| {
println!("Product added: {}", event.0.name);
})
.build();
let mut service = ProductService(vec![], mediator.clone());
service.add("Microwave"); // Product added: Microwave
service.add("Toaster"); // Product added: ToasterImplementations§
Source§impl DefaultMediator
impl DefaultMediator
Sourcepub fn builder() -> Builder
pub fn builder() -> Builder
Gets a DefaultMediator builder.
Trait Implementations§
Source§impl Clone for DefaultMediator
impl Clone for DefaultMediator
Source§fn clone(&self) -> DefaultMediator
fn clone(&self) -> DefaultMediator
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for DefaultMediator
impl RefUnwindSafe for DefaultMediator
impl Send for DefaultMediator
impl Sync for DefaultMediator
impl Unpin for DefaultMediator
impl UnwindSafe for DefaultMediator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more