use futures::channel::oneshot;
use sedimentree_core::codec::error::DecodeError;
use subduction_core::connection::message::Message;
use thiserror::Error;
#[derive(Debug, Clone, Copy, Error)]
#[error("sender task stopped")]
pub struct SendError;
#[derive(Debug, Clone, Copy, Error)]
pub enum CallError {
#[error("response dropped")]
ResponseDropped(oneshot::Canceled),
#[error("timed out waiting for response")]
Timeout,
#[error("sender task stopped")]
SenderTaskStopped,
}
#[derive(Debug, Clone, Copy, Error)]
#[error("inbound channel closed")]
pub struct RecvError;
#[derive(Debug, Clone, Copy, Error)]
#[error("disconnected")]
pub struct DisconnectionError;
#[derive(Debug, Error)]
#[allow(clippy::large_enum_variant)]
pub enum RunError {
#[error("channel send error: {0}")]
ChanSend(async_channel::SendError<Message>),
#[error(transparent)]
WebSocket(#[from] tungstenite::Error),
#[error("deserialize error: {0}")]
Deserialize(DecodeError),
}