#[derive(Debug, thiserror::Error)]
pub enum VectorError {
#[error("Dimension mismatch: expected {expected}, got {got}")]
DimensionMismatch {
expected: usize,
got: usize,
},
#[error("Unsupported metric for element type {element_type}")]
UnsupportedMetric {
element_type: &'static str,
},
#[error("sqlite-vector-rs extension not loaded on connection")]
ExtensionNotLoaded,
#[error("rusqlite error: {0}")]
Rusqlite(#[from] rusqlite::Error),
#[error("sqlite-vector-rs error: {0}")]
Driver(String),
#[error("builder incomplete: required field '{field}' was not set")]
BuilderIncomplete {
field: &'static str,
},
#[error("invalid vector value: {message}")]
InvalidValue {
message: String,
},
}
pub type VectorResult<T> = Result<T, VectorError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_dimension_mismatch_display() {
let err = VectorError::DimensionMismatch {
expected: 1536,
got: 768,
};
assert_eq!(
err.to_string(),
"Dimension mismatch: expected 1536, got 768"
);
}
#[test]
fn test_unsupported_metric_display() {
let err = VectorError::UnsupportedMetric {
element_type: "int1",
};
assert!(err.to_string().contains("int1"));
}
#[test]
fn test_extension_not_loaded_display() {
let err = VectorError::ExtensionNotLoaded;
assert!(err.to_string().contains("not loaded"));
}
}