RefMut

Struct RefMut 

1.0.0 · Source
pub struct RefMut<'b, T>
where T: 'b + ?Sized,
{ /* private fields */ }
Expand description

A wrapper type for a mutably borrowed value from a RefCell<T>.

See the module-level documentation for more.

Implementations§

Source§

impl<'b, T> RefMut<'b, T>
where T: ?Sized,

1.8.0 · Source

pub fn map<U, F>(orig: RefMut<'b, T>, f: F) -> RefMut<'b, U>
where F: FnOnce(&mut T) -> &mut U, U: ?Sized,

Makes a new RefMut for a component of the borrowed data, e.g., an enum variant.

The RefCell is 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 a RefCell used through Deref.

§Examples
use std::cell::{RefCell, RefMut};

let c = RefCell::new((5, 'b'));
{
    let b1: RefMut<'_, (u32, char)> = c.borrow_mut();
    let mut b2: RefMut<'_, u32> = RefMut::map(b1, |t| &mut t.0);
    assert_eq!(*b2, 5);
    *b2 = 42;
}
assert_eq!(*c.borrow(), (42, 'b'));
1.63.0 · Source

pub fn filter_map<U, F>( orig: RefMut<'b, T>, f: F, ) -> Result<RefMut<'b, U>, RefMut<'b, T>>
where F: FnOnce(&mut T) -> Option<&mut U>, U: ?Sized,

Makes a new RefMut for an optional component of the borrowed data. The original guard is returned as an Err(..) if the closure returns None.

The RefCell is 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 a RefCell used through Deref.

§Examples
use std::cell::{RefCell, RefMut};

let c = RefCell::new(vec![1, 2, 3]);

{
    let b1: RefMut<'_, Vec<u32>> = c.borrow_mut();
    let mut b2: Result<RefMut<'_, u32>, _> = RefMut::filter_map(b1, |v| v.get_mut(1));

    if let Ok(mut b2) = b2 {
        *b2 += 2;
    }
}

assert_eq!(*c.borrow(), vec![1, 4, 3]);
Source

pub fn try_map<U, E>( orig: RefMut<'b, T>, f: impl FnOnce(&mut T) -> Result<&mut U, E>, ) -> Result<RefMut<'b, U>, (RefMut<'b, T>, E)>
where U: ?Sized,

🔬This is a nightly-only experimental API. (refcell_try_map)

Tries to makes a new RefMut for a component of the borrowed data. On failure, the original guard is returned alongside with the error returned by the closure.

The RefCell is 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 a RefCell used through Deref.

§Examples
#![feature(refcell_try_map)]
use std::cell::{RefCell, RefMut};
use std::str::{from_utf8_mut, Utf8Error};

let c = RefCell::new(vec![0x68, 0x65, 0x6C, 0x6C, 0x6F]);
{
    let b1: RefMut<'_, Vec<u8>> = c.borrow_mut();
    let b2: Result<RefMut<'_, str>, _> = RefMut::try_map(b1, |v| from_utf8_mut(v));
    let mut b2 = b2.unwrap();
    assert_eq!(&*b2, "hello");
    b2.make_ascii_uppercase();
}
assert_eq!(*c.borrow(), "HELLO".as_bytes());

let c = RefCell::new(vec![0xFF]);
let b1: RefMut<'_, Vec<u8>> = c.borrow_mut();
let b2: Result<_, (RefMut<'_, Vec<u8>>, Utf8Error)> = RefMut::try_map(b1, |v| from_utf8_mut(v));
let (b3, e) = b2.unwrap_err();
assert_eq!(*b3, vec![0xFF]);
assert_eq!(e.valid_up_to(), 0);
1.35.0 · Source

pub fn map_split<U, V, F>( orig: RefMut<'b, T>, f: F, ) -> (RefMut<'b, U>, RefMut<'b, V>)
where F: FnOnce(&mut T) -> (&mut U, &mut V), U: ?Sized, V: ?Sized,

Splits a RefMut into multiple RefMuts for different components of the borrowed data.

The underlying RefCell will remain mutably borrowed until both returned RefMuts go out of scope.

The RefCell is 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 a RefCell used through Deref.

§Examples
use std::cell::{RefCell, RefMut};

let cell = RefCell::new([1, 2, 3, 4]);
let borrow = cell.borrow_mut();
let (mut begin, mut end) = RefMut::map_split(borrow, |slice| slice.split_at_mut(2));
assert_eq!(*begin, [1, 2]);
assert_eq!(*end, [3, 4]);
begin.copy_from_slice(&[4, 3]);
end.copy_from_slice(&[2, 1]);
Source

pub const fn leak(orig: RefMut<'b, T>) -> &'b mut T

🔬This is a nightly-only experimental API. (cell_leak)

Converts into a mutable reference to the underlying data.

The underlying RefCell can 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 a RefCell used through Deref.

§Examples
#![feature(cell_leak)]
use std::cell::{RefCell, RefMut};
let cell = RefCell::new(0);

let value = RefMut::leak(cell.borrow_mut());
assert_eq!(*value, 0);
*value = 1;

assert!(cell.try_borrow_mut().is_err());

Trait Implementations§

1.0.0 · Source§

impl<T> Debug for RefMut<'_, T>
where T: Debug + ?Sized,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
1.0.0 (const: unstable) · Source§

impl<T> Deref for RefMut<'_, T>
where T: ?Sized,

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
1.0.0 (const: unstable) · Source§

impl<T> DerefMut for RefMut<'_, T>
where T: ?Sized,

Source§

fn deref_mut(&mut self) -> &mut T

Mutably dereferences the value.
1.20.0 · Source§

impl<T> Display for RefMut<'_, T>
where T: Display + ?Sized,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<T> SmartDisplay for RefMut<'_, T>
where T: SmartDisplay + ?Sized,

Source§

type Metadata = <T as SmartDisplay>::Metadata

User-provided metadata type.
Source§

fn metadata(&self, f: FormatterOptions) -> Metadata<'_, RefMut<'_, T>>

Compute any information needed to format the value. This must, at a minimum, determine the width of the value before any padding is added by the formatter. Read more
Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Format the value using the given formatter. This is the same as Display::fmt. Read more
Source§

fn fmt_with_metadata( &self, f: &mut Formatter<'_>, _metadata: Metadata<'_, Self>, ) -> Result<(), Error>

Format the value using the given formatter and metadata. The formatted output should have the width indicated by the metadata. This is before any padding is added by the formatter. Read more
Source§

impl SplitByteSlice for RefMut<'_, [u8]>

Source§

unsafe fn split_at_unchecked( self, mid: usize, ) -> (RefMut<'_, [u8]>, RefMut<'_, [u8]>)

Splits the slice at the midpoint, possibly omitting bounds checks. Read more
Source§

fn split_at(self, mid: usize) -> Result<(Self, Self), Self>

Attempts to split self at the midpoint. Read more
Source§

impl ByteSlice for RefMut<'_, [u8]>

Source§

impl<'b, T, U> CoerceUnsized<RefMut<'b, U>> for RefMut<'b, T>
where T: Unsize<U> + ?Sized, U: ?Sized,

Source§

impl<T> DerefPure for RefMut<'_, T>
where T: ?Sized,

Source§

impl<'b, T> PinCoerceUnsized for RefMut<'b, T>
where T: ?Sized,

Source§

impl<'a, T> StableDeref for RefMut<'a, T>
where T: ?Sized,

Auto Trait Implementations§

§

impl<'b, T> Freeze for RefMut<'b, T>
where T: ?Sized,

§

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> Unpin for RefMut<'b, T>
where T: ?Sized,

§

impl<'b, T> !UnwindSafe for RefMut<'b, T>

Blanket Implementations§

Source§

impl<T, A, P> Access<T> for P
where A: Access<T> + ?Sized, P: Deref<Target = A>,

Source§

type Guard = <A as Access<T>>::Guard

A guard object containing the value and keeping it alive. Read more
Source§

fn load(&self) -> <P as Access<T>>::Guard

The loading method. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Any for T
where T: Any,

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, A> DynAccess<T> for A
where A: Access<T>, <A as Access<T>>::Guard: 'static,

Source§

fn load(&self) -> DynGuard<T>

The equivalent of Access::load.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Source for T
where T: Deref, <T as Deref>::Target: Source,

Source§

type Slice<'a> = <<T as Deref>::Target as Source>::Slice<'a> where T: 'a

A type this Source can be sliced into.
Source§

fn len(&self) -> usize

Length of the source
Source§

fn read<'a, Chunk>(&'a self, offset: usize) -> Option<Chunk>
where Chunk: Chunk<'a>,

Read a chunk of bytes into an array. Returns None when reading out of bounds would occur. Read more
Source§

unsafe fn read_byte_unchecked(&self, offset: usize) -> u8

Read a byte without doing bounds checks. Read more
Source§

fn slice(&self, range: Range<usize>) -> Option<<T as Source>::Slice<'_>>

Get a slice of the source at given range. This is analogous to slice::get(range). Read more
Source§

unsafe fn slice_unchecked( &self, range: Range<usize>, ) -> <T as Source>::Slice<'_>

Get a slice of the source at given range. This is analogous to slice::get_unchecked(range). Read more
Source§

fn is_boundary(&self, index: usize) -> bool

Check if index is valid for this Source, that is: Read more
Source§

fn find_boundary(&self, index: usize) -> usize

For &str sources attempts to find the closest char boundary at which source can be sliced, starting from index. Read more
Source§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<B> ByteSliceMut for B
where B: ByteSlice + DerefMut,

Source§

impl<T> Formattable for T
where T: Deref, <T as Deref>::Target: Formattable,

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Parsable for T
where T: Deref, <T as Deref>::Target: Parsable,

Source§

impl<B> SplitByteSliceMut for B