use crate::actor::event_bus::subscribe::Event;
use crate::actor::{Addr, Cx};
use crate::trace::Bus;
pub trait Handler<M: 'static>: 'static {
const DECLARED: Option<crate::actor::shape::Declared> = None;
const ANSWERS: bool = false;
fn handle(&mut self, msg: M, cx: Cx<Self, M>)
where
Self: Sized;
}
pub trait ManagedActor: Sized + 'static {
type Bus: EventSubscription<Self>;
type Signals;
type Flow;
const SHAPE: crate::actor::shape::Shape = crate::actor::shape::Shape::UNKNOWN;
}
pub trait EventSubscription<A> {
fn subscribe_into(addr: &Addr<A>);
}
impl<A, M> EventSubscription<A> for M
where
M: Event,
A: Handler<M> + 'static,
{
fn subscribe_into(addr: &Addr<A>) {
addr.subscribe_on::<M>(Bus::Global);
}
}
impl<A> EventSubscription<A> for () {
fn subscribe_into(_: &Addr<A>) {}
}
pub trait AllowedSignal<M: 'static> {}
impl<M: 'static> AllowedSignal<M> for M {}