use super::{BackupLayoutGuard, JournalLockError, PersistenceError, immutable_record};
use crate::model::{
artifacts::ArtifactChecksumRecord,
operation_plan::{MAX_OPERATION_PLAN_BYTES, OperationPlanRecord},
};
use thiserror::Error;
pub fn create_operation_plan(
layout: &BackupLayoutGuard,
record: &OperationPlanRecord,
) -> Result<(), OperationPlanPersistenceError> {
immutable_record::create(
layout,
"operation-plan.json",
MAX_OPERATION_PLAN_BYTES,
record,
)
}
pub fn read_operation_plan(
layout: &BackupLayoutGuard,
expected: &ArtifactChecksumRecord,
) -> Result<OperationPlanRecord, OperationPlanPersistenceError> {
immutable_record::read(
layout,
"operation-plan.json",
MAX_OPERATION_PLAN_BYTES,
|record: &OperationPlanRecord| &record.digest() == expected,
|| OperationPlanPersistenceError::DigestMismatch,
)
}
#[derive(Debug, Error)]
pub enum OperationPlanPersistenceError {
#[error("operation plan digest mismatch")]
DigestMismatch,
#[error(transparent)]
Lock(#[from] JournalLockError),
#[error(transparent)]
Persistence(#[from] PersistenceError),
}
#[cfg(all(test, unix))]
mod tests;