97
97
mod test {
98
98
use crate :: refined:: Refined ;
99
99
use crate :: result:: Error ;
100
- use crate :: rule:: NonEmptyStringRule ;
100
+ use crate :: rule:: { NonEmptyString , NonEmptyStringRule , NonEmptyVec } ;
101
101
use serde:: { Deserialize , Serialize } ;
102
102
use serde_json:: json;
103
103
@@ -180,15 +180,16 @@ mod test {
180
180
}
181
181
182
182
#[ test]
183
- fn test_refined_deserialize_json_ok_struct ( ) -> anyhow:: Result < ( ) > {
184
- type NonEmptyString = Refined < NonEmptyStringRule > ;
183
+ fn test_refined_deserialize_json_ok_1 ( ) -> anyhow:: Result < ( ) > {
185
184
#[ derive( Debug , Eq , PartialEq , Deserialize ) ]
186
185
struct Human {
187
186
name : NonEmptyString ,
187
+ friends : NonEmptyVec < String > ,
188
188
age : u8 ,
189
189
}
190
190
let json = json ! { {
191
191
"name" : "john" ,
192
+ "friends" : [ "tom" , "taro" ] ,
192
193
"age" : 8
193
194
} }
194
195
. to_string ( ) ;
@@ -197,14 +198,55 @@ mod test {
197
198
198
199
let expected = Human {
199
200
name : NonEmptyString :: new ( "john" . to_string ( ) ) ?,
201
+ friends : NonEmptyVec :: new ( vec ! [ "tom" . to_string( ) , "taro" . to_string( ) ] ) ?,
200
202
age : 8 ,
201
203
} ;
202
204
assert_eq ! ( actual, expected) ;
203
205
Ok ( ( ) )
204
206
}
205
207
206
208
#[ test]
207
- fn test_refined_deserialize_json_err ( ) -> anyhow:: Result < ( ) > {
209
+ fn test_refined_deserialize_json_err_1 ( ) -> anyhow:: Result < ( ) > {
210
+ #[ derive( Debug , Eq , PartialEq , Deserialize ) ]
211
+ struct Human {
212
+ name : NonEmptyString ,
213
+ friends : NonEmptyVec < String > ,
214
+ age : u8 ,
215
+ }
216
+ let json = json ! { {
217
+ "name" : "john" ,
218
+ "friends" : [ ] ,
219
+ "age" : 8
220
+ } }
221
+ . to_string ( ) ;
222
+
223
+ // because `friends` is empty vec
224
+ assert ! ( serde_json:: from_str:: <Human >( & json) . is_err( ) ) ;
225
+ Ok ( ( ) )
226
+ }
227
+
228
+ #[ test]
229
+ fn test_refined_deserialize_json_err_2 ( ) -> anyhow:: Result < ( ) > {
230
+ #[ derive( Debug , Eq , PartialEq , Deserialize ) ]
231
+ struct Human {
232
+ name : NonEmptyString ,
233
+ friends : NonEmptyVec < String > ,
234
+ age : u8 ,
235
+ }
236
+ let json = json ! { {
237
+ "name" : "" ,
238
+ "friends" : [ "tom" , "taro" ] ,
239
+ "age" : 8
240
+ } }
241
+ . to_string ( ) ;
242
+
243
+ // because `name` is empty string
244
+ assert ! ( serde_json:: from_str:: <Human >( & json) . is_err( ) ) ;
245
+ Ok ( ( ) )
246
+ }
247
+
248
+ #[ test]
249
+ fn test_refined_deserialize_json_err_3 ( ) -> anyhow:: Result < ( ) > {
208
250
let json = json ! ( "" ) . to_string ( ) ;
209
251
let result = serde_json:: from_str :: < Refined < NonEmptyStringRule > > ( & json) ;
210
252
assert ! ( result. is_err( ) ) ;
0 commit comments