mediator-sys

Latest Release Documentation

Strongly typed, extensible event mediator. For more info and explanation, please see the docs.

Warning

This crate has been renamed and is soon phasing out. Please use mediatrix instead.

Usage

Sync

```rust use mediator_sys::synchronous::basic::*;

struct UserMessageRequest { msg: String, priority: u8, }

[derive(Debug, Clone)]

enum NotifyEvent { Ignore, SendEmail(String), SendTextMessage(String), }

impl RequestHandler for BasicMediator { fn handle(&self, req: UserMessageRequest) { match req.priority { 0 => self.publish(NotifyEvent::Ignore), 1..=5 => self.publish(NotifyEvent::SendEmail(req.msg)), _ => self.publish(NotifyEvent::SendTextMessage(req.msg)), }; } }

let mediator = BasicMediator::::builder() .addlistener(move |ev| { if let NotifyEvent::Ignore = ev { println!("Ignored some Message") } }) .addlistener(move |ev| { if let NotifyEvent::SendEmail(msg) = ev { println!("Send Email with Message: {}", msg) } }) .add_listener(move |ev| { if let NotifyEvent::SendTextMessage(msg) = ev { println!("Send SMS with Message: {}", msg) } }) .build();

mediator.send(UserMessageRequest { msg: String::from("Hello World"), priority: 0, });

mediator.send(UserMessageRequest { msg: String::from("Is Rust Memory Safe?"), priority: 2, });

mediator.send(UserMessageRequest { msg: String::from("New Rust Version"), priority: 8, });

// Prints: Ignored some Message mediator.next().ok(); // Prints: Send Email with Message: Is Rust Memory Safe? mediator.next().ok(); // Prints: Send SMS with Message: New Rust Version mediator.next().ok(); ```

Async

Click to open the asynchronous version

```rust use mediatorsys::asynchronous::basic::*; use asynctrait::async_trait;

struct UserMessageRequest { msg: String, priority: u8, }

[derive(Debug, Clone)]

enum NotifyEvent { Ignore, SendEmail(String), SendTextMessage(String), }

[async_trait]

impl AsyncRequestHandler for BasicAsyncMediator { async fn handle(&self, req: UserMessageRequest) { match req.priority { 0 => self.publish(NotifyEvent::Ignore).await, 1..=5 => self.publish(NotifyEvent::SendEmail(req.msg)).await, _ => self.publish(NotifyEvent::SendTextMessage(req.msg)).await, }; } }

let asyncmediator = BasicAsyncMediator::::builder() .addlistener(move |ev| { if let NotifyEvent::Ignore = ev { println!("Ignored some Message") } }) .addlistener(move |ev| { if let NotifyEvent::SendEmail(msg) = ev { println!("Send Email with Message: {}", msg) } }) .addlistener(move |ev| { if let NotifyEvent::SendTextMessage(msg) = ev { println!("Send SMS with Message: {}", msg) } }) .build();

asyncstd::task::blockon(async { async_mediator.send(UserMessageRequest { msg: String::from("Hello World"), priority: 0, }).await;

async_mediator.send(UserMessageRequest {
    msg: String::from("Is Rust Memory Safe?"),
    priority: 2,
}).await;

async_mediator.send(UserMessageRequest {
    msg: String::from("New Rust Version"),
    priority: 8,
}).await;

async_mediator.next().await.ok();
async_mediator.next().await.ok();
async_mediator.next().await.ok();

}); ```

Features

Todo

Contributions

Feel free to open an issue/PR explaining possible improvements or changes.

Help

Also, please do not hesitate and open an issue when needed. I am happy to help!