3 releases
0.1.3 | Aug 15, 2021 |
---|---|
0.1.2 | Jan 16, 2021 |
0.1.1 | Jan 26, 2020 |
#2638 in Rust patterns
886 downloads per month
Used in 4 crates
10KB
78 lines
ref-map
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 Option
s and Result
s.
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 Result
s 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());