tap

Documentation crates.io version Language (Rust)

A simple crate exposing tapping functionality for all types, and extended functionality for Option, Result & Future. Often useful for logging.

Features

Example

```rust extern crate tap;

use tap::{TapOps, TapResultOps, TapOptionOps};

[test]

fn filter_map() { let values: &[Result] = &[Ok(3), Err("foo"), Err("bar"), Ok(8)];

let _ = values.iter().filter_map(|result| {
    // It is especially useful in filter maps, allowing error information to
    // be logged/printed before the information is discarded.
    result.tap_err(|error| println!("Invalid entry: {}", error)).ok()
});

}

[test]

fn basic() { let mut foo = 5;

// The `tap` extension can be used on all types
if 10.tap(|v| foo += *v) > 0 {
    assert_eq!(foo, 15);
}

// Results have `tap_err` & `tap_ok` available.
let _: Result<i32, i32> = Err(5).tap_err(|e| foo = *e);
assert_eq!(foo, 5);

// Options have `tap_some` & `tap_none` available.
let _: Option<i32> = None.tap_none(|| foo = 10);
assert_eq!(foo, 10);

}

```