use futures::io;
use tari_comms::peer_manager::NodeId;
use thiserror::Error;
use crate::mempool::MempoolError;
#[derive(Debug, Error)]
#[allow(clippy::large_enum_variant)]
pub enum MempoolProtocolError {
#[error("Transaction from peer `{0}` did not contain a kernel excess signature")]
ExcessSignatureMissing(NodeId),
#[error("Peer `{0}` unexpectedly closed the substream")]
SubstreamClosed(NodeId),
#[error("Mempool database error: {0}")]
MempoolError(#[from] MempoolError),
#[error("IO error: {0}")]
IoError(#[from] io::Error),
#[error("Failed to decode message from peer `{peer}`: {source}")]
DecodeFailed { peer: NodeId, source: prost::DecodeError },
#[error("Wire message from `{peer}` failed to convert to local type: {message}")]
MessageConversionFailed { peer: NodeId, message: String },
#[error("Send timeout occurred")]
SendTimeout,
#[error("Receive timeout occurred")]
RecvTimeout,
}