ic_backup/ops/persistence/
mod.rs1mod artifact_commit;
4mod file_lock;
5mod journal_lock;
6mod json;
7
8pub use artifact_commit::{ArtifactCommitOutcome, commit_artifact_directory};
9pub use journal_lock::{JournalLock, JournalLockError};
10pub use json::{create_json_durable, read_json, write_json_durable};
11
12use crate::{model::artifacts::ChecksumError, ops::artifacts::ArtifactError};
13use std::io;
14use thiserror::Error;
15
16#[derive(Debug, Error)]
18pub enum PersistenceError {
19 #[error(transparent)]
21 Io(#[from] io::Error),
22 #[error(transparent)]
24 Json(#[from] serde_json::Error),
25 #[error("record exceeds byte limit {limit}")]
27 RecordTooLarge {
28 limit: u64,
30 },
31 #[error(transparent)]
33 Artifact(#[from] ArtifactError),
34 #[error(transparent)]
36 Checksum(#[from] ChecksumError),
37 #[error("artifact commit paths must be distinct siblings: {temporary}, {canonical}")]
39 ArtifactCommitPathMismatch {
40 temporary: String,
42 canonical: String,
44 },
45 #[error("artifact commit has conflicting paths: {temporary}, {canonical}")]
47 ArtifactCommitPathConflict {
48 temporary: String,
50 canonical: String,
52 },
53 #[error("artifact commit is missing both paths: {temporary}, {canonical}")]
55 ArtifactCommitPathMissing {
56 temporary: String,
58 canonical: String,
60 },
61 #[error("durable artifact publication is unsupported on {platform}")]
63 ArtifactCommitUnsupportedPlatform {
64 platform: &'static str,
66 },
67 #[error("unsupported artifact entry at {path}: {kind}")]
69 UnsupportedArtifactEntry {
70 path: String,
72 kind: String,
74 },
75}