#![allow(clippy::module_name_repetitions)]
use actix_web::{error::PayloadError, HttpResponse, ResponseError};
use bincode::error::{DecodeError, EncodeError};
use derive_more::Display;
#[derive(Debug, Display)]
pub enum BincodePayloadError {
#[display(fmt = "Payload size is bigger than {_0}")]
Overflow(usize),
#[display(fmt = "Content type error: {_0}")]
ContentType(String),
#[display(fmt = "Bincode decode error: {_0}")]
Decode(DecodeError),
#[display(fmt = "Bincode encode error: {_0}")]
Encode(EncodeError),
#[display(fmt = "Error reading payload: {_0}")]
Payload(PayloadError),
}
impl ResponseError for BincodePayloadError {
fn error_response(&self) -> actix_web::HttpResponse<actix_web::body::BoxBody> {
match self {
BincodePayloadError::Overflow(_) => HttpResponse::PayloadTooLarge().into(),
_ => HttpResponse::BadRequest().into(),
}
}
}
impl From<actix_web::error::PayloadError> for BincodePayloadError {
fn from(value: actix_web::error::PayloadError) -> Self {
BincodePayloadError::Payload(value)
}
}
impl From<DecodeError> for BincodePayloadError {
fn from(value: DecodeError) -> Self {
BincodePayloadError::Decode(value)
}
}
impl From<EncodeError> for BincodePayloadError {
fn from(value: EncodeError) -> Self {
BincodePayloadError::Encode(value)
}
}