pub struct MutBorrow<T> { /* private fields */ }
Expand description
Wrapper type that allows creating a self-referential type that hold a mutable borrow &mut T
.
Example usage:
use self_cell::{self_cell, MutBorrow};
type MutStringRef<'a> = &'a mut String;
self_cell!(
struct MutStringCell {
owner: MutBorrow<String>,
#[covariant]
dependent: MutStringRef,
}
);
let mut cell = MutStringCell::new(MutBorrow::new("abc".into()), |owner| owner.borrow_mut());
cell.with_dependent_mut(|_owner, dependent| {
assert_eq!(dependent, &"abc");
dependent.pop();
assert_eq!(dependent, &"ab");
});
let recovered_owner: String = cell.into_owner().into_inner();
assert_eq!(recovered_owner, "ab");
Implementations§
source§impl<T> MutBorrow<T>
impl<T> MutBorrow<T>
sourcepub fn borrow_mut(&self) -> &mut T
pub fn borrow_mut(&self) -> &mut T
Obtains a mutable reference to the underlying data.
This function can only sensibly be used in the builder function. Afterwards, it’s impossible
to access the inner value, with the exception of MutBorrow::into_inner
.
§Panics
Will panic if called anywhere but in the dependent constructor. Will also panic if called more than once.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes self
and returns the wrapped value.
Trait Implementations§
Auto Trait Implementations§
impl<T> !Freeze for MutBorrow<T>
impl<T> !RefUnwindSafe for MutBorrow<T>
impl<T> Send for MutBorrow<T>where
T: Send,
impl<T> Unpin for MutBorrow<T>where
T: Unpin,
impl<T> UnwindSafe for MutBorrow<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more