use std::num::ParseIntError; use tokio::sync::mpsc; use redb; use bincode; use crate::protocol::Protocol; // todo: more error types #[derive(Debug)] pub struct DBError(pub String); impl From for DBError { fn from(item: std::io::Error) -> Self { DBError(item.to_string().clone()) } } impl From for DBError { fn from(item: ParseIntError) -> Self { DBError(item.to_string().clone()) } } impl From for DBError { fn from(item: std::str::Utf8Error) -> Self { DBError(item.to_string().clone()) } } impl From for DBError { fn from(item: std::string::FromUtf8Error) -> Self { DBError(item.to_string().clone()) } } impl From for DBError { fn from(item: redb::Error) -> Self { DBError(item.to_string()) } } impl From for DBError { fn from(item: redb::DatabaseError) -> Self { DBError(item.to_string()) } } impl From for DBError { fn from(item: redb::TransactionError) -> Self { DBError(item.to_string()) } } impl From for DBError { fn from(item: redb::TableError) -> Self { DBError(item.to_string()) } } impl From for DBError { fn from(item: redb::StorageError) -> Self { DBError(item.to_string()) } } impl From for DBError { fn from(item: redb::CommitError) -> Self { DBError(item.to_string()) } } impl From> for DBError { fn from(item: Box) -> Self { DBError(item.to_string()) } } impl From> for DBError { fn from(item: mpsc::error::SendError<()>) -> Self { DBError(item.to_string().clone()) } }