@@ -5,6 +5,7 @@ mod test_dto_creation {
5
5
use serde:: { Deserialize , Serialize } ;
6
6
#[ allow( unused) ]
7
7
use std:: str:: FromStr ;
8
+ use validator:: { Validate , ValidationErrors } ;
8
9
#[ allow( unused) ]
9
10
10
11
fn concat_str ( s1 : & str , s2 : & str ) -> String {
@@ -21,20 +22,31 @@ mod test_dto_creation {
21
22
#[ mapper(
22
23
dto="CustomDtoWithAttribute" ,
23
24
no_builder=true ,
24
- map=[ ( "email" , false , [ "#[serde(rename = \" email_address\" )]" ] ) ] ,
25
- derive=( Debug , Clone , Serialize , Deserialize ) ,
25
+ derive=( Debug , Clone , Serialize , Deserialize , Validate ) ,
26
+ map=[ ( "email" ,
27
+ false ,
28
+ [
29
+ "#[serde(rename = \" email_address\" )]" ,
30
+ "#[validate(email(message = \" Invalid Email Address\" ) ) ]" ,
31
+ ]
32
+ ) ] ,
26
33
new_fields=[
27
34
(
28
35
"name: String" ,
29
36
"concat_str( self.firstname.as_str(), self.lastname.as_str() )" ,
30
- [ "#[serde(rename = \" full_name\" )]" ] ,
37
+ [
38
+ "#[serde(rename = \" full_name\" )]" ,
39
+ "#[validate( length( max=3, message= \" Too short\" ) )]" ,
40
+ ] ,
31
41
) ,
32
42
(
33
43
"hidden_password: String" ,
34
44
r#""*".repeat( self.password.len() )"#
35
45
) ,
36
46
] ,
37
- macro_attr=[ "serde(rename_all = \" UPPERCASE\" )" ]
47
+ macro_attr=[
48
+ "#[serde(rename_all = \" UPPERCASE\" )]" ,
49
+ ]
38
50
) ]
39
51
struct User {
40
52
username : String ,
@@ -157,18 +169,27 @@ mod test_dto_creation {
157
169
let user = User {
158
170
firstname : "Dessalines" . into ( ) ,
159
171
lastname : "Jean Jacques" . into ( ) ,
160
- email : "dessalines@gmail .com" . into ( ) ,
172
+ email : "dessalinesgmail .com" . into ( ) ,
161
173
password : "hello123" . into ( ) ,
162
174
..User :: default ( )
163
175
} ;
176
+
164
177
let custom_dto: CustomDtoWithAttribute = user. clone ( ) . into ( ) ;
178
+
179
+ //Check validator
180
+ let validation_errors: ValidationErrors = custom_dto. validate ( ) . unwrap_err ( ) ;
181
+
182
+ assert ! ( validation_errors. 0 . contains_key( "email" ) ) ;
183
+ assert ! ( validation_errors. 0 . contains_key( "name" ) ) ;
184
+ println ! ( "Validation error = {}" , validation_errors. to_string( ) ) ;
165
185
assert_eq ! ( custom_dto. clone( ) . email. unwrap( ) , user. email) ;
166
186
167
187
// check json serialization
168
- let json_string = serde_json:: to_string ( & custom_dto) . unwrap ( ) ;
188
+ let json_string =
189
+ serde_json:: to_string ( & custom_dto) . expect ( "Failed to Json deserialize custom_dto" ) ;
169
190
assert_eq ! (
170
191
json_string,
171
- r#"{"email_address":"dessalines@gmail .com","full_name":"Dessalines Jean Jacques","HIDDEN_PASSWORD":"********"}"#
192
+ r#"{"email_address":"dessalinesgmail .com","full_name":"Dessalines Jean Jacques","HIDDEN_PASSWORD":"********"}"#
172
193
) ;
173
194
}
174
195
}
0 commit comments