1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use std::{
    error::Error,
    fmt::{self, Display, Formatter},
    io,
    string::FromUtf8Error,
    sync::Arc,
};

use crate::multer;

#[derive(Debug)]
pub enum MultipartFormDataError {
    NotFormDataError,
    BoundaryNotFoundError,
    IOError(io::Error),
    MulterError(multer::Error),
    FromUtf8Error(FromUtf8Error),
    DataTooLargeError(Arc<str>),
    DataTypeError(Arc<str>),
}

impl From<io::Error> for MultipartFormDataError {
    #[inline]
    fn from(err: io::Error) -> MultipartFormDataError {
        MultipartFormDataError::IOError(err)
    }
}

impl From<multer::Error> for MultipartFormDataError {
    #[inline]
    fn from(err: multer::Error) -> MultipartFormDataError {
        MultipartFormDataError::MulterError(err)
    }
}

impl From<FromUtf8Error> for MultipartFormDataError {
    #[inline]
    fn from(err: FromUtf8Error) -> MultipartFormDataError {
        MultipartFormDataError::FromUtf8Error(err)
    }
}

impl Display for MultipartFormDataError {
    #[inline]
    fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> {
        match self {
            MultipartFormDataError::NotFormDataError => {
                f.write_str("The content type is not `multipart/form-data`.")
            },
            MultipartFormDataError::BoundaryNotFoundError => f.write_str(
                "The boundary cannot be found. Maybe the multipart form data is incorrect.",
            ),
            MultipartFormDataError::IOError(err) => Display::fmt(err, f),
            MultipartFormDataError::MulterError(err) => Display::fmt(err, f),
            MultipartFormDataError::FromUtf8Error(err) => Display::fmt(err, f),
            MultipartFormDataError::DataTooLargeError(field) => {
                f.write_fmt(format_args!("The data of field `{}` is too large.", field))
            },
            MultipartFormDataError::DataTypeError(field) => {
                f.write_fmt(format_args!("The data type of field `{}` is incorrect.", field))
            },
        }
    }
}

impl Error for MultipartFormDataError {}