Skip to content

Commit 2d37c5a

Browse files
committed
implement range
1 parent d56c4c0 commit 2d37c5a

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/rule/number.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ mod less;
66
mod less_equal;
77
mod min_max;
88
mod odd;
9+
mod range;
910

1011
pub use equal::*;
1112
pub use even::*;
@@ -15,3 +16,4 @@ pub use less::*;
1516
pub use less_equal::*;
1617
pub use min_max::*;
1718
pub use odd::*;
19+
pub use range::*;

src/rule/number/range.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
macro_rules! define_range_rule {
2+
($t: ty) => {
3+
$crate::paste::item! {
4+
/// A type that holds a value satisfying the `MinMaxRule`
5+
pub type [<Range $t:camel>]<const FROM: $t, const UNTIL: $t> = $crate::Refined<[<RangeRule $t:camel>]<FROM, UNTIL>>;
6+
7+
/// Rule where the target value must be greater than or equal to `MIN` and less than `MAX`
8+
pub type [<RangeRule $t:camel>]<const FROM: $t, const UNTIL: $t> = $crate::And![
9+
$crate::rule::[<GreaterEqualRule $t:camel>]<FROM>,
10+
$crate::rule::[<LessRule $t:camel>]<UNTIL>
11+
];
12+
}
13+
};
14+
($t: ty, $($ts: ty),+) => {
15+
define_range_rule!($t);
16+
define_range_rule!($($ts), +);
17+
};
18+
}
19+
20+
define_range_rule!(i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize);
21+
22+
#[cfg(test)]
23+
mod test {
24+
use crate::rule::RangeI8;
25+
26+
#[test]
27+
fn test_range_i8_ok() {
28+
let range_result = RangeI8::<1, 10>::new(0);
29+
assert!(range_result.is_err());
30+
31+
let range_result = RangeI8::<1, 10>::new(1);
32+
assert!(range_result.is_ok());
33+
34+
let range_result = RangeI8::<1, 10>::new(10);
35+
assert!(range_result.is_err());
36+
}
37+
38+
#[test]
39+
fn test_range_i8_err() {
40+
let range_result = RangeI8::<1, 10>::new(-1);
41+
assert!(range_result.is_err());
42+
43+
let range_result = RangeI8::<1, 10>::new(11);
44+
assert!(range_result.is_err());
45+
}
46+
}

0 commit comments

Comments
 (0)