use crate::{ActorContext, ActorId};
use std::error::Error;
pub trait Actor {
type Message;
type State;
type Error: Error;
fn init(&self, context: &ActorContext<Self::Message>) -> Result<Self::State, Self::Error>;
fn receive(
&self,
context: &ActorContext<Self::Message>,
incoming: Incoming<Self::Message>,
state: Self::State,
) -> Result<Control<Self::State>, Self::Error>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Nothing {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Incoming<M> {
Message(M),
Terminated(ActorId),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[must_use]
pub enum Control<S> {
Continue(S),
Stop,
}