Skip to content

Commit 9af07f5

Browse files
committed
impl Greater Than
1 parent 118f425 commit 9af07f5

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/rule/number.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod even;
2+
mod greater;
23
mod less;
34
mod odd;
45

src/rule/number/greater.rs

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#[macro_export]
2+
macro_rules! greater_rule {
3+
(($e: literal, $t: ty)) => {
4+
paste::item! {
5+
pub type [<Greater $e $t>] = $crate::Refined<[<GreaterRule $e $t>]>;
6+
pub struct [<GreaterRule $e $t>];
7+
8+
impl $crate::rule::Rule for [<GreaterRule $e $t>] {
9+
type Item = $t;
10+
11+
fn validate(target: Self::Item) -> Result<Self::Item, $crate::result::Error<Self::Item>> {
12+
if target > $e {
13+
Ok(target)
14+
} else {
15+
Err($crate::result::Error::new(format!("{} is not greater than {}", target, $e), target))
16+
}
17+
}
18+
}
19+
}
20+
};
21+
($t: ty, $($ts: ty),+) => {
22+
odd_rule! {$t}
23+
odd_rule! {$($ts), +}
24+
};
25+
}
26+
27+
#[cfg(test)]
28+
mod test {
29+
greater_rule!((50, i8));
30+
31+
#[test]
32+
fn test_less_than_50i8_ok() {
33+
let less_result = Greater50i8::new(100);
34+
assert!(less_result.is_ok());
35+
}
36+
37+
#[test]
38+
fn test_less_than_50i8_err() {
39+
let less_result = Greater50i8::new(50);
40+
assert!(less_result.is_err());
41+
}
42+
}

0 commit comments

Comments
 (0)