use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum RegisterErrorCode {
DuplicateCommand,
}
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteErrorCode {
NotFound,
InvalidRequest,
InternalError,
Timeout,
ChannelDisconnected,
}
#[derive(thiserror::Error, Debug)]
pub enum CommandError {
#[error("invalid message: {0}")]
InvalidMessage(String),
#[error("duplicate command registration: {0}")]
DuplicateCommand(String),
#[error("command not found: {0}")]
NotFound(String),
#[error("invalid request for command {command_id}: {message}")]
InvalidRequest { command_id: String, message: String },
#[error("internal error executing command {command_id}: {message}")]
Internal { command_id: String, message: String },
#[error("request timed out")]
Timeout,
#[error("channel disconnected")]
ChannelDisconnected,
#[error("serialization error: {0}")]
Serde(#[from] serde_json::Error),
}
#[derive(thiserror::Error, Debug)]
pub enum ChannelError {
#[error("channel already closed")]
Closed,
#[error("channel send failed: {0}")]
Send(String),
#[error("channel error: {0}")]
Other(String),
}