atomr_core/actor/
traits.rs1use async_trait::async_trait;
4
5use super::context::Context;
6use super::sender::Sender;
7use crate::supervision::SupervisorStrategy;
8
9pub struct MessageEnvelope<M> {
16 pub message: M,
17 pub sender: Sender,
18}
19
20impl<M> MessageEnvelope<M> {
21 pub fn new(message: M) -> Self {
22 Self { message, sender: Sender::None }
23 }
24
25 pub fn with_typed_sender(message: M, sender: Sender) -> Self {
27 Self { message, sender }
28 }
29}
30
31#[async_trait]
37pub trait Actor: Sized + Send + 'static {
38 type Msg: Send + 'static;
39
40 async fn handle(&mut self, ctx: &mut Context<Self>, msg: Self::Msg);
42
43 async fn pre_start(&mut self, _ctx: &mut Context<Self>) {}
45
46 async fn post_stop(&mut self, _ctx: &mut Context<Self>) {}
48
49 async fn pre_restart(&mut self, _ctx: &mut Context<Self>, _err: &str) {}
51
52 async fn post_restart(&mut self, _ctx: &mut Context<Self>, _err: &str) {}
54
55 fn supervisor_strategy(&self) -> SupervisorStrategy {
57 SupervisorStrategy::default()
58 }
59}