bacnet_objects/event_enrollment/
transition.rs1use crate::event::history::{EventHistory, EventTransitionState};
2use crate::event::{EventTransitionCommit, EventTransitionCommitError};
3use bacnet_types::bitstring::EventTransitionBits;
4use bacnet_types::enums::{EventState, Reliability};
5
6#[derive(Debug, Clone, PartialEq)]
12pub struct EventEnrollmentReliabilityCommit {
13 pub reliability: Reliability,
15 pub transition: Option<EventTransitionCommit>,
17}
18
19pub(super) fn commit_event_transition(
20 event_state: &mut EventState,
21 acked_transitions: &mut EventTransitionBits,
22 event_history: &mut EventHistory,
23 commit: EventTransitionCommit,
24) -> Result<(), EventTransitionCommitError> {
25 let mut staged_event_state = *event_state;
28 let mut staged_acknowledgments = *acked_transitions;
29 let mut staged_history = event_history.clone();
30 EventTransitionState::new(
31 &mut staged_event_state,
32 &mut staged_acknowledgments,
33 &mut staged_history,
34 )
35 .commit(commit)?;
36
37 *event_state = staged_event_state;
38 *acked_transitions = staged_acknowledgments;
39 *event_history = staged_history;
40 Ok(())
41}
42
43pub(super) fn commit_reliability(
44 reliability: &mut Reliability,
45 event_state: &mut EventState,
46 acked_transitions: &mut EventTransitionBits,
47 event_history: &mut EventHistory,
48 commit: EventEnrollmentReliabilityCommit,
49) -> Result<(), EventTransitionCommitError> {
50 let staged_reliability = commit.reliability;
53 let mut staged_event_state = *event_state;
54 let mut staged_acknowledgments = *acked_transitions;
55 let mut staged_history = event_history.clone();
56
57 if let Some(transition) = commit.transition {
58 EventTransitionState::new(
59 &mut staged_event_state,
60 &mut staged_acknowledgments,
61 &mut staged_history,
62 )
63 .commit(transition)?;
64 }
65
66 *reliability = staged_reliability;
67 *event_state = staged_event_state;
68 *acked_transitions = staged_acknowledgments;
69 *event_history = staged_history;
70 Ok(())
71}
72
73macro_rules! impl_event_enrollment_transition_commit {
74 () => {
75 fn commit_event_transition_internal(
76 &mut self,
77 commit: EventTransitionCommit,
78 ) -> Result<(), EventTransitionCommitError> {
79 transition::commit_event_transition(
80 &mut self.event_state,
81 &mut self.acked_transitions,
82 &mut self.event_history,
83 commit,
84 )
85 }
86
87 fn commit_event_enrollment_reliability_internal(
88 &mut self,
89 commit: $crate::event_enrollment::EventEnrollmentReliabilityCommit,
90 ) -> Result<(), EventTransitionCommitError> {
91 transition::commit_reliability(
92 &mut self.reliability,
93 &mut self.event_state,
94 &mut self.acked_transitions,
95 &mut self.event_history,
96 commit,
97 )
98 }
99 };
100}
101
102pub(super) use impl_event_enrollment_transition_commit;