use cel_memory::MemoryError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum SqliteMemoryError {
#[error("sqlite error: {0}")]
Sqlite(#[from] rusqlite::Error),
#[error("migration {name} failed: {source}")]
Migration {
name: String,
#[source]
source: rusqlite::Error,
},
#[error("sqlite-vec load failed: {0}")]
VecLoad(String),
#[error("blocking task panicked: {0}")]
BlockingJoin(String),
#[error("embedding dim mismatch: provider expects {expected}, embedder produced {actual}")]
DimMismatch {
expected: usize,
actual: usize,
},
#[error("json error: {0}")]
Json(#[from] serde_json::Error),
}
impl From<SqliteMemoryError> for MemoryError {
fn from(e: SqliteMemoryError) -> Self {
match e {
SqliteMemoryError::DimMismatch { expected, actual } => MemoryError::InvalidArgument(
format!("embedding dim mismatch: expected {expected}, got {actual}"),
),
SqliteMemoryError::Json(err) => MemoryError::Storage(format!("json: {err}")),
other => MemoryError::Storage(other.to_string()),
}
}
}