tap
A simple crate exposing tapping functionality for all types, and extended
functionality for Option
, Result
& Future
. Often useful for logging.
Features
future
- Exposes the TapFutureOps
trait, providing tap_ready
,
tap_not_ready
& tap_err
(requires the futures crate).
Example
extern crate tap;
use tap::{TapOps, TapResultOps, TapOptionOps};
#[test]
fn filter_map() {
let values: &[Result<i32, &str>] = &[Ok(3), Err("foo"), Err("bar"), Ok(8)];
let _ = values.iter().filter_map(|result| {
result.tap_err(|error| println!("Invalid entry: {}", error)).ok()
});
}
#[test]
fn basic() {
let mut foo = 5;
if 10.tap(|v| foo += *v) > 0 {
assert_eq!(foo, 15);
}
let _: Result<i32, i32> = Err(5).tap_err(|e| foo = *e);
assert_eq!(foo, 5);
let _: Option<i32> = None.tap_none(|| foo = 10);
assert_eq!(foo, 10);
}