mediator-rs

An implementation of the Mediator pattern in Rust inspired in C# 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> for MathRequest {}

[derive(Clone, Debug)]

struct MathEvent(Op, Option); impl Event for MathEvent {}

struct MathRequestHandler(DefaultMediator); impl RequestHandler> for MathRequestHandler { fn handle(&mut self, req: MathRequest) -> Option { 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() .addhandlerdeferred(|m| MathRequestHandler(m)) .subscribe_fn(|event: MathEvent| { println!("{:?}", event); }) .build(); } ```

License: MIT