1use crate::actor::actor::Actor;
2use crate::actor::context::ActorContext;
3use crate::message::actor_message::BaseActorMessage;
4use crate::message::actor_stop_message::ActorStopMessage;
5use crate::message::sleep_message::SleepMessage;
6use crate::message::system_stop_message::SystemStopMessage;
7use crate::prelude::{ActorResult, BulkActorMessage, SerializedMessage};
8use std::error::Error;
9
10pub trait Handler<M: ?Sized>
33where
34 Self: Actor + Sized,
35 M: BaseActorMessage,
36{
37 fn handle(
38 &mut self,
39 msg: M,
40 context: &ActorContext<Self>,
41 ) -> Result<ActorResult, Box<dyn Error>>;
42}
43
44impl<A> Handler<ActorStopMessage> for A
45where
46 A: Actor + Sized,
47{
48 fn handle(
49 &mut self,
50 _msg: ActorStopMessage,
51 _context: &ActorContext<A>,
52 ) -> Result<ActorResult, Box<dyn Error>> {
53 return Ok(ActorResult::Stop);
54 }
55}
56
57impl<A> Handler<SystemStopMessage> for A
58where
59 A: Actor + Sized,
60{
61 fn handle(
62 &mut self,
63 _msg: SystemStopMessage,
64 context: &ActorContext<A>,
65 ) -> Result<ActorResult, Box<dyn Error>> {
66 return self.on_system_stop(context);
67 }
68}
69
70impl<M, A> Handler<BulkActorMessage<M>> for A
71where
72 Self: Actor + Sized,
73 A: Handler<M>,
74 M: BaseActorMessage,
75{
76 fn handle(
77 &mut self,
78 msg: BulkActorMessage<M>,
79 context: &ActorContext<Self>,
80 ) -> Result<ActorResult, Box<dyn Error>> {
81 for i in msg.data.into_iter() {
82 self.handle(i, context)?;
83 }
84 return Ok(ActorResult::Ok);
85 }
86}
87
88impl<A> Handler<SerializedMessage> for A
89where
90 A: Actor + Sized + Actor,
91{
92 fn handle(
93 &mut self,
94 msg: SerializedMessage,
95 context: &ActorContext<A>,
96 ) -> Result<ActorResult, Box<dyn Error>> {
97 return self.handle_serialized_message(msg, context);
98 }
99}
100
101impl<A> Handler<SleepMessage> for A
102where
103 A: Actor + Sized + Actor,
104{
105 fn handle(
106 &mut self,
107 msg: SleepMessage,
108 _context: &ActorContext<A>,
109 ) -> Result<ActorResult, Box<dyn Error>> {
110 return Ok(ActorResult::Sleep(msg.duration));
111 }
112}