use crate::model::{
attempt_journal::{AttemptJournalRecord, AttemptJournalView},
fence_obligation::{FenceObligationError, FenceObligationRecord},
operation_plan::{OperationPlanError, OperationPlanRecord},
};
use thiserror::Error;
pub fn acquisition_progress(
plan: &OperationPlanRecord,
obligation: &FenceObligationRecord,
journal: &AttemptJournalRecord,
) -> Result<AttemptJournalView, FenceObligationProgressError> {
obligation.validate_plan(plan)?;
let original = plan.attempt_authority(obligation.acquisition_operation())?;
if journal.authority() != &original {
return Err(FenceObligationProgressError::AuthorityMismatch);
}
Ok(journal.view())
}
#[derive(Debug, Error)]
pub enum FenceObligationProgressError {
#[error("fence acquisition original journal authority mismatch")]
AuthorityMismatch,
#[error(transparent)]
Obligation(#[from] FenceObligationError),
#[error(transparent)]
Plan(#[from] OperationPlanError),
}
#[cfg(test)]
mod tests;