[][src]Crate ref_map

Convenience methods when dealing with references of Options and Results.

It introduces two traits, OptionRefMap and ResultRefMap, which add methods to their respective standard library enums to avoid needing to add .as_ref() before any .map() methods on their value.

This is useful when you want to borrow from an Option or Result but want to avoid the boilerplate of first getting the references to the values contained inside.

use ref_map::*;

let string: Option<String> = Some("hello world\n".into());

// Without ref-map:
// the .as_ref() is necessary because otherwise it tries to consume the String
let message: Option<&str> = string.as_ref().map(|s| s.trim());

// With ref-map:
let message: Option<&str> = string.ref_map(|s| s.trim());

Similarly, .ref_map() and .ref_map_err() are available for Results to mimic their .map() and .map_err() methods:

let answer: Result<PathBuf, String> = Ok(PathBuf::from("/test"));

// Mapping borrowed Ok(_) to another type
let path: Result<&Path, &String> = answer.ref_map(|p| p.as_path());

// Mapping borrower Err(_)
let error: Result<&PathBuf, &str> = answer.ref_map_err(|e| e.as_str());

Traits

OptionRefMap

Adds the ref_map() extension method onto Option.

ResultRefMap

Adds the ref_map() and ref_map_err() extension methods onto Result.