Crates.io | noon |
lib.rs | noon |
version | 0.1.1 |
source | src |
created_at | 2022-05-25 00:11:08.018865 |
updated_at | 2022-05-25 13:08:28.750364 |
description | Strongly-typed, compile-time mediator |
homepage | https://github.com/toshokan/noon |
repository | https://github.com/toshokan/noon |
max_upload_size | |
id | 593125 |
size | 18,998 |
Strongly-typed, compile-time mediator.
See the documentation on docs.rs
use noon::mediator::{Mediate, MediatorBuilder};
// Create message types
struct NewUserRequest { id: i32 };
struct NewUserResponse { total_users: u32 };
struct SendUserEmail { id: i32, msg: String };
struct NewUserLogin { id: i32 };
async fn foo() {
// Create a mediator
let mediator = MediatorBuilder::new()
.add_handler(|x: NewUserRequest| {
// get total users
NewUserResponse { total_users: 13 }
})
.add_async_handler(|x: SendUserEmail| async move {
// send email
true
})
.listen_for::<NewUserLogin>()
.add_notification_receiver(|x: &NewUserLogin| {
println!("User {} logged in!", x.id);
})
.build();
mediator.notify(&NewUserLogin { id: 5 });
let response = mediator.handle(NewUserRequest { id: 5 });
println!("There are now {} users in the system", response.total_users);
}
let mediator = MediatorBuilder::new()
.build();
noon is dual licensed under the terms of the MIT or Apache-2.0 licenses. You may choose whichever you prefer.