@@ -2,12 +2,13 @@ use serde::{Deserialize, Serialize};
22use serde_json:: json;
33
44use refined_type:: result:: Error ;
5- use refined_type:: rule:: composer:: Not ;
5+ use refined_type:: rule:: composer:: { If , IfElse , Not } ;
66use refined_type:: rule:: {
7- EqualU8 , ExistsVec , ForAllVec , GreaterEqualU8 , GreaterU8 , HeadVec , IndexRuleVec , IndexVec ,
8- InitVec , LastVec , LengthDefinition , LengthEqual , LengthEqualRule , LengthGreater , LengthLess ,
9- LengthMinMax , LessEqualU8 , LessU8 , MinMaxU8 , NonEmptyString , NonEmptyStringRule , NonEmptyVec ,
10- NonEmptyVecDeque , RangeU8 , Reverse , Rule , SkipFirst , SkipVec , TailVec ,
7+ EqualU8 , EvenRuleI8 , ExistsVec , ForAllVec , GreaterEqualRuleI8 , GreaterEqualU8 , GreaterU8 ,
8+ HeadVec , IndexRuleVec , IndexVec , InitVec , LastVec , LengthDefinition , LengthEqual ,
9+ LengthEqualRule , LengthGreater , LengthLess , LengthMinMax , LessEqualU8 , LessU8 , MinMaxU8 ,
10+ NonEmptyString , NonEmptyStringRule , NonEmptyVec , NonEmptyVecDeque , OddRuleI8 , RangeU8 , Reverse ,
11+ Rule , SkipFirst , SkipVec , TailVec ,
1112} ;
1213use refined_type:: { And , Or , Refined } ;
1314
@@ -660,3 +661,41 @@ fn custom_length_example() -> Result<(), Error<Hello>> {
660661 assert_eq ! ( hello. into_value( ) , Hello ) ;
661662 Ok ( ( ) )
662663}
664+
665+ #[ test]
666+ fn if_example ( ) -> Result < ( ) , Error < i8 > > {
667+ type Target = Refined < If < GreaterEqualRuleI8 < 10 > , EvenRuleI8 > > ;
668+
669+ let target = Target :: new ( 8 ) ?;
670+ assert_eq ! ( target. into_value( ) , 8 ) ;
671+
672+ let target = Target :: new ( 9 ) ?;
673+ assert_eq ! ( target. into_value( ) , 9 ) ;
674+
675+ let target = Target :: new ( 10 ) ?;
676+ assert_eq ! ( target. into_value( ) , 10 ) ;
677+
678+ let target = Target :: new ( 11 ) ;
679+ assert ! ( target. is_err( ) ) ;
680+
681+ Ok ( ( ) )
682+ }
683+
684+ #[ test]
685+ fn if_else_example ( ) -> Result < ( ) , Error < i8 > > {
686+ type Target = Refined < IfElse < GreaterEqualRuleI8 < 10 > , EvenRuleI8 , OddRuleI8 > > ;
687+
688+ let target = Target :: new ( 8 ) ;
689+ assert ! ( target. is_err( ) ) ;
690+
691+ let target = Target :: new ( 9 ) ?;
692+ assert_eq ! ( target. into_value( ) , 9 ) ;
693+
694+ let target = Target :: new ( 10 ) ?;
695+ assert_eq ! ( target. into_value( ) , 10 ) ;
696+
697+ let target = Target :: new ( 11 ) ;
698+ assert ! ( target. is_err( ) ) ;
699+
700+ Ok ( ( ) )
701+ }
0 commit comments