Skip to main content

vectrust_core/
error.rs

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}