use async_trait::async_trait;
use crate::{Context, ReplyHandle, Service};
#[async_trait]
pub trait Handler<M>
where
Self: Service + Sized,
M: Message,
{
async fn handle(&mut self, message: M, ctx: &mut Context<Self, Self::Stream>) -> M::Result;
async fn handle_preferred(
&mut self,
message: M,
ctx: &mut Context<Self, Self::Stream>,
handle: ReplyHandle<M>,
) where
M: Send + 'static,
M::Result: Send,
{
let res = self.handle(message, ctx).await;
let _ = handle.send(res);
}
}
pub trait Message {
type Result;
}