use crate::model::{
attempt_journal::AttemptJournalRecord,
fence_acquisition::{
FenceAcquisitionAcknowledgement, FenceAcquisitionError, FenceAcquisitionRequest,
},
};
use thiserror::Error;
pub fn validate_acknowledgement<'a>(
request: &FenceAcquisitionRequest<'_>,
journal: &AttemptJournalRecord,
acknowledgement: &'a FenceAcquisitionAcknowledgement,
) -> Result<&'a FenceAcquisitionAcknowledgement, FenceAcquisitionAcknowledgementError> {
request.validate_journal(journal)?;
if acknowledgement.authority != request.authority().digest() {
return Err(FenceAcquisitionAcknowledgementError::AuthorityMismatch);
}
if acknowledgement.mutation_attempt != request.mutation_attempt() {
return Err(FenceAcquisitionAcknowledgementError::AttemptMismatch);
}
Ok(acknowledgement)
}
#[derive(Debug, Error)]
pub enum FenceAcquisitionAcknowledgementError {
#[error(transparent)]
Reservation(#[from] FenceAcquisitionError),
#[error("fence acquisition acknowledgement authority mismatch")]
AuthorityMismatch,
#[error("fence acquisition acknowledgement attempt mismatch")]
AttemptMismatch,
}
#[cfg(test)]
mod tests;