Skip to content

Commit 635849f

Browse files
committed
update README
1 parent f693cb3 commit 635849f

File tree

2 files changed

+96
-5
lines changed

2 files changed

+96
-5
lines changed

README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,58 @@ fn not_example() -> Result<(), Error<u8>> {
196196
}
197197
```
198198

199+
### 4: `If` Rule Composer
200+
201+
`If` Rule Composer is a rule that applies a specific rule only when a certain condition is met.
202+
203+
```rust
204+
type Target = Refined<If<GreaterEqualRuleI8<10>, EvenRuleI8>>;
205+
206+
fn if_example() -> Result<(), Error<i8>> {
207+
let target = Target::new(8)?;
208+
assert_eq!(target.into_value(), 8);
209+
210+
let target = Target::new(9)?;
211+
assert_eq!(target.into_value(), 9);
212+
213+
let target = Target::new(10)?;
214+
assert_eq!(target.into_value(), 10);
215+
216+
let target = Target::new(11);
217+
assert!(target.is_err());
218+
219+
Ok(())
220+
}
221+
```
222+
223+
### 5: `IfElse` Rule Composer
224+
225+
`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.
226+
227+
```rust
228+
type Target = Refined<IfElse<GreaterEqualRuleI8<10>, EvenRuleI8, OddRuleI8>>;
229+
230+
fn if_else_example() -> Result<(), Error<i8>> {
231+
let target = Target::new(8);
232+
assert!(target.is_err());
233+
234+
let target = Target::new(9)?;
235+
assert_eq!(target.into_value(), 9);
236+
237+
let target = Target::new(10)?;
238+
assert_eq!(target.into_value(), 10);
239+
240+
let target = Target::new(11);
241+
assert!(target.is_err());
242+
243+
Ok(())
244+
}
245+
```
246+
247+
### 6: Other Rule Composer
248+
249+
`Equiv`, `Nand`, `Nor` and `Xor` are also available.
250+
199251
# Number
200252

201253
## `MinMax`

tests/read_me.rs

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ use serde::{Deserialize, Serialize};
22
use serde_json::json;
33

44
use refined_type::result::Error;
5-
use refined_type::rule::composer::Not;
5+
use refined_type::rule::composer::{If, IfElse, Not};
66
use 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
};
1213
use 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

Comments
 (0)