validate_ro/
error.rs

1use serde::ser::{Serialize, Serializer, SerializeSeq};
2
3#[derive(Debug)]
4pub enum ValidationError {
5    Required,
6    TypeError { expected: String, got: String },
7    LengthError { expected: usize, got: usize },
8    MinLengthError { expected: usize, got: usize },
9    MaxLengthError { expected: usize, got: usize },
10    EqualError { expected: String, got: String },
11    MinValueError { expected: f64, got: f64 },
12    MaxValueError { expected: f64, got: f64 },
13    NumericError(String),
14    AcceptedError(String),
15    EmailError(String),
16    EmailDomainError(String),
17    InError(String),
18    NotInError(String),
19    RegexError(String),
20    UrlError(String),
21    IpError(String),
22    ExtensionError(Vec<String>),
23    UniqueError,
24    FileSizeError { min: u64, max: u64 },
25
26    Custom(String),
27}
28
29
30impl Serialize for ValidationError {
31    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
32    where
33        S: Serializer,
34    {
35        match self {
36            ValidationError::Required => {
37                Ok(serializer.serialize_str("required_error")?)
38            }
39            ValidationError::TypeError { expected, got } => {
40                let mut seq = serializer.serialize_seq(Some(2))?;
41                seq.serialize_element("type_error")?;
42                seq.serialize_element(&[expected,got])?;
43                seq.end()
44            }
45            ValidationError::LengthError { expected, got } => {
46                let mut seq = serializer.serialize_seq(Some(2))?;
47                seq.serialize_element("len_error")?;
48                seq.serialize_element(&[expected,got])?;
49                seq.end()
50            }
51            ValidationError::MinLengthError { expected, got } => {
52                let mut seq = serializer.serialize_seq(Some(2))?;
53                seq.serialize_element("min_len_error")?;
54                seq.serialize_element(&[expected,got])?;
55                seq.end()
56            }
57            ValidationError::MaxLengthError { expected, got } => {
58                let mut seq = serializer.serialize_seq(Some(2))?;
59                seq.serialize_element("max_len_error")?;
60                seq.serialize_element(&[expected,got])?;
61                seq.end()
62            }
63            ValidationError::EqualError { expected, got } => {
64                let mut seq = serializer.serialize_seq(Some(2))?;
65                seq.serialize_element("eq_error")?;
66                seq.serialize_element(&[expected,got])?;
67                seq.end()
68            }
69            ValidationError::MinValueError { expected, got } => {
70                let mut seq = serializer.serialize_seq(Some(2))?;
71                seq.serialize_element("min_error")?;
72                seq.serialize_element(&[expected,got])?;
73                seq.end()
74            }
75            ValidationError::MaxValueError { expected, got } => {
76                let mut seq = serializer.serialize_seq(Some(2))?;
77                seq.serialize_element("max_error")?;
78                seq.serialize_element(&[expected,got])?;
79                seq.end()
80            }
81            ValidationError::NumericError(a) => {
82                let mut seq = serializer.serialize_seq(Some(2))?;
83                seq.serialize_element("numeric_error")?;
84                seq.serialize_element(&[a])?;
85                seq.end()
86            }
87            ValidationError::AcceptedError(a) => {
88                let mut seq = serializer.serialize_seq(Some(2))?;
89                seq.serialize_element("accepted_error")?;
90                seq.serialize_element(&[a])?;
91                seq.end()
92            }
93            ValidationError::EmailError(a) => {
94                let mut seq = serializer.serialize_seq(Some(2))?;
95                seq.serialize_element("email_error")?;
96                seq.serialize_element(&[a])?;
97                seq.end()
98            }
99            ValidationError::EmailDomainError(a) => {
100                let mut seq = serializer.serialize_seq(Some(2))?;
101                seq.serialize_element("email_domain_name_error")?;
102                seq.serialize_element(&[a])?;
103                seq.end()
104            }
105            ValidationError::InError(a) => {
106                let mut seq = serializer.serialize_seq(Some(2))?;
107                seq.serialize_element("in_error")?;
108                seq.serialize_element(&[a])?;
109                seq.end()
110            }
111            ValidationError::NotInError(a) => {
112                let mut seq = serializer.serialize_seq(Some(2))?;
113                seq.serialize_element("not_in_error")?;
114                seq.serialize_element(&[a])?;
115                seq.end()
116            }
117            ValidationError::RegexError(a) => {
118                let mut seq = serializer.serialize_seq(Some(2))?;
119                seq.serialize_element("regex_error")?;
120                seq.serialize_element(&[a])?;
121                seq.end()
122            }
123            ValidationError::UrlError(a) => {
124                let mut seq = serializer.serialize_seq(Some(2))?;
125                seq.serialize_element("url_error")?;
126                seq.serialize_element(&[a])?;
127                seq.end()
128            }
129            ValidationError::IpError(a) => {
130                let mut seq = serializer.serialize_seq(Some(2))?;
131                seq.serialize_element("ip_error")?;
132                seq.serialize_element(&[a])?;
133                seq.end()
134            }
135            ValidationError::ExtensionError(a) => {
136                let mut seq = serializer.serialize_seq(Some(2))?;
137                seq.serialize_element("extension_error")?;
138                seq.serialize_element(&[a])?;
139                seq.end()
140            }
141            ValidationError::UniqueError => {
142                Ok(serializer.serialize_str("unique_error")?)
143            }
144            ValidationError::FileSizeError { min, max } => {
145                let mut seq = serializer.serialize_seq(Some(2))?;
146                seq.serialize_element("file_size_error")?;
147                seq.serialize_element(&[min,max])?;
148                seq.end()
149            }
150            ValidationError::Custom(a) => {
151                let mut seq = serializer.serialize_seq(Some(2))?;
152                seq.serialize_element("validate_error")?;
153                seq.serialize_element(&[a])?;
154                seq.end()
155            }
156        }
157    }
158}