behavior/fold/
user_event.rs1use crate::actor::Address;
4use crate::protocol::{
5 ChildEvent, ChildStopped, PeerEvent, PeerStopped, ShutdownEvent, ShutdownRequested, TimeEvent,
6 TimerElapsed, WorkerEvent, WorkerStopped,
7};
8
9#[derive(Debug, Clone, PartialEq, Eq)]
11pub struct User<A, M> {
12 pub from: A,
13 pub message: M,
14}
15
16pub trait UserEvent: Sized {
18 type Addr: Address;
19 type Message;
20
21 fn user(from: Self::Addr, message: Self::Message) -> Self;
22
23 fn into_user(self) -> Result<User<Self::Addr, Self::Message>, Self>;
26}
27
28impl<A: Address, M> UserEvent for User<A, M> {
29 type Addr = A;
30 type Message = M;
31
32 fn user(from: A, message: M) -> Self {
33 Self { from, message }
34 }
35 fn into_user(self) -> Result<Self, Self> {
36 Ok(self)
37 }
38}
39
40impl<A: Address, M> TimeEvent for User<A, M> {
41 fn time_reached(_: TimerElapsed) -> Option<Self> {
42 None
43 }
44}
45impl<A: Address, M> PeerEvent<A> for User<A, M> {
46 fn peer_stopped(_: PeerStopped<A>) -> Option<Self> {
47 None
48 }
49}
50impl<A: Address, M> ChildEvent<A> for User<A, M> {
51 fn child_stopped(_: ChildStopped<A>) -> Option<Self> {
52 None
53 }
54}
55impl<A: Address, M> WorkerEvent<A> for User<A, M> {
56 fn worker_stopped(_: WorkerStopped<A>) -> Option<Self> {
57 None
58 }
59}
60impl<A: Address, M> ShutdownEvent for User<A, M> {
61 fn shutdown_requested(_: ShutdownRequested) -> Option<Self> {
62 None
63 }
64}