use thiserror::Error;
use crate::PlanError;
#[derive(Debug, Error)]
pub enum PostgresKitError {
#[error(transparent)]
InvalidPlan(#[from] PlanError),
#[error("PostgreSQL operation `{operation}` failed")]
Database {
operation: &'static str,
#[source]
source: sqlx::Error,
},
#[error("schema `{schema}` exists without the Lenso migration ledger")]
UnmanagedSchema { schema: String },
#[error("schema `{schema}` is owned by `{owner}`, not current role `{current_role}`")]
OwnershipMismatch {
schema: String,
owner: String,
current_role: String,
},
#[error("schema `{schema}` has not been set up")]
SetupRequired { schema: String },
#[error(
"schema `{schema}` is at version {current}; explicit upgrade to {expected} is required"
)]
UpgradeRequired {
schema: String,
current: u64,
expected: u64,
},
#[error("schema `{schema}` migration history diverged at version {version}")]
HistoryDiverged { schema: String, version: u64 },
#[error("schema `{schema}` is at version {actual}, newer than supported version {expected}")]
SchemaAhead {
schema: String,
actual: u64,
expected: u64,
},
}
impl PostgresKitError {
pub(crate) const fn database(operation: &'static str, source: sqlx::Error) -> Self {
Self::Database { operation, source }
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SetupOutcome {
Created { version: u64, applied: usize },
AlreadyCurrent { version: u64 },
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum UpgradeOutcome {
Applied { from: u64, to: u64, applied: usize },
AlreadyCurrent { version: u64 },
}