use crate::types::queue_name::QueueNameError;
use thiserror::Error;
use url::ParseError;
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum PgmqError {
#[error("json parsing error {0}")]
JsonParsingError(#[from] serde_json::error::Error),
#[error("url parsing error {0}")]
UrlParsingError(#[from] ParseError),
#[cfg(feature = "sqlx")]
#[error("database error {0}")]
DatabaseError(#[from] sqlx::Error),
#[cfg(any(feature = "rust-postgres", feature = "tokio-postgres"))]
#[error("database error {0}")]
TokioPostgresError(#[from] tokio_postgres::Error),
#[cfg(feature = "diesel")]
#[error("database error {0}")]
DieselError(#[from] diesel::result::Error),
#[cfg(feature = "diesel-sync-pool")]
#[error("database pool error {0}")]
DieselPoolError(#[from] r2d2::Error),
#[cfg(feature = "diesel-async-pool")]
#[error("database pool error {0}")]
DieselAsyncPoolError(#[from] bb8::RunError<diesel_async::pooled_connection::PoolError>),
#[error(transparent)]
QueueNameError(#[from] QueueNameError),
#[cfg(feature = "install-sql")]
#[error("installation error: {0}")]
InstallationError(String),
}