use thiserror::Error;
#[derive(Debug, Error)]
pub enum ApplyError {
#[error("postgres error: {0}")]
Postgres(#[from] tokio_postgres::Error),
#[error("plan i/o: {0}")]
PlanIo(#[from] pgevolve_core::plan::PlanIoError),
#[error("catalog: {0}")]
Catalog(#[from] pgevolve_core::catalog::CatalogError),
#[error("pgevolve advisory lock is held by another session")]
LockHeld,
#[error("target identity mismatch: plan={plan} live={live}")]
TargetIdentityMismatch {
plan: String,
live: String,
},
#[error("drift detected since planning: {0} change(s)")]
DriftDetected(usize),
#[error("unapproved destructive intents: {count}")]
UnapprovedIntents {
count: usize,
details: Vec<(u32, String, String)>,
},
#[error("step {step_no} (group {group_no}) failed: {error}")]
StepFailed {
step_no: u32,
group_no: u32,
error: String,
},
#[error("aborted cleanly after step {step_no}")]
AbortedAfterStep {
step_no: u32,
},
#[error("unwaived LintAtPlan findings at apply time: {count} finding(s)")]
LintWaiverMissing {
count: usize,
details: Vec<(String, String)>,
},
}