Expand description
Convenience methods when dealing with references of Options and Results.
This crate introduces a pair of 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());Additionally, the crate provides the OptionStringRef trait, which allows
painlessly borrowing a Option<String> or Option<Cow<str>> as Option<&str>:
// Easily get a borrowed version for use
let string_one: Option<String> = Some(String::from("foo"));
let borrowed: Option<&str> = string_one.as_str();
// Same deal with Cow<str>
let string_two: Option<Cow<str>> = Some(Cow::Owned(String::from("bar")));
let borrowed: Option<&str> = string_two.as_str();Traitsยง
- Option
RefMap - Extension trait for
Option. Adds theref_map()extension method ontoOption. - Option
String Ref - Extension trait for optional string types.
Adds the
as_str()extension method onto owned stringOptionvalues. - Result
RefMap - Extension trait for
Result. Adds theref_map()andref_map_err()extension methods ontoResult.