use thiserror::Error;
#[derive(Error, Debug)]
pub enum IpcError {
#[error("Connection error: {0}")]
Connection(String),
#[error("Serialization error: {0}")]
Serialization(String),
#[error("Framing error: {0}")]
Framing(String),
#[error("Timeout: {0}")]
Timeout(String),
#[error("Invalid message: {0}")]
InvalidMessage(String),
#[error("Handler error: {0}")]
Handler(String),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Channel error: {0}")]
Channel(String),
#[error("Module not found: {0}")]
ModuleNotFound(String),
#[error("Server shutdown")]
Shutdown,
}
impl From<postcard::Error> for IpcError {
fn from(err: postcard::Error) -> Self {
IpcError::Serialization(err.to_string())
}
}
impl From<serde_json::Error> for IpcError {
fn from(err: serde_json::Error) -> Self {
IpcError::Serialization(err.to_string())
}
}
impl From<tokio::sync::broadcast::error::SendError<super::command_message::CommandMessage>> for IpcError {
fn from(err: tokio::sync::broadcast::error::SendError<super::command_message::CommandMessage>) -> Self {
IpcError::Channel(err.to_string())
}
}
impl<T> From<tokio::sync::mpsc::error::SendError<T>> for IpcError {
fn from(err: tokio::sync::mpsc::error::SendError<T>) -> Self {
IpcError::Channel(err.to_string())
}
}