#[macro_export]
macro_rules! on {
($router:expr, $frame_type:ty, $cmd_type:ty, []) => {};
($router:expr, $frame_type:ty, $cmd_type:ty, [
[ $action:expr, $handler:ident, [$($ms:expr),*] ] $(, $($rest:tt)*)?
]) => {
$router.on::<$frame_type, $cmd_type>(
$action,
Box::new(|ctx, frame, cmd| {
Box::pin(async move {
$handler(ctx, frame, cmd).await;
Ok(true)
})
}),
vec![
$(
Box::new(|ctx, frame, cmd| {
Box::pin(async move {
$ms(ctx, frame, cmd).await
})
})
),*
]
);
$crate::on!($router, $frame_type, $cmd_type, [ $($($rest)*)? ]);
};
($router:expr, $frame_type:ty, $cmd_type:ty, [
[ $action:expr, $handler:ident ] $(, $($rest:tt)*)?
]) => {
$crate::on!($router, $frame_type, $cmd_type, [ [ $action, $handler, [] ] $(, $($rest)*)? ]);
};
}