summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-02-01 15:44:36 +0100
committerMatthias Beyer <mail@beyermatthias.de>2018-02-01 15:44:36 +0100
commit7ab7f8757f0d604ca60aa9237d8d216ed681032e (patch)
tree6725bc1938c50e1e09241fc05260c0d3145b2172
parent584a9ab765ab3f6ee606701612eb72c7e7d3acab (diff)
Add little convenience macro to make a new filter
-rw-r--r--src/filter.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/filter.rs b/src/filter.rs
index 9d92c6f..33d1511 100644
--- a/src/filter.rs
+++ b/src/filter.rs
@@ -323,6 +323,17 @@ pub trait Filter<N> {
}
}
+#[macro_export]
+macro_rules! make_filter {
+ ($type:ty => $over:ty => $expression:expr) => {
+ impl Filter<$over> for $type {
+ fn filter(&self, element: &$over) -> bool {
+ $expression(self, element)
+ }
+ }
+ }
+}
+
#[cfg(test)]
mod test {
@@ -448,6 +459,20 @@ mod test {
assert_eq!(r, vec![6, 7, 8, 9, 10, 11, 12, 13, 14]);
}
+
+ #[test]
+ fn filter_macro_generated() {
+ struct LowerThan(u64);
+ make_filter! {
+ LowerThan => u64 => |this: &LowerThan, e| e < &this.0
+ };
+
+ let lt = LowerThan(10);
+ assert_eq!(lt.filter(&0), true);
+ assert_eq!(lt.filter(&1), true);
+ assert_eq!(lt.filter(&17), false);
+ assert_eq!(lt.filter(&42), false);
+ }
}