use std::fmt;
use std::io;
pub(crate) type Result<T> = std::result::Result<T, NeutralIpcError>;
#[derive(Debug)]
pub enum NeutralIpcError {
Io(io::Error),
InvalidHeaderLength,
InvalidResponse,
ConnectionClosed,
InvalidUtf8,
Json(serde_json::Error),
MsgPackEncode(rmp_serde::encode::Error),
MsgPackDecode(rmp_serde::decode::Error),
}
impl fmt::Display for NeutralIpcError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
NeutralIpcError::Io(err) => write!(f, "IO error: {}", err),
NeutralIpcError::InvalidHeaderLength => write!(f, "Invalid header length received"),
NeutralIpcError::InvalidResponse => write!(f, "Invalid response from server"),
NeutralIpcError::ConnectionClosed => write!(f, "Connection closed unexpectedly"),
NeutralIpcError::InvalidUtf8 => write!(f, "Invalid UTF-8 encoding in response"),
NeutralIpcError::Json(err) => write!(f, "JSON error: {}", err),
NeutralIpcError::MsgPackEncode(err) => write!(f, "MsgPack encode error: {}", err),
NeutralIpcError::MsgPackDecode(err) => write!(f, "MsgPack decode error: {}", err),
}
}
}
impl std::error::Error for NeutralIpcError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
NeutralIpcError::Io(err) => Some(err),
NeutralIpcError::Json(err) => Some(err),
NeutralIpcError::MsgPackEncode(err) => Some(err),
NeutralIpcError::MsgPackDecode(err) => Some(err),
_ => None,
}
}
}
impl From<io::Error> for NeutralIpcError {
fn from(err: io::Error) -> Self {
NeutralIpcError::Io(err)
}
}
impl From<serde_json::Error> for NeutralIpcError {
fn from(err: serde_json::Error) -> Self {
NeutralIpcError::Json(err)
}
}
impl From<rmp_serde::encode::Error> for NeutralIpcError {
fn from(err: rmp_serde::encode::Error) -> Self {
NeutralIpcError::MsgPackEncode(err)
}
}
impl From<rmp_serde::decode::Error> for NeutralIpcError {
fn from(err: rmp_serde::decode::Error) -> Self {
NeutralIpcError::MsgPackDecode(err)
}
}