use thiserror::Error; #[derive(Error, Debug)] pub enum CoreError { #[error("Database error: {0}")] Database(#[from] rusqlite::Error), #[error("I/O error: {0}")] Io(#[from] std::io::Error), #[error("Item not found with id {0}")] ItemNotFound(i64), #[error("Item not found")] ItemNotFoundGeneric, #[error("Invalid input: {0}")] InvalidInput(String), #[error("Compression error: {0}")] Compression(String), #[error(transparent)] Other(#[from] anyhow::Error), } impl From for CoreError { fn from(err: rusqlite_migration::Error) -> Self { match err { rusqlite_migration::Error::RusqliteError { err: e, .. } => CoreError::Database(e), e => CoreError::Other(e.into()), } } }