Struct RefMut
pub struct RefMut<'b, T: ?Sized + 'b> { pub(in ::cell) value: NonNull<T>, pub(in ::cell) borrow: BorrowRefMut<'b>, pub(in ::cell) marker: PhantomData<&'b mut T> }
A wrapper type for a mutably borrowed value from a RefCell<T>.
See the module-level documentation for more.
Fields
value: NonNull<T>borrow: BorrowRefMut<'b>marker: PhantomData<&'b mut T>
Implementations
impl<'b, T: ?Sized> RefMut<'b, T>
fn map<U: ?Sized, F>(orig: RefMut<'b, T>, f: F) -> RefMut<'b, U> where F: FnOnce(&mut T) -> &mut U,Makes a new
RefMutfor a component of the borrowed data, e.g., an enum variant.The
RefCellis already mutably borrowed, so this cannot fail.This is an associated function that needs to be used as
RefMut::map(...). A method would interfere with methods of the same name on the contents of aRefCellused throughDeref.Examples
use ; let c = new; assert_eq!;fn filter_map<U: ?Sized, F>(orig: RefMut<'b, T>, f: F) -> Result<RefMut<'b, U>, Self> where F: FnOnce(&mut T) -> Option<&mut U>,Makes a new
RefMutfor an optional component of the borrowed data. The original guard is returned as anErr(..)if the closure returnsNone.The
RefCellis already mutably borrowed, so this cannot fail.This is an associated function that needs to be used as
RefMut::filter_map(...). A method would interfere with methods of the same name on the contents of aRefCellused throughDeref.Examples
use ; let c = new; assert_eq!;fn try_map<U: ?Sized, E>(orig: RefMut<'b, T>, f: impl FnOnce(&mut T) -> Result<&mut U, E>) -> Result<RefMut<'b, U>, (Self, E)>Tries to makes a new
RefMutfor a component of the borrowed data. On failure, the original guard is returned alongside with the error returned by the closure.The
RefCellis already mutably borrowed, so this cannot fail.This is an associated function that needs to be used as
RefMut::try_map(...). A method would interfere with methods of the same name on the contents of aRefCellused throughDeref.Examples
use ; use ; let c = new; assert_eq!; let c = new; let b1: = c.borrow_mut; let b2: = try_map; let = b2.unwrap_err; assert_eq!; assert_eq!;fn map_split<U: ?Sized, V: ?Sized, F>(orig: RefMut<'b, T>, f: F) -> (RefMut<'b, U>, RefMut<'b, V>) where F: FnOnce(&mut T) -> (&mut U, &mut V),Splits a
RefMutinto multipleRefMuts for different components of the borrowed data.The underlying
RefCellwill remain mutably borrowed until both returnedRefMuts go out of scope.The
RefCellis already mutably borrowed, so this cannot fail.This is an associated function that needs to be used as
RefMut::map_split(...). A method would interfere with methods of the same name on the contents of aRefCellused throughDeref.Examples
use ; let cell = new; let borrow = cell.borrow_mut; let = map_split; assert_eq!; assert_eq!; begin.copy_from_slice; end.copy_from_slice;const fn leak(orig: RefMut<'b, T>) -> &'b mut TConverts into a mutable reference to the underlying data.
The underlying
RefCellcan not be borrowed from again and will always appear already mutably borrowed, making the returned reference the only to the interior.This is an associated function that needs to be used as
RefMut::leak(...). A method would interfere with methods of the same name on the contents of aRefCellused throughDeref.Examples
use ; let cell = new; let value = leak; assert_eq!; *value = 1; assert!;
Trait Implementations
impl<'b, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<RefMut<'b, U>> for RefMut<'b, T>
impl<'b, T: ?Sized> PinSafePointer for RefMut<'b, T>
impl<T: ?Sized + Debug> Debug for RefMut<'_, T>
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T: ?Sized + Display> Display for RefMut<'_, T>
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T: ?Sized> Deref for RefMut<'_, T>
type Target = T;fn deref(&self) -> &T
impl<T: ?Sized> DerefMut for RefMut<'_, T>
fn deref_mut(&mut self) -> &mut T
impl<T: ?Sized> DerefPure for RefMut<'_, T>
Auto Trait Implementations
impl<'b, T> !RefUnwindSafe for RefMut<'b, T>
impl<'b, T> !Send for RefMut<'b, T>
impl<'b, T> !Sync for RefMut<'b, T>
impl<'b, T> !UnwindSafe for RefMut<'b, T>
impl<'b, T> Freeze for RefMut<'b, T>
where
NonNull<T>: Freeze,
PhantomData<&'b mut T>: Freeze,
T: ?Sized,
impl<'b, T> Unpin for RefMut<'b, T>
where
NonNull<T>: Unpin,
PhantomData<&'b mut T>: Unpin,
T: ?Sized,
impl<'b, T> UnsafeUnpin for RefMut<'b, T>
where
NonNull<T>: UnsafeUnpin,
PhantomData<&'b mut T>: UnsafeUnpin,
T: ?Sized,
Blanket Implementations
impl<P, T> Receiver for RefMut<'b, T>
where
P: Deref<Target = T> + ?Sized,
T: ?Sized,
type Target = T;
impl<T> Any for RefMut<'b, T>
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for RefMut<'b, T>
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for RefMut<'b, T>
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> From<T> for RefMut<'b, T>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> SizeHint for RefMut<'b, T>
where
T: ?Sized,
fn lower_bound(&self) -> usizefn upper_bound(&self) -> Option<usize>
impl<T> SizedTypeProperties for RefMut<'b, T>
impl<T, U> Into<U> for RefMut<'b, T>
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for RefMut<'b, T>
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for RefMut<'b, T>
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>