1- use refined_type:: rule:: composer:: { If , IfElse } ;
1+ use refined_type:: rule:: composer:: { If , IfElse , Not } ;
22use refined_type:: rule:: {
33 EmailStringRule , EvenRuleU8 , ExistsVecRule , ForAllVecRule , GreaterRuleU8 , HeadVecRule ,
4- NonEmptyString , NonEmptyStringRule , NonEmptyVecRule ,
4+ Ipv4AddrRule , LastVecRule , NonEmptyString , NonEmptyStringRule ,
55} ;
66use refined_type:: { And , Refined } ;
77use serde:: Deserialize ;
@@ -24,9 +24,12 @@ pub struct Data {
2424 age : Refined < If < GreaterRuleU8 < 10 > , EvenRuleU8 > > ,
2525 friends : Refined <
2626 IfElse <
27- And ! [ ForAllVecRule <NonEmptyStringRule >, NonEmptyVecRule <String >] ,
27+ And ! [
28+ ForAllVecRule <NonEmptyStringRule >,
29+ ExistsVecRule <Ipv4AddrRule <String >>
30+ ] ,
2831 HeadVecRule < EmailStringRule > ,
29- ExistsVecRule < EmailStringRule > ,
32+ LastVecRule < Not < EmailStringRule > > ,
3033 > ,
3134 > ,
3235}
@@ -36,10 +39,12 @@ fn main() {
3639 {
3740 "name": "John Doe",
3841 "age": 20,
39- "friends": ["[email protected] ", "Bob "] 42+ "friends": ["[email protected] ", "192.168.11.1 "] 4043 }
4144 "# ;
4245
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) ;
4550}
0 commit comments