#reference #options #map #result #as-ref

ref-map

Helper trait for Option and Result to map references

3 releases

0.1.3 Aug 15, 2021
0.1.2 Jan 16, 2021
0.1.1 Jan 26, 2020

#2641 in Rust patterns

Download history 124/week @ 2023-11-18 166/week @ 2023-11-25 87/week @ 2023-12-02 125/week @ 2023-12-09 129/week @ 2023-12-16 18/week @ 2023-12-23 48/week @ 2023-12-30 94/week @ 2024-01-06 111/week @ 2024-01-13 105/week @ 2024-01-20 134/week @ 2024-01-27 127/week @ 2024-02-03 145/week @ 2024-02-10 98/week @ 2024-02-17 123/week @ 2024-02-24 137/week @ 2024-03-02

533 downloads per month
Used in 4 crates

MIT license

10KB
78 lines

ref-map

Build Status

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

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

Three methods are provided, ref_map() for Some(_) and Ok(_), and ref_map_err() for Err(_). This allows easily mapping borrowed values from maybe values.

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

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


Copyright (C) 2020-2021 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:

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