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}