use super::event_loop::event_loop;
use crate::all::*;
use async_trait::async_trait;
#[async_trait]
pub trait HandlerExt: Handler {
async fn run(self, state: Self::State) -> Self::Exit {
event_loop(self, state).await
}
fn spawn_with(
self,
link: Link,
cfg: HandlerConfig<Self>,
) -> (
Child<Self::Exit, HandlerInbox<Self>>,
Address<HandlerInbox<Self>>,
) {
spawn_with(link, cfg, |inbox| async move {
let state = <Self::State as HandlerState<Self>>::from_inbox(inbox);
self.run(state).await
})
}
fn spawn(
self,
) -> (
Child<Self::Exit, HandlerInbox<Self>>,
Address<HandlerInbox<Self>>,
) {
self.spawn_with(Self::default_link(), Self::default_config())
}
}
impl<T: Handler> HandlerExt for T {}