reborrow
Emulate reborrowing for user types.
Given a &'a [mutable] reference of a &'b view over some owned object,
reborrowing it means getting an active &'a view over the owned object,
which renders the original reference inactive until it's dropped, at which point
the original reference becomes active again.
Examples:
This fails to compile since we can't use a non-Copy value after it's moved.
let mut x = 0;
let o = Some;
takes_mut_option; // `o` is moved here,
takes_mut_option; // so it can't be used here.
This can be worked around by unwrapping the option, reborrowing it, and then wrapping it again.
let mut x = 0;
let mut o = Some;
takes_mut_option; // "Reborrowing" the `Option`
takes_mut_option; // allows us to use it later on.
drop; // can still be used here
Using this crate, this can be shortened to
use ReborrowMut;
let mut x = 0;
let mut o = Some;
takes_mut_option; // "Reborrowing" the `Option`
takes_mut_option; // allows us to use it later on.
drop; // can still be used here