medullah_multipart/
result.rs1use crate::file_validator::{ErrorMessage, InputError};
2use crate::FileInput;
3use std::fmt::{Display, Formatter};
4use std::io::Error;
5
6pub type MultipartResult<T> = Result<T, MultipartError>;
7
8#[derive(Debug)]
9pub enum MultipartError {
10 NoFile,
11 IoError(Error),
12 NoContentType(String),
13 MissingDataField(String),
14 InvalidContentDisposition(String),
15 NtexError(ntex_multipart::MultipartError),
16 ValidationError(InputError),
17}
18
19impl From<Error> for MultipartError {
20 fn from(value: Error) -> Self {
21 MultipartError::IoError(value)
22 }
23}
24
25impl Display for MultipartError {
26 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
27 match self {
28 MultipartError::IoError(err) => {
29 write!(f, "{}", err)
30 }
31 MultipartError::NoFile => {
32 write!(f, "No file was uploaded")
33 }
34 MultipartError::MissingDataField(ct) => {
35 write!(f, "Data field '{}' is required", ct)
36 }
37 MultipartError::NoContentType(ct) => {
38 write!(f, "Invalid content type: {}", ct)
39 }
40 MultipartError::InvalidContentDisposition(err) => {
41 write!(f, "Invalid content disposition: {}", err)
42 }
43 MultipartError::NtexError(err) => {
44 write!(f, "{}", err)
45 }
46 MultipartError::ValidationError(err) => {
47 let field_name = err.name.clone().replace("_", " ");
48 match err.error.clone() {
49 ErrorMessage::NoFiles => {
50 write!(f, "No files were uploaded for field: '{field_name}'")
51 }
52 ErrorMessage::FileTooSmall(size) => {
53 write!(
54 f,
55 "File size is too small for field '{field_name}'. Minimum size is {}",
56 FileInput::format_size(size)
57 )
58 }
59 ErrorMessage::FileTooLarge(size) => {
60 write!(
61 f,
62 "File size is too big for field '{field_name}'. Maximum size is {}",
63 FileInput::format_size(size)
64 )
65 }
66 ErrorMessage::TooFewFiles(count) => {
67 write!(
68 f,
69 "Too few files uploaded for field '{field_name}'. Minimum is {}",
70 count
71 )
72 }
73 ErrorMessage::TooManyFiles(count) => {
74 write!(
75 f,
76 "Too many files uploaded for field '{field_name}'. Maximum is {}",
77 count
78 )
79 }
80 ErrorMessage::InvalidFileExtension(ext) => {
81 write!(
82 f,
83 "Invalid file extension for field '{field_name}': .{}",
84 ext.clone().unwrap_or_default()
85 )
86 }
87 ErrorMessage::InvalidContentType(mime) => {
88 write!(f, "Invalid mime type: {}", mime)
89 }
90 ErrorMessage::MissingFileExtension(mime) => {
91 write!(f, "Invalid file, file extension is required: {}", mime)
92 }
93 }
94 }
95 }
96 }
97}