use acton_reactive::ipc::IpcError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ClientError {
#[error("Failed to connect to engine: {0}")]
ConnectionFailed(String),
#[error("Engine socket not found at: {0}")]
SocketNotFound(String),
#[error("Communication error: {0}")]
IoError(#[from] std::io::Error),
#[error("IPC error: {0}")]
IpcError(String),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Subscription failed: {0}")]
SubscriptionFailed(String),
#[error("Publish failed: {0}")]
PublishFailed(String),
#[error("Discovery failed: {0}")]
DiscoveryFailed(String),
#[error("Request timed out")]
Timeout,
#[error("Engine error: {0}")]
EngineError(String),
#[error("Protocol error: {0}")]
ProtocolError(String),
}
impl From<IpcError> for ClientError {
fn from(e: IpcError) -> Self {
ClientError::IpcError(e.to_string())
}
}
impl From<serde_json::Error> for ClientError {
fn from(e: serde_json::Error) -> Self {
ClientError::SerializationError(e.to_string())
}
}
impl From<rmp_serde::encode::Error> for ClientError {
fn from(e: rmp_serde::encode::Error) -> Self {
ClientError::SerializationError(e.to_string())
}
}
impl From<rmp_serde::decode::Error> for ClientError {
fn from(e: rmp_serde::decode::Error) -> Self {
ClientError::SerializationError(e.to_string())
}
}