pub trait OptionInsertExt<T> {
// Required method
fn get_or_try_insert_with<F, E>(&mut self, f: F) -> Result<&mut T, E>
where F: FnOnce() -> Result<T, E>;
}
Expand description
Extends Option
with get_or_try_insert_with
.
Required Methods§
Sourcefn get_or_try_insert_with<F, E>(&mut self, f: F) -> Result<&mut T, E>
fn get_or_try_insert_with<F, E>(&mut self, f: F) -> Result<&mut T, E>
If the option is None
, computes the value from f
. If f
returns
Ok
, inserts the value. If f
returns Err
, returns the error. If
there is no error, returns a mutable reference to the contained value.
§Examples
use try_insert_ext::OptionInsertExt;
let mut x = None;
{
let e: Result<&mut u32, ()> = x.get_or_try_insert_with(|| Err(()));
assert!(e.is_err());
let y: Result<&mut u32, ()> = x.get_or_try_insert_with(|| Ok(5));
assert_eq!(y, Ok(&mut 5));
*y.unwrap() = 7;
}
assert_eq!(x, Some(7));
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.