use std::sync::Arc;
use thiserror::Error;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum RetrieveError {
#[error("query is empty")]
EmptyQuery,
#[error("index is empty")]
EmptyIndex,
#[error("invalid parameter: {0}")]
InvalidParameter(String),
#[error("dimension mismatch: query has {query_dim} dimensions, document has {doc_dim}")]
DimensionMismatch {
query_dim: usize,
doc_dim: usize,
},
#[error("I/O error: {0}")]
Io(Arc<std::io::Error>),
#[error("index out of bounds: {0}")]
OutOfBounds(usize),
#[error("format error: {0}")]
FormatError(String),
#[error("serialization error: {0}")]
Serialization(String),
#[error("{0}")]
Other(String),
}
impl From<std::io::Error> for RetrieveError {
fn from(err: std::io::Error) -> Self {
RetrieveError::Io(Arc::new(err))
}
}
#[cfg(feature = "qntz")]
impl From<qntz::VQuantError> for RetrieveError {
fn from(err: qntz::VQuantError) -> Self {
RetrieveError::Other(err.to_string())
}
}
#[cfg(feature = "id-compression")]
impl From<crate::compression::CompressionError> for RetrieveError {
fn from(err: crate::compression::CompressionError) -> Self {
RetrieveError::Other(err.to_string())
}
}
pub type Result<T> = std::result::Result<T, RetrieveError>;