use std::io;
use tokio::sync::mpsc;
#[derive(Debug)]
pub enum CommunicationError {
NoCapacity,
Disconnected,
SerializeNotImplemented,
DeserializeNotImplemented,
AbomonationError(io::Error),
BincodeError(bincode::Error),
IoError(io::Error),
}
impl From<bincode::Error> for CommunicationError {
fn from(e: bincode::Error) -> Self {
CommunicationError::BincodeError(e)
}
}
impl From<io::Error> for CommunicationError {
fn from(e: io::Error) -> Self {
CommunicationError::IoError(e)
}
}
impl<T> From<std::sync::mpsc::SendError<T>> for CommunicationError {
fn from(_e: std::sync::mpsc::SendError<T>) -> Self {
CommunicationError::Disconnected
}
}
impl<T> From<mpsc::error::SendError<T>> for CommunicationError {
fn from(_e: mpsc::error::SendError<T>) -> Self {
CommunicationError::Disconnected
}
}
impl<T> From<mpsc::error::TrySendError<T>> for CommunicationError {
fn from(e: mpsc::error::TrySendError<T>) -> Self {
match e {
mpsc::error::TrySendError::Closed(_) => CommunicationError::Disconnected,
mpsc::error::TrySendError::Full(_) => CommunicationError::NoCapacity,
}
}
}
impl From<CodecError> for CommunicationError {
fn from(e: CodecError) -> Self {
match e {
CodecError::IoError(e) => CommunicationError::IoError(e),
CodecError::BincodeError(e) => CommunicationError::BincodeError(e),
}
}
}
#[derive(Debug)]
pub enum CodecError {
IoError(io::Error),
BincodeError(bincode::Error),
}
impl From<io::Error> for CodecError {
fn from(e: io::Error) -> CodecError {
CodecError::IoError(e)
}
}
impl From<bincode::Error> for CodecError {
fn from(e: bincode::Error) -> Self {
CodecError::BincodeError(e)
}
}
#[derive(Debug)]
pub enum TryRecvError {
Empty,
Disconnected,
BincodeError(bincode::Error),
}