pub trait Handler<M: Message>: Actor {
fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: M,
ctx: &'life1 mut Context<Self>
) -> Pin<Box<dyn Future<Output = M::Result> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
}
Expand description
A trait indicating that an Actor
can handle a given Message
asynchronously, and the logic to handle the message.
This is an async_trait
, so implementations should
be annotated #[async_trait]
.
Example
struct Msg;
impl Message for Msg {
type Result = u32;
}
#[async_trait::async_trait]
impl Handler<Msg> for MyActor {
async fn handle(&mut self, message: Msg, ctx: &mut Context<Self>) -> u32 {
20
}
}
fn main() {
smol::block_on(async {
let addr = MyActor.create(None).spawn(&mut Smol::Global);
assert_eq!(addr.send(Msg).await, Ok(20));
})
}
Required Methods§
sourcefn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: M,
ctx: &'life1 mut Context<Self>
) -> Pin<Box<dyn Future<Output = M::Result> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle<'life0, 'life1, 'async_trait>(
&'life0 mut self,
message: M,
ctx: &'life1 mut Context<Self>
) -> Pin<Box<dyn Future<Output = M::Result> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Handle a given message, returning its result.
This is an async_trait
.
See the trait documentation to see an example of how this method can be declared.