#option #result #map #reference #as_ref

ref-map

Helper trait for Option and Result to map references

1 unstable release

0.1.1 Jan 26, 2020

#833 in Rust patterns

Download history 31/week @ 2020-05-23 40/week @ 2020-05-30 49/week @ 2020-06-06 38/week @ 2020-06-13 56/week @ 2020-06-20 56/week @ 2020-06-27 39/week @ 2020-07-04 38/week @ 2020-07-11 34/week @ 2020-07-18 42/week @ 2020-07-25 37/week @ 2020-08-01 34/week @ 2020-08-08 53/week @ 2020-08-15 62/week @ 2020-08-22 48/week @ 2020-08-29 47/week @ 2020-09-05

522 downloads per month
Used in 2 crates

MIT license

10KB
77 lines

ref-map

Rust crate for a convenience trait on Option<T> and Result<T, E>.

Has no dependencies, and should work on any Rust release channel.

This crate contains two traits which can be imported to add the ref_map methods:

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.strim());

ref_map() is also provided for Result<T, E> for Ok, and ref_map_err() for Err.


Copyright (C) 2020 Ammon Smith

Available under the MIT License.


lib.rs:

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:

# use ref_map::*;
# use std::path::{Path, PathBuf};
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());

No runtime deps