pubnub/dx/presence/event_engine/
invocation.rs1use crate::{
7 core::{event_engine::EffectInvocation, PubNubError},
8 lib::core::fmt::{Display, Formatter, Result},
9 presence::event_engine::{PresenceEffect, PresenceEvent, PresenceInput},
10};
11
12#[derive(Debug)]
13pub(crate) enum PresenceEffectInvocation {
14 Heartbeat {
16 input: PresenceInput,
21 },
22
23 DelayedHeartbeat {
25 input: PresenceInput,
30
31 attempts: u8,
35
36 reason: PubNubError,
38 },
39
40 CancelDelayedHeartbeat,
42
43 Leave {
45 input: PresenceInput,
50 },
51
52 Wait {
54 input: PresenceInput,
59 },
60
61 CancelWait,
63
64 TerminateEventEngine,
66}
67
68impl EffectInvocation for PresenceEffectInvocation {
69 type Effect = PresenceEffect;
70 type Event = PresenceEvent;
71
72 fn id(&self) -> &str {
73 match self {
74 Self::Heartbeat { .. } => "HEARTBEAT",
75 Self::DelayedHeartbeat { .. } => "DELAYED_HEARTBEAT",
76 Self::CancelDelayedHeartbeat => "CANCEL_DELAYED_HEARTBEAT",
77 Self::Leave { .. } => "LEAVE",
78 Self::Wait { .. } => "WAIT",
79 Self::CancelWait => "CANCEL_WAIT",
80 Self::TerminateEventEngine => "TERMINATE_EVENT_ENGINE",
81 }
82 }
83
84 fn is_managed(&self) -> bool {
85 matches!(self, Self::Wait { .. } | Self::DelayedHeartbeat { .. })
86 }
87
88 fn is_cancelling(&self) -> bool {
89 matches!(self, Self::CancelDelayedHeartbeat | Self::CancelWait)
90 }
91
92 fn cancelling_effect(&self, effect: &Self::Effect) -> bool {
93 (matches!(effect, PresenceEffect::DelayedHeartbeat { .. })
94 && matches!(self, Self::CancelDelayedHeartbeat { .. }))
95 || (matches!(effect, PresenceEffect::Wait { .. })
96 && matches!(self, Self::CancelWait { .. }))
97 }
98
99 fn is_terminating(&self) -> bool {
100 matches!(self, Self::TerminateEventEngine)
101 }
102}
103
104impl Display for PresenceEffectInvocation {
105 fn fmt(&self, f: &mut Formatter<'_>) -> Result {
106 match self {
107 Self::Heartbeat { .. } => write!(f, "HEARTBEAT"),
108 Self::DelayedHeartbeat { .. } => write!(f, "DELAYED_HEARTBEAT"),
109 Self::CancelDelayedHeartbeat => write!(f, "CANCEL_DELAYED_HEARTBEAT"),
110 Self::Leave { .. } => write!(f, "LEAVE"),
111 Self::Wait { .. } => write!(f, "WAIT"),
112 Self::CancelWait => write!(f, "CANCEL_WAIT"),
113 Self::TerminateEventEngine => write!(f, "TERMINATE_EVENT_ENGINE"),
114 }
115 }
116}