use std::fmt;
pub type Result<T> = std::result::Result<T, ProtocolError>;
#[derive(Debug, Clone)]
pub enum ProtocolError {
SerializationError(String),
InvalidMessage(String),
MissingField(String),
InvalidContentBlock(String),
VersionMismatch {
expected: u32,
got: u32,
},
InvalidControlRequest(String),
PermissionDenied(String),
Other(String),
}
impl fmt::Display for ProtocolError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::SerializationError(msg) => write!(f, "Serialization error: {}", msg),
Self::InvalidMessage(msg) => write!(f, "Invalid message: {}", msg),
Self::MissingField(field) => write!(f, "Missing required field: {}", field),
Self::InvalidContentBlock(msg) => write!(f, "Invalid content block: {}", msg),
Self::VersionMismatch { expected, got } => {
write!(f, "Version mismatch: expected {}, got {}", expected, got)
}
Self::InvalidControlRequest(msg) => write!(f, "Invalid control request: {}", msg),
Self::PermissionDenied(msg) => write!(f, "Permission denied: {}", msg),
Self::Other(msg) => write!(f, "{}", msg),
}
}
}
impl std::error::Error for ProtocolError {}
impl From<serde_json::Error> for ProtocolError {
fn from(err: serde_json::Error) -> Self {
Self::SerializationError(err.to_string())
}
}