The Ref
and RefMut
types in std::cell
each have a map
method that create
a new Ref
(RefMut
) that borrows something (a sub-component) inside of a RefCell
.
When that component may or may not be there, you may find yourself checking for its precense twice:
# use ;
# use HashMap;
This crate define ref_filter_map
and ref_mut_filter_map
functions
that are a lot like Ref::map
and RefMut::map
,
but return Option
and take closures that return Option
.
Internally they use a raw pointer and some unsafe
code,
but the API they provide is believed to be safe.
This was once part of std::cell
but has been deprecated there since it makes Option
too much of a special case.
https://github.com/rust-lang/rust/pull/25747 https://github.com/rust-lang/rust/issues/27746