use async_trait::async_trait;
use super::context::Context;
use super::sender::Sender;
use crate::supervision::SupervisorStrategy;
pub struct MessageEnvelope<M> {
pub message: M,
pub sender: Sender,
}
impl<M> MessageEnvelope<M> {
pub fn new(message: M) -> Self {
Self { message, sender: Sender::None }
}
pub fn with_typed_sender(message: M, sender: Sender) -> Self {
Self { message, sender }
}
}
#[async_trait]
pub trait Actor: Sized + Send + 'static {
type Msg: Send + 'static;
async fn handle(&mut self, ctx: &mut Context<Self>, msg: Self::Msg);
async fn pre_start(&mut self, _ctx: &mut Context<Self>) {}
async fn post_stop(&mut self, _ctx: &mut Context<Self>) {}
async fn pre_restart(&mut self, _ctx: &mut Context<Self>, _err: &str) {}
async fn post_restart(&mut self, _ctx: &mut Context<Self>, _err: &str) {}
fn supervisor_strategy(&self) -> SupervisorStrategy {
SupervisorStrategy::default()
}
}