use thiserror::Error;
pub type Result<T> = std::result::Result<T, CollectionError>;
#[derive(Debug, Error)]
pub enum CollectionError {
#[error("Collection not found: {name}")]
CollectionNotFound {
name: String,
},
#[error("Collection already exists: {name}")]
CollectionAlreadyExists {
name: String,
},
#[error("Alias not found: {alias}")]
AliasNotFound {
alias: String,
},
#[error("Alias already exists: {alias}")]
AliasAlreadyExists {
alias: String,
},
#[error("Invalid configuration: {message}")]
InvalidConfiguration {
message: String,
},
#[error("Alias '{alias}' points to non-existent collection '{collection}'")]
InvalidAlias {
alias: String,
collection: String,
},
#[error("Cannot delete collection '{collection}' because it has active aliases: {aliases:?}")]
CollectionHasAliases {
collection: String,
aliases: Vec<String>,
},
#[error("Invalid collection name: {name} - {reason}")]
InvalidName {
name: String,
reason: String,
},
#[error("Database error: {0}")]
DatabaseError(#[from] ruvector_core::error::RuvectorError),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("Serialization error: {0}")]
SerializationError(String),
}
impl From<serde_json::Error> for CollectionError {
fn from(err: serde_json::Error) -> Self {
CollectionError::SerializationError(err.to_string())
}
}
impl From<bincode::error::EncodeError> for CollectionError {
fn from(err: bincode::error::EncodeError) -> Self {
CollectionError::SerializationError(err.to_string())
}
}
impl From<bincode::error::DecodeError> for CollectionError {
fn from(err: bincode::error::DecodeError) -> Self {
CollectionError::SerializationError(err.to_string())
}
}