use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ErrorCode {
QueueFull,
BackendUnavailable,
InvalidRequest,
FrameTooLarge,
Internal,
}
#[derive(Debug, thiserror::Error)]
pub enum ProtoError {
#[error("frame exceeds {} byte cap", crate::MAX_FRAME_BYTES)]
FrameTooLarge,
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("decode: {0}")]
Decode(#[from] serde_json::Error),
#[error("invalid request: {0}")]
InvalidRequest(String),
}
impl ProtoError {
pub fn to_error_code(&self) -> ErrorCode {
match self {
ProtoError::FrameTooLarge => ErrorCode::FrameTooLarge,
ProtoError::Decode(_) | ProtoError::InvalidRequest(_) => ErrorCode::InvalidRequest,
ProtoError::Io(_) => ErrorCode::Internal,
}
}
}