Skip to main content

cel_memory_postgres/
error.rs

1//! Storage-side error type. Converted to [`MemoryError`] on the way out
2//! of the [`PostgresMemoryProvider`](crate::PostgresMemoryProvider).
3
4use cel_memory::MemoryError;
5use thiserror::Error;
6
7/// Errors that originate inside the PostgreSQL memory backend.
8#[derive(Debug, Error)]
9pub enum PostgresMemoryError {
10    /// sqlx returned an error.
11    #[error("postgres error: {0}")]
12    Sqlx(#[from] sqlx::Error),
13
14    /// Migration failed to apply.
15    #[error("migration failed: {0}")]
16    Migration(String),
17
18    /// The embedder dimension does not match the schema (`vector(384)`).
19    #[error("embedding dim mismatch: provider expects {expected}, embedder declares {actual}")]
20    DimMismatch {
21        /// Dim the schema expects.
22        expected: usize,
23        /// Dim the embedder declares.
24        actual: usize,
25    },
26
27    /// JSON serialization failed inside the storage layer.
28    #[error("json error: {0}")]
29    Json(#[from] serde_json::Error),
30}
31
32impl From<PostgresMemoryError> for MemoryError {
33    fn from(e: PostgresMemoryError) -> Self {
34        match e {
35            PostgresMemoryError::DimMismatch { expected, actual } => MemoryError::InvalidArgument(
36                format!("embedding dim mismatch: expected {expected}, got {actual}"),
37            ),
38            PostgresMemoryError::Json(err) => MemoryError::Storage(format!("json: {err}")),
39            other => MemoryError::Storage(other.to_string()),
40        }
41    }
42}