Skip to main content

agent_migrate_core/transaction/
error.rs

1use std::path::PathBuf;
2
3use thiserror::Error;
4
5use crate::transaction::{ConflictPolicy, SnapshotId};
6
7#[derive(Debug, Error)]
8pub enum TransactionError {
9    #[error("target conflict at {path}")]
10    Conflict { path: PathBuf },
11    #[error("target is locked by another transaction")]
12    LockBusy,
13    #[error("unsupported conflict policy for this resource: {0:?}")]
14    UnsupportedConflictPolicy(ConflictPolicy),
15    #[error("cannot merge structured resource at {path}: {message}")]
16    StructuredMerge { path: PathBuf, message: String },
17    #[error("cannot find a free renamed resource path for {path}")]
18    RenameExhausted { path: PathBuf },
19    #[error("resolved transaction path is invalid: {message}")]
20    InvalidResolvedPath { message: String },
21    #[error("target path crosses a symbolic link: {path}")]
22    Symlink { path: PathBuf },
23    #[error("doctor failed after write: {message}")]
24    DoctorFailed { message: String },
25    #[error("doctor failed and automatic rollback also failed: {message}")]
26    RollbackFailed { message: String },
27    #[error("snapshot not found: {0}")]
28    SnapshotNotFound(SnapshotId),
29    #[error("snapshot manifest is invalid")]
30    InvalidSnapshot(#[source] serde_json::Error),
31    #[error("snapshot content hash mismatch at {path}")]
32    SnapshotHashMismatch { path: PathBuf },
33    #[error("filesystem error at {path}")]
34    Io {
35        path: PathBuf,
36        #[source]
37        source: std::io::Error,
38    },
39}