In-process mediator for MoonBit with codegen-based handler dispatch
Dependencies
moon add moonrockz/mediator// messages.mbt
pub struct GetUser { id : Int }
// handlers.mbt — convention: handle_<MessageName>(MessageName) -> Result[T]
pub fn handle_GetUser(req : GetUser) -> @core.Result[User] {
@core.ok(User::{ id: req.id, name: "Alice" })
}import { "moonrockz/mediator/core" }mediator gen -d src -o src/mediator_gen.mbtlet mediator = @core.Mediator::new(dispatch)
let res = mediator.send(Request::GetUser(GetUser::{ id: 1 }))
match res {
UserResult(wrap) => match wrap.value {
@core.Result::Ok(u) => println(u.name)
_ => ()
}
}let mw = @core.middleware(
Some(@core.before(fn(_req, ctx) { println("before"); ctx })),
Some(@core.after(fn(_req, _res, _ctx) { println("after") })),
Some(@core.finally(fn(_req, _ctx, _err) { println("finally") })),
)
let mediator = @core.Mediator::new(dispatch).with_middleware([mw])cd examples/minimal && moon check && moon run src/main.mbt
cd examples/with_middleware && moon check && moon run src/main.mbtmoon install moonrockz/mediator/src/cmd/mainInstall
Download zipIn-process mediator for MoonBit with codegen-based handler dispatch
Dependencies