mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
Co-authored-by: npub122y0pqkertljmedu303rl0aqrj3w8pvu43t6jxm6875lzg6f2pwqegc3xc <5288f082d91aff2de5bc8be23fbfa01ca2e3859cac57a91b7a3fa9f12349505c@buzz.block.builderlab.xyz> Signed-off-by: npub122y0pqkertljmedu303rl0aqrj3w8pvu43t6jxm6875lzg6f2pwqegc3xc <5288f082d91aff2de5bc8be23fbfa01ca2e3859cac57a91b7a3fa9f12349505c@buzz.block.builderlab.xyz>
60 lines
1.8 KiB
Rust
60 lines
1.8 KiB
Rust
//! Database error types.
|
||
|
||
use thiserror::Error;
|
||
|
||
/// Errors produced by database operations.
|
||
#[derive(Debug, Error)]
|
||
pub enum DbError {
|
||
/// A SQLx driver-level error.
|
||
#[error("database error: {0}")]
|
||
Sqlx(#[from] sqlx::Error),
|
||
|
||
/// A SQLx migration error.
|
||
#[error("migration error: {0}")]
|
||
Migrate(#[from] sqlx::migrate::MigrateError),
|
||
|
||
/// Attempted to store an AUTH event (kind 22242), which is forbidden.
|
||
#[error("AUTH events (kind 22242) must not be stored")]
|
||
AuthEventRejected,
|
||
|
||
/// Attempted to store an ephemeral event (kinds 20000–29999), which is forbidden.
|
||
#[error("ephemeral events (kind {0}) must not be stored")]
|
||
EphemeralEventRejected(u16),
|
||
|
||
/// The requested channel does not exist.
|
||
#[error("channel not found: {0}")]
|
||
ChannelNotFound(uuid::Uuid),
|
||
|
||
/// The requested member is not in the channel.
|
||
#[error("member not found in channel {0}")]
|
||
MemberNotFound(uuid::Uuid),
|
||
|
||
/// A generic not-found error.
|
||
#[error("not found: {0}")]
|
||
NotFound(String),
|
||
|
||
/// The caller lacks permission for the requested operation.
|
||
#[error("access denied: {0}")]
|
||
AccessDenied(String),
|
||
|
||
/// JSON serialization or deserialization failed.
|
||
#[error("serialization error: {0}")]
|
||
Serde(#[from] serde_json::Error),
|
||
|
||
/// A value in the database is malformed or unexpected.
|
||
#[error("invalid data: {0}")]
|
||
InvalidData(String),
|
||
|
||
/// A deletion safety invariant is structurally violated and requires
|
||
/// operator/code remediation rather than blind retry.
|
||
#[error("deletion safety error: {0}")]
|
||
DeletionSafety(String),
|
||
|
||
/// A stored timestamp value could not be interpreted.
|
||
#[error("invalid timestamp: {0}")]
|
||
InvalidTimestamp(i64),
|
||
}
|
||
|
||
/// Convenience alias for `Result<T, DbError>`.
|
||
pub type Result<T> = std::result::Result<T, DbError>;
|