use derive_more::From;
#[derive(From, Debug)]
pub enum StorageError {
#[from(ignore)]
Backend(String),
#[from(ignore)]
Connection(String),
#[from(ignore)]
NotFound(String),
#[from(ignore)]
Serialization(String),
#[from(ignore)]
Deserialization(String),
#[from(ignore)]
Encryption(String),
#[from(ignore)]
Migration(String),
#[from(ignore)]
Generic(String),
#[from(ignore)]
SqlConversion(String),
Io(std::io::Error),
Json(serde_json::Error),
Base64(base64::DecodeError),
Hex(hex::FromHexError),
#[cfg(all(feature = "turso", not(target_family = "wasm")))]
Turso(turso::Error),
#[cfg(all(feature = "libsql", not(target_family = "wasm")))]
Libsql(libsql::Error),
}
impl core::fmt::Display for StorageError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::Backend(s) => write!(f, "Backend error: {s}"),
Self::Connection(s) => write!(f, "Connection failed: {s}"),
Self::NotFound(s) => write!(f, "Key not found: {s}"),
Self::Serialization(s) => write!(f, "Serialization error: {s}"),
Self::Deserialization(s) => write!(f, "Deserialization error: {s}"),
Self::Encryption(s) => write!(f, "Encryption error: {s}"),
Self::Migration(s) => write!(f, "Migration error: {s}"),
Self::Generic(s) => write!(f, "Storage error: {s}"),
Self::SqlConversion(s) => write!(f, "SQL conversion error: {s}"),
Self::Io(e) => write!(f, "IO error: {e}"),
Self::Json(e) => write!(f, "JSON error: {e}"),
Self::Base64(e) => write!(f, "Base64 error: {e}"),
Self::Hex(e) => write!(f, "Hex error: {e}"),
#[cfg(all(feature = "turso", not(target_family = "wasm")))]
Self::Turso(e) => write!(f, "Turso error: {e}"),
#[cfg(all(feature = "libsql", not(target_family = "wasm")))]
Self::Libsql(e) => write!(f, "libsql error: {e}"),
}
}
}
impl std::error::Error for StorageError {}
pub type StorageResult<T> = Result<T, StorageError>;