1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#![allow(clippy::needless_doctest_main)]
//! # mediator-rs
//! An implementation of the Mediator pattern in Rust
//! inspired in C# [MediatR](https://github.com/jbogard/MediatR/tree/master/src/MediatR).
//!
//! ## Mediator Pattern
//! https://en.wikipedia.org/wiki/Mediator_pattern
//!
//! ## Usage
//! ```toml
//! [dependencies]
//! mediator = "0.1"
//! ```
//!
//! ## Example
//! ```rust
//! use mediator::{DefaultMediator, Mediator, Request, Event, RequestHandler, EventHandler};
//!
//! #[derive(Clone, Debug)]
//! enum Op {
//! Add(f32, f32),
//! Sub(f32, f32),
//! Mul(f32, f32),
//! Div(f32, f32),
//! }
//!
//! struct MathRequest(Op);
//! impl Request<Option<f32>> for MathRequest {}
//!
//! #[derive(Clone, Debug)]
//! struct MathEvent(Op, Option<f32>);
//! impl Event for MathEvent {}
//!
//! struct MathRequestHandler(DefaultMediator);
//! impl RequestHandler<MathRequest, Option<f32>> for MathRequestHandler {
//! fn handle(&mut self, req: MathRequest) -> Option<f32> {
//! let result = match req.0 {
//! Op::Add(a, b) => Some(a + b),
//! Op::Sub(a, b) => Some(a - b),
//! Op::Mul(a, b) => Some(a * b),
//! Op::Div(a, b) => {
//! if b == 0.0 { None } else { Some(a / b) }
//! }
//! };
//!
//! self.0.publish(MathEvent(req.0, result));
//! result
//! }
//! }
//!
//! fn main() {
//! let mut mediator = DefaultMediator::builder()
//! .add_handler_deferred(|m| MathRequestHandler(m))
//! .subscribe_fn(|event: MathEvent| {
//! println!("{:?}", event);
//! })
//! .build();
//! }
//! ```
/// A convenient result type.
pub type Result<T> = std::result::Result<T, error::Error>;
/// Module for the mediator request-response.
mod request;
pub use request::*;
/// Module for the mediator events.
mod event;
pub use event::*;
/// Module for the mediator.
mod mediator;
pub use crate::mediator::*;
/// Module for the errors.
pub mod error;
/// Provides default implementations.
#[cfg(feature = "impls")]
mod impls;
#[cfg(feature = "impls")]
pub use impls::*;