Struct mediator::DefaultMediator
source · [−]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: Toaster
Implementations
sourceimpl DefaultMediator
impl DefaultMediator
pub fn builder() -> DefaultMediatorBuilder
Trait Implementations
sourceimpl Clone for DefaultMediator
impl Clone for DefaultMediator
sourcefn clone(&self) -> DefaultMediator
fn clone(&self) -> DefaultMediator
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Mediator for DefaultMediator
impl Mediator for DefaultMediator
impl Send for DefaultMediator
impl Sync for DefaultMediator
Auto Trait Implementations
impl RefUnwindSafe for DefaultMediator
impl Unpin for DefaultMediator
impl UnwindSafe for DefaultMediator
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
🔬 This is a nightly-only experimental API. (
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more