use std::ops::{Deref, DerefMut};
use anyhow::Error;
use crate::{Id, World};
pub trait Actor: 'static {
fn process(&mut self, ctx: &mut Context) -> Result<(), Error>;
fn stop(&mut self, _ctx: &mut Context) {}
}
pub struct Context<'a> {
world: &'a mut World,
id: Id,
stop: &'a mut bool,
}
impl<'a> Context<'a> {
pub(crate) fn actor(world: &'a mut World, id: Id, stop: &'a mut bool) -> Self {
Self { world, id, stop }
}
pub fn id(&self) -> Id {
self.id
}
pub fn stop(&mut self) {
*self.stop = true;
}
}
impl<'a> Deref for Context<'a> {
type Target = World;
fn deref(&self) -> &Self::Target {
self.world
}
}
impl<'a> DerefMut for Context<'a> {
fn deref_mut(&mut self) -> &mut Self::Target {
self.world
}
}