Skip to content

Commit 4c80853

Browse files
committed
impl Equal
1 parent 9af07f5 commit 4c80853

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

src/rule/number.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
mod equal;
12
mod even;
23
mod greater;
34
mod less;

src/rule/number/equal.rs

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

src/rule/number/greater.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ mod test {
2929
greater_rule!((50, i8));
3030

3131
#[test]
32-
fn test_less_than_50i8_ok() {
32+
fn test_greater_than_50i8_ok() {
3333
let less_result = Greater50i8::new(100);
3434
assert!(less_result.is_ok());
3535
}
3636

3737
#[test]
38-
fn test_less_than_50i8_err() {
38+
fn test_greater_than_50i8_err() {
3939
let less_result = Greater50i8::new(50);
4040
assert!(less_result.is_err());
4141
}

0 commit comments

Comments
 (0)