1#![allow(clippy::module_name_repetitions)]
2
3use actix_web::{error::PayloadError, HttpResponse, ResponseError};
4use bincode::error::{DecodeError, EncodeError};
5use derive_more::Display;
6
7#[derive(Debug, Display)]
8pub enum BincodePayloadError {
9 #[display("Payload size is bigger than {_0}")]
11 Overflow(usize),
12
13 #[display("Content type error: {_0}")]
15 ContentType(String),
16
17 #[display("Bincode decode error: {_0}")]
19 Decode(DecodeError),
20
21 #[display("Bincode encode error: {_0}")]
23 Encode(EncodeError),
24
25 #[display("Error reading payload: {_0}")]
27 Payload(PayloadError),
28}
29
30impl ResponseError for BincodePayloadError {
31 fn error_response(&self) -> actix_web::HttpResponse<actix_web::body::BoxBody> {
32 match self {
33 BincodePayloadError::Overflow(_) => HttpResponse::PayloadTooLarge().into(),
34 _ => HttpResponse::BadRequest().into(),
35 }
36 }
37}
38
39impl From<actix_web::error::PayloadError> for BincodePayloadError {
40 fn from(value: actix_web::error::PayloadError) -> Self {
41 BincodePayloadError::Payload(value)
42 }
43}
44
45impl From<DecodeError> for BincodePayloadError {
46 fn from(value: DecodeError) -> Self {
47 BincodePayloadError::Decode(value)
48 }
49}
50
51impl From<EncodeError> for BincodePayloadError {
52 fn from(value: EncodeError) -> Self {
53 BincodePayloadError::Encode(value)
54 }
55}