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