take_mut

Function take_or_recover

Source
pub fn take_or_recover<T, F, R>(mut_ref: &mut T, recover: R, closure: F)
where F: FnOnce(T) -> T, R: FnOnce() -> T,
Expand description

Allows use of a value pointed to by &mut T as though it was owned, as long as a T is made available afterwards.

The closure must return a valid T.

§Important

Will replace &mut T with recover if the closure panics, then continues the panic.

§Example

struct Foo;
let mut foo = Foo;
take_mut::take_or_recover(&mut foo, || Foo, |foo| {
    // Can now consume the Foo, and provide a new value later
    drop(foo);
    // Do more stuff
    Foo // Return new Foo from closure, which goes back into the &mut Foo
});