Skip to content

Commit 118f425

Browse files
committed
impl less than;
1 parent c59785b commit 118f425

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 less;
23
mod odd;
34

45
pub use even::*;

src/rule/number/less.rs

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#[macro_export]
2+
macro_rules! less_rule {
3+
(($e: literal, $t: ty)) => {
4+
paste::item! {
5+
pub type [<Less $e $t>] = $crate::Refined<[<LessRule $e $t>]>;
6+
pub struct [<LessRule $e $t>];
7+
8+
impl $crate::rule::Rule for [<LessRule $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 less 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+
less_rule!((50, i8));
30+
31+
#[test]
32+
fn test_less_than_50i8_ok() {
33+
let less_result = Less50i8::new(1);
34+
assert!(less_result.is_ok());
35+
}
36+
37+
#[test]
38+
fn test_less_than_50i8_err() {
39+
let less_result = Less50i8::new(50);
40+
assert!(less_result.is_err());
41+
}
42+
}

0 commit comments

Comments
 (0)