lenso_postgres_kit/
error.rs1use thiserror::Error;
2
3use crate::PlanError;
4
5#[derive(Debug, Error)]
7pub enum PostgresKitError {
8 #[error(transparent)]
10 InvalidPlan(#[from] PlanError),
11 #[error("PostgreSQL operation `{operation}` failed")]
13 Database {
14 operation: &'static str,
15 #[source]
16 source: sqlx::Error,
17 },
18 #[error("schema `{schema}` exists without the Lenso migration ledger")]
20 UnmanagedSchema { schema: String },
21 #[error("schema `{schema}` is owned by `{owner}`, not current role `{current_role}`")]
23 OwnershipMismatch {
24 schema: String,
25 owner: String,
26 current_role: String,
27 },
28 #[error("schema `{schema}` has not been set up")]
30 SetupRequired { schema: String },
31 #[error(
33 "schema `{schema}` is at version {current}; explicit upgrade to {expected} is required"
34 )]
35 UpgradeRequired {
36 schema: String,
37 current: u64,
38 expected: u64,
39 },
40 #[error("schema `{schema}` migration history diverged at version {version}")]
42 HistoryDiverged { schema: String, version: u64 },
43 #[error("schema `{schema}` is at version {actual}, newer than supported version {expected}")]
45 SchemaAhead {
46 schema: String,
47 actual: u64,
48 expected: u64,
49 },
50}
51
52impl PostgresKitError {
53 pub(crate) const fn database(operation: &'static str, source: sqlx::Error) -> Self {
54 Self::Database { operation, source }
55 }
56}
57
58#[derive(Clone, Copy, Debug, PartialEq, Eq)]
60pub enum SetupOutcome {
61 Created { version: u64, applied: usize },
63 AlreadyCurrent { version: u64 },
65}
66
67#[derive(Clone, Copy, Debug, PartialEq, Eq)]
69pub enum UpgradeOutcome {
70 Applied { from: u64, to: u64, applied: usize },
72 AlreadyCurrent { version: u64 },
74}