use crate::event::history::{EventHistory, EventTransitionState};
use crate::event::{EventTransitionCommit, EventTransitionCommitError};
use bacnet_types::bitstring::EventTransitionBits;
use bacnet_types::enums::{EventState, Reliability};
#[derive(Debug, Clone, PartialEq)]
pub struct EventEnrollmentReliabilityCommit {
pub reliability: Reliability,
pub transition: Option<EventTransitionCommit>,
}
pub(super) fn commit_event_transition(
event_state: &mut EventState,
acked_transitions: &mut EventTransitionBits,
event_history: &mut EventHistory,
commit: EventTransitionCommit,
) -> Result<(), EventTransitionCommitError> {
let mut staged_event_state = *event_state;
let mut staged_acknowledgments = *acked_transitions;
let mut staged_history = event_history.clone();
EventTransitionState::new(
&mut staged_event_state,
&mut staged_acknowledgments,
&mut staged_history,
)
.commit(commit)?;
*event_state = staged_event_state;
*acked_transitions = staged_acknowledgments;
*event_history = staged_history;
Ok(())
}
pub(super) fn commit_reliability(
reliability: &mut Reliability,
event_state: &mut EventState,
acked_transitions: &mut EventTransitionBits,
event_history: &mut EventHistory,
commit: EventEnrollmentReliabilityCommit,
) -> Result<(), EventTransitionCommitError> {
let staged_reliability = commit.reliability;
let mut staged_event_state = *event_state;
let mut staged_acknowledgments = *acked_transitions;
let mut staged_history = event_history.clone();
if let Some(transition) = commit.transition {
EventTransitionState::new(
&mut staged_event_state,
&mut staged_acknowledgments,
&mut staged_history,
)
.commit(transition)?;
}
*reliability = staged_reliability;
*event_state = staged_event_state;
*acked_transitions = staged_acknowledgments;
*event_history = staged_history;
Ok(())
}
macro_rules! impl_event_enrollment_transition_commit {
() => {
fn commit_event_transition_internal(
&mut self,
commit: EventTransitionCommit,
) -> Result<(), EventTransitionCommitError> {
transition::commit_event_transition(
&mut self.event_state,
&mut self.acked_transitions,
&mut self.event_history,
commit,
)
}
fn commit_event_enrollment_reliability_internal(
&mut self,
commit: $crate::event_enrollment::EventEnrollmentReliabilityCommit,
) -> Result<(), EventTransitionCommitError> {
transition::commit_reliability(
&mut self.reliability,
&mut self.event_state,
&mut self.acked_transitions,
&mut self.event_history,
commit,
)
}
};
}
pub(super) use impl_event_enrollment_transition_commit;