1use thiserror::Error;
2
3pub type Result<T> = std::result::Result<T, VectraError>;
4
5#[derive(Error, Debug)]
6pub enum VectraError {
7 #[error("Item not found")]
8 ItemNotFound,
9
10 #[error("Index not found at path: {path}")]
11 IndexNotFound { path: String },
12
13 #[error("Index already exists at path: {path}")]
14 IndexAlreadyExists { path: String },
15
16 #[error("Invalid vector dimensions: expected {expected}, got {actual}")]
17 InvalidDimensions { expected: usize, actual: usize },
18
19 #[error("Vector validation failed: {message}")]
20 VectorValidation { message: String },
21
22 #[error("Metadata validation failed: {message}")]
23 MetadataValidation { message: String },
24
25 #[error("Storage error: {message}")]
26 Storage { message: String },
27
28 #[error("Storage error: {message}")]
29 StorageError { message: String },
30
31 #[error("Lock error: {message}")]
32 Lock { message: String },
33
34 #[error("Serialization error: {0}")]
35 Serialization(#[from] serde_json::Error),
36
37 #[error("IO error: {0}")]
38 Io(#[from] std::io::Error),
39
40 #[error("UUID error: {0}")]
41 Uuid(#[from] uuid::Error),
42
43 #[error("Generic error: {0}")]
44 Other(#[from] anyhow::Error),
45}
46
47impl From<rocksdb::Error> for VectraError {
48 fn from(err: rocksdb::Error) -> Self {
49 VectraError::StorageError {
50 message: err.to_string(),
51 }
52 }
53}
54
55impl From<Box<bincode::ErrorKind>> for VectraError {
56 fn from(err: Box<bincode::ErrorKind>) -> Self {
57 VectraError::StorageError {
58 message: err.to_string(),
59 }
60 }
61}