actix_bincode/
error.rs

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    /// Payload size is bigger than limit
10    #[display("Payload size is bigger than {_0}")]
11    Overflow(usize),
12
13    /// Content type error
14    #[display("Content type error: {_0}")]
15    ContentType(String),
16
17    /// Decode error
18    #[display("Bincode decode error: {_0}")]
19    Decode(DecodeError),
20
21    /// Encode error
22    #[display("Bincode encode error: {_0}")]
23    Encode(EncodeError),
24
25    /// Payload error
26    #[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}