[][src]Trait xtra::Handler

pub trait Handler<M: Message>: Actor {
#[must_use]    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. If the message should be handled synchronously, then the SyncHandler trait should rather be implemented.

Without the nightly feature enabled, 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
    }
}

#[smol_potat::main]
async fn main() {
    let addr = MyActor.spawn();
    assert_eq!(addr.send(Msg).await, Ok(20));
}

Required methods

#[must_use]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, 

Handle a given message, returning its result.

Without the nightly feature enabled, this is an async_trait. See the trait documentation to see an example of how this method can be declared.

Loading content...

Implementors

impl<M: Message, T: SyncHandler<M>> Handler<M> for T[src]

Loading content...