use thiserror::Error;
#[derive(Debug, Error)]
pub enum KvsError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("Key not found: {0}")]
KeyNotFound(String),
#[error("Store not found: {0}")]
StoreNotFound(String),
#[error("Serialization error: {0}")]
Serialization(String),
#[error("Deserialization error: {0}")]
Deserialization(String),
#[error("Encryption error: {0}")]
Encryption(String),
#[error("Decryption error: {0}")]
Decryption(String),
#[error("Error: {0}")]
Other(String),
}
impl From<serde_json::Error> for KvsError {
fn from(err: serde_json::Error) -> Self {
KvsError::Serialization(err.to_string())
}
}
impl From<KvsError> for crate::error::CryptoError {
fn from(err: KvsError) -> Self {
crate::error::CryptoError::SerializationError(err.to_string())
}
}
impl From<crate::error::CryptoError> for KvsError {
fn from(err: crate::error::CryptoError) -> Self {
match err {
crate::error::CryptoError::EncryptionFailed(msg) => KvsError::Encryption(msg),
crate::error::CryptoError::DecryptionFailed(msg) => KvsError::Decryption(msg),
crate::error::CryptoError::SerializationError(msg) => KvsError::Serialization(msg),
_ => KvsError::Other(err.to_string()),
}
}
}
pub type Result<T> = std::result::Result<T, KvsError>;