diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2018-02-01 15:44:36 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2018-02-01 15:44:36 +0100 |
commit | 7ab7f8757f0d604ca60aa9237d8d216ed681032e (patch) | |
tree | 6725bc1938c50e1e09241fc05260c0d3145b2172 | |
parent | 584a9ab765ab3f6ee606701612eb72c7e7d3acab (diff) |
Add little convenience macro to make a new filter
-rw-r--r-- | src/filter.rs | 25 |
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); + } } |