agent_migrate_core/transaction/
error.rs1use 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}