From b1be2fdf6ff9d446f688223477acec3760f24b70 Mon Sep 17 00:00:00 2001 From: Glenn Griffin Date: Mon, 9 Dec 2019 08:58:59 -0800 Subject: [PATCH] Add MapFn --- src/mappers.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/mappers.rs b/src/mappers.rs index 70da2b9..cf95b15 100644 --- a/src/mappers.rs +++ b/src/mappers.rs @@ -215,6 +215,26 @@ where } } +pub fn map_fn(f: F) -> MapFn { + MapFn(f) +} +pub struct MapFn(F); +impl Mapper for MapFn +where + F: Fn(&IN) -> bool + Send, +{ + type Out = bool; + + fn map(&mut self, input: &IN) -> bool { + self.0(input) + } +} +impl fmt::Debug for MapFn { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "MapFn") + } +} + #[cfg(test)] mod tests { use super::*; @@ -298,4 +318,13 @@ mod tests { assert_eq!(true, c.map("foobar")); assert_eq!(false, c.map("bar")); } + + #[test] + fn test_fn_mapper() { + let mut c = map_fn(|input: &u64| input % 2 == 0); + assert_eq!(true, c.map(&6)); + assert_eq!(true, c.map(&20)); + assert_eq!(true, c.map(&0)); + assert_eq!(false, c.map(&11)); + } }