1
- use refined_type:: rule:: composer:: { If , IfElse } ;
1
+ use refined_type:: rule:: composer:: { If , IfElse , Not } ;
2
2
use refined_type:: rule:: {
3
3
EmailStringRule , EvenRuleU8 , ExistsVecRule , ForAllVecRule , GreaterRuleU8 , HeadVecRule ,
4
- NonEmptyString , NonEmptyStringRule , NonEmptyVecRule ,
4
+ Ipv4AddrRule , LastVecRule , NonEmptyString , NonEmptyStringRule ,
5
5
} ;
6
6
use refined_type:: { And , Refined } ;
7
7
use serde:: Deserialize ;
@@ -24,9 +24,12 @@ pub struct Data {
24
24
age : Refined < If < GreaterRuleU8 < 10 > , EvenRuleU8 > > ,
25
25
friends : Refined <
26
26
IfElse <
27
- And ! [ ForAllVecRule <NonEmptyStringRule >, NonEmptyVecRule <String >] ,
27
+ And ! [
28
+ ForAllVecRule <NonEmptyStringRule >,
29
+ ExistsVecRule <Ipv4AddrRule <String >>
30
+ ] ,
28
31
HeadVecRule < EmailStringRule > ,
29
- ExistsVecRule < EmailStringRule > ,
32
+ LastVecRule < Not < EmailStringRule > > ,
30
33
> ,
31
34
> ,
32
35
}
@@ -36,10 +39,12 @@ fn main() {
36
39
{
37
40
"name": "John Doe",
38
41
"age": 20,
39
- "friends": ["[email protected] ", "Bob "]
42
+ "friends": ["[email protected] ", "192.168.11.1 "]
40
43
}
41
44
"# ;
42
45
43
- let data: Data = serde_json:: from_str ( data) . unwrap ( ) ;
44
- println ! ( "{}" , data
) ; // name: John Doe, age: 20, friends: Refined { value: ["[email protected] ", "Bob"] }
46
+ let data = serde_json:: from_str :: < Data > ( data) . map ( |n| n. to_string ( ) ) ;
47
+
48
+ // Ok("name: John Doe, age: 20, friends: Refined { value: [\"[email protected] \", \"192.168.11.1\"] }")
49
+ println ! ( "{:?}" , data) ;
45
50
}
0 commit comments