use std::io;
use tari_common_sqlite::error::StorageError;
use tari_comms::{
CommsBuilderError,
PeerConnectionError,
connectivity::ConnectivityError,
message::OutboundMessage,
peer_manager::PeerManagerError,
tor,
};
use tari_utilities::message_format::MessageFormatError;
use thiserror::Error;
use tokio::{
sync::{mpsc::error::SendError, oneshot},
task,
time,
};
#[derive(Debug, Error)]
#[allow(clippy::enum_variant_names)]
pub enum Error {
#[error("HiddenServiceBuilderError: {0}")]
HiddenServiceBuilderError(#[from] tor::HiddenServiceBuilderError),
#[error("HiddenServiceControllerError: {0}")]
HiddenServiceControllerError(#[from] tor::HiddenServiceControllerError),
#[error("CommsBuilderError: {0}")]
CommsBuilderError(#[from] CommsBuilderError),
#[error("PeerManagerError: {0}")]
PeerManagerError(#[from] PeerManagerError),
#[error("Connection error: {0}")]
PeerConnectionError(#[from] PeerConnectionError),
#[error("Connectivity error: {0}")]
ConnectivityError(#[from] ConnectivityError),
#[error("Message format error: {0}")]
MessageFormatError(String),
#[error("Failed to send message: {0}")]
SendError(#[from] SendError<OutboundMessage>),
#[error("JoinError: {0}")]
JoinError(#[from] task::JoinError),
#[error("Example did not exit cleanly: `{0}`")]
WaitTimeout(#[from] time::error::Elapsed),
#[error("IO error: {0}")]
Io(#[from] io::Error),
#[error("User quit")]
UserQuit,
#[error("Peer sent an invalid protocol frame")]
InvalidProtocolFrame,
#[error("Unexpected EoF")]
UnexpectedEof,
#[error("Internal reply canceled")]
ReplyCanceled(#[from] oneshot::error::RecvError),
#[error("StorageError: {0}")]
StorageError(#[from] StorageError),
}
impl From<MessageFormatError> for Error {
fn from(value: MessageFormatError) -> Self {
Error::MessageFormatError(value.to_string())
}
}