use liminal_protocol::lifecycle::{MarkerAckCommit, ParticipantAckCommit};
use super::super::state::{PendingBindingFate, Slot, StateError};
pub(super) fn progress_pending_marker_binding_fate(
slot: &mut Slot,
commit: &MarkerAckCommit,
) -> Result<(), StateError> {
let Some(pending) = slot.binding_fate.take() else {
return Ok(());
};
let PendingBindingFate {
attached_source_sequence,
token,
} = pending;
match commit.progress_binding_fate_token(token) {
Ok(token) => {
slot.binding_fate = Some(PendingBindingFate {
attached_source_sequence,
token,
});
Ok(())
}
Err(token) => {
slot.binding_fate = Some(PendingBindingFate {
attached_source_sequence,
token: *token,
});
Err(StateError::invariant(
"marker ack cursor commit disagrees with sealed binding-fate authority",
))
}
}
}
pub(super) fn progress_pending_binding_fate(
slot: &mut Slot,
commit: &ParticipantAckCommit,
) -> Result<(), StateError> {
let Some(pending) = slot.binding_fate.take() else {
return Ok(());
};
let PendingBindingFate {
attached_source_sequence,
token,
} = pending;
match commit.progress_binding_fate_token(token) {
Ok(token) => {
slot.binding_fate = Some(PendingBindingFate {
attached_source_sequence,
token,
});
Ok(())
}
Err(token) => {
slot.binding_fate = Some(PendingBindingFate {
attached_source_sequence,
token: *token,
});
Err(StateError::invariant(
"ack cursor commit disagrees with sealed binding-fate authority",
))
}
}
}