guinea_core/actor/
traits.rs1use crate::actor::event_bus::subscribe::Event;
2use crate::actor::{Addr, Cx};
3use crate::trace::Bus;
4
5pub trait Handler<M: 'static>: 'static {
6 const DECLARED: Option<crate::actor::shape::Declared> = None;
8
9 const ANSWERS: bool = false;
13
14 fn handle(&mut self, msg: M, cx: Cx<Self, M>)
15 where
16 Self: Sized;
17}
18
19pub trait ManagedActor: Sized + 'static {
20 type Bus: EventSubscription<Self>;
21 type Signals;
22 type Flow;
24 const SHAPE: crate::actor::shape::Shape = crate::actor::shape::Shape::UNKNOWN;
26}
27
28pub trait EventSubscription<A> {
31 fn subscribe_into(addr: &Addr<A>);
32}
33
34impl<A, M> EventSubscription<A> for M
35where
36 M: Event,
37 A: Handler<M> + 'static,
38{
39 fn subscribe_into(addr: &Addr<A>) {
40 addr.subscribe_on::<M>(Bus::Global);
41 }
42}
43
44impl<A> EventSubscription<A> for () {
45 fn subscribe_into(_: &Addr<A>) {}
46}
47
48pub trait AllowedSignal<M: 'static> {}
49impl<M: 'static> AllowedSignal<M> for M {}