@@ -135,9 +135,11 @@ By using Rule Composer, composite rules can be easily created.
135
135
136
136
` And ` Rule Composer is a rule that satisfies both of the two rules.
137
137
It is generally effective when you want to narrow down the condition range.
138
+
138
139
``` rust
139
140
type Target = Refined <And! [EvenRuleU8 , MinMaxRuleU8 <0 , 100 >]>;
140
141
```
142
+
141
143
``` rust
142
144
fn and_example () -> Result <(), Error <u8 >> {
143
145
let target = Target :: new (50 )? ;
@@ -158,6 +160,7 @@ It is generally effective when you want to expand the condition range.
158
160
``` rust
159
161
type Target = Refined <Or! [LessRuleU8 <10 >, GreaterRuleU8 <50 >]>;
160
162
```
163
+
161
164
``` rust
162
165
fn or_example () -> Result <(), Error <u8 >> {
163
166
let target = Target :: new (5 )? ;
@@ -184,6 +187,7 @@ It is generally effective when you want to discard only certain situations.
184
187
``` rust
185
188
type Target = Refined <Not <EqualRuleU8 <50 >>>;
186
189
```
190
+
187
191
``` rust
188
192
fn not_example () -> Result <(), Error <u8 >> {
189
193
let target = Target :: new (49 )? ;
@@ -225,7 +229,8 @@ fn if_example() -> Result<(), Error<i8>> {
225
229
226
230
### 5: ` IfElse ` Rule Composer
227
231
228
- ` IfElse ` Rule Composer is a rule that applies a specific rule when a certain condition is met and another rule when it is not met.
232
+ ` IfElse ` Rule Composer is a rule that applies a specific rule when a certain condition is met and another rule when it
233
+ is not met.
229
234
230
235
``` rust
231
236
type Target = Refined <IfElse <GreaterEqualRuleI8 <10 >, EvenRuleI8 , OddRuleI8 >>;
@@ -396,7 +401,6 @@ fn range_example() -> Result<(), Error<u8>> {
396
401
}
397
402
```
398
403
399
-
400
404
# Iterator
401
405
402
406
` refined_type ` has several useful refined types for Iterators.
@@ -555,9 +559,121 @@ fn example_17() -> anyhow::Result<()> {
555
559
}
556
560
```
557
561
562
+ ## ` CountEqual `
563
+
564
+ ` CountEqual ` is a type that signifies the number of elements that satisfy the rule is a specific number.
565
+
566
+ ``` rust
567
+ fn count_equal_example () -> Result <(), Error <Vec <i32 >>> {
568
+ let table = vec! [
569
+ (vec! [" good morning" . to_string (), " hello" . to_string ()], false ),
570
+ (vec! [" good morning" . to_string (), "" . to_string ()], true ),
571
+ (vec! ["" . to_string (), " hello" . to_string ()], true ),
572
+ (vec! ["" . to_string (), "" . to_string ()], false ),
573
+ ];
574
+
575
+ for (value , expected ) in table {
576
+ let refined = CountEqualVec :: <1 , NonEmptyStringRule >:: new (value . clone ());
577
+ assert_eq! (refined . is_ok (), expected );
578
+ }
579
+
580
+ Ok (())
581
+ }
582
+ ```
583
+
584
+ ## ` CountLess `
585
+
586
+ ` CountLess ` is a type that signifies the number of elements that satisfy the rule is less than a specific number.
587
+
588
+ ``` rust
589
+ fn count_less_example () -> Result <(), Error <Vec <i32 >>> {
590
+ let table = vec! [
591
+ (vec! [" good morning" . to_string (), " hello" . to_string ()], false ),
592
+ (vec! [" good morning" . to_string (), "" . to_string ()], true ),
593
+ (vec! ["" . to_string (), " hello" . to_string ()], true ),
594
+ (vec! ["" . to_string (), "" . to_string ()], true ),
595
+ ];
596
+
597
+ for (value , expected ) in table {
598
+ let refined = CountLessVec :: <2 , NonEmptyStringRule >:: new (value . clone ());
599
+ assert_eq! (refined . is_ok (), expected );
600
+ }
601
+
602
+ Ok (())
603
+ }
604
+ ```
605
+
606
+ ## ` CountGreater `
607
+
608
+ ` CountGreater ` is a type that signifies the number of elements that satisfy the rule is greater than a specific number.
609
+
610
+ ``` rust
611
+ fn count_greater_example () -> Result <(), Error <Vec <i32 >>> {
612
+ let table = vec! [
613
+ (vec! [" good morning" . to_string (), " hello" . to_string ()], true ),
614
+ (vec! [" good morning" . to_string (), "" . to_string ()], false ),
615
+ (vec! ["" . to_string (), " hello" . to_string ()], false ),
616
+ (vec! ["" . to_string (), "" . to_string ()], false ),
617
+ ];
618
+
619
+ for (value , expected ) in table {
620
+ let refined = CountGreaterVec :: <1 , NonEmptyStringRule >:: new (value . clone ());
621
+ assert_eq! (refined . is_ok (), expected );
622
+ }
623
+
624
+ Ok (())
625
+ }
626
+ ```
627
+
628
+ ## ` CountLessEqual `
629
+
630
+ ` CountLessEqual ` is a type that signifies the number of elements that satisfy the rule is less than or equal to a
631
+ specific number.
632
+
633
+ ``` rust
634
+ fn count_less_equal_example () -> Result <(), Error <Vec <i32 >>> {
635
+ let table = vec! [
636
+ (vec! [" good morning" . to_string (), " hello" . to_string ()], true ),
637
+ (vec! [" good morning" . to_string (), "" . to_string ()], true ),
638
+ (vec! ["" . to_string (), " hello" . to_string ()], true ),
639
+ (vec! ["" . to_string (), "" . to_string ()], true ),
640
+ ];
641
+
642
+ for (value , expected ) in table {
643
+ let refined = CountLessEqualVec :: <2 , NonEmptyStringRule >:: new (value . clone ());
644
+ assert_eq! (refined . is_ok (), expected );
645
+ }
646
+
647
+ Ok (())
648
+ }
649
+ ```
650
+
651
+ ## ` CountGreaterEqual `
652
+
653
+ ` CountGreaterEqual ` is a type that signifies the number of elements that satisfy the rule is greater than or equal to a
654
+ specific number.
655
+
656
+ ``` rust
657
+ fn count_greater_equal_example () -> Result <(), Error <Vec <i32 >>> {
658
+ let table = vec! [
659
+ (vec! [" good morning" . to_string (), " hello" . to_string ()], true ),
660
+ (vec! [" good morning" . to_string (), "" . to_string ()], true ),
661
+ (vec! ["" . to_string (), " hello" . to_string ()], true ),
662
+ (vec! ["" . to_string (), "" . to_string ()], false ),
663
+ ];
664
+
665
+ for (value , expected ) in table {
666
+ let refined = CountGreaterEqualVec :: <1 , NonEmptyStringRule >:: new (value . clone ());
667
+ assert_eq! (refined . is_ok (), expected );
668
+ }
669
+
670
+ Ok (())
671
+ }
672
+ ```
673
+
558
674
## ` Reverse `
559
675
560
- ` Reverse ` is a rule that applies a specific rule to all elements in the Iterator in reverse order.
676
+ ` Reverse ` is a rule that applies a specific rule to all elements in the Iterator in reverse order.
561
677
562
678
``` rust
563
679
fn example_18 () -> Result <(), Error <Vec <i32 >>> {
@@ -625,6 +741,7 @@ impl<ITEM> SkipOption for NoSkip<ITEM> {
625
741
You can impose constraints on objects that have a length, such as ` String ` or ` Vec ` .
626
742
627
743
## ` LengthMinMax `
744
+
628
745
` LengthMinMax ` is a type that signifies the target has a length between a certain number and another number.
629
746
630
747
``` rust
@@ -645,6 +762,7 @@ fn length_min_max_example() -> Result<(), Error<String>> {
645
762
```
646
763
647
764
## ` LengthGreater `
765
+
648
766
` LengthGreater ` is a type that signifies the target has a length greater than a certain number.
649
767
650
768
``` rust
@@ -662,6 +780,7 @@ fn length_greater_example() -> Result<(), Error<String>> {
662
780
```
663
781
664
782
## ` LengthLess `
783
+
665
784
` LengthLess ` is a type that signifies the target has a length less than a certain number.
666
785
667
786
``` rust
@@ -679,6 +798,7 @@ fn length_less_example() -> Result<(), Error<String>> {
679
798
```
680
799
681
800
## ` LengthEqual `
801
+
682
802
` LengthEqual ` is a type that signifies the target has a length equal to a certain number.
683
803
684
804
``` rust
0 commit comments