[][src]Trait xtra::Handler

pub trait Handler<M: Message>: Actor {
#[must_use]    pub 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
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
; }

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

#[must_use]pub 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
    'life0: 'async_trait,
    'life1: 'async_trait,
    Self: 'async_trait, 
[src]

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.

Loading content...

Implementors

Loading content...