Struct RwLockMappedWriteGuard

struct RwLockMappedWriteGuard<'a, T: ?Sized> { ... }

RAII structure used to release the exclusive write access of a lock when dropped.

This structure is created by mapping an RwLockWriteGuard. It is a separate type from RwLockWriteGuard to disallow downgrading a mapped guard, since doing so can cause undefined behavior.

Implementations

impl<'a, T: ?Sized> RwLockMappedWriteGuard<'a, T>

fn map<F, U: ?Sized>(this: Self, f: F) -> RwLockMappedWriteGuard<'a, U>
where
    F: FnOnce(&mut T) -> &mut U

Makes a new RwLockMappedWriteGuard for a component of the locked data.

This operation cannot fail as the RwLockMappedWriteGuard passed in already locked the data.

This is an associated function that needs to be used as RwLockMappedWriteGuard::map(..). A method would interfere with methods of the same name on the contents of the locked data.

This is an asynchronous version of RwLockWriteGuard::map from the parking_lot crate.

Examples

use tokio::sync::{RwLock, RwLockWriteGuard};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);

# #[tokio::main]
# async fn main() {
let lock = RwLock::new(Foo(1));

{
    let mut mapped = RwLockWriteGuard::map(lock.write().await, |f| &mut f.0);
    *mapped = 2;
}

assert_eq!(Foo(2), *lock.read().await);
# }
fn try_map<F, U: ?Sized>(this: Self, f: F) -> Result<RwLockMappedWriteGuard<'a, U>, Self>
where
    F: FnOnce(&mut T) -> Option<&mut U>

Attempts to make a new RwLockMappedWriteGuard for a component of the locked data. The original guard is returned if the closure returns None.

This operation cannot fail as the RwLockMappedWriteGuard passed in already locked the data.

This is an associated function that needs to be used as RwLockMappedWriteGuard::try_map(...). A method would interfere with methods of the same name on the contents of the locked data.

This is an asynchronous version of RwLockWriteGuard::try_map from the parking_lot crate.

Examples

use tokio::sync::{RwLock, RwLockWriteGuard};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);

# #[tokio::main]
# async fn main() {
let lock = RwLock::new(Foo(1));

{
    let guard = lock.write().await;
    let mut guard = RwLockWriteGuard::try_map(guard, |f| Some(&mut f.0)).expect("should not fail");
    *guard = 2;
}

assert_eq!(Foo(2), *lock.read().await);
# }

impl<'a, T> Debug for RwLockMappedWriteGuard<'a, T>

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

impl<'a, T> Display for RwLockMappedWriteGuard<'a, T>

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

impl<'a, T> Freeze for RwLockMappedWriteGuard<'a, T>

impl<'a, T> RefUnwindSafe for RwLockMappedWriteGuard<'a, T>

impl<'a, T> Unpin for RwLockMappedWriteGuard<'a, T>

impl<'a, T> UnsafeUnpin for RwLockMappedWriteGuard<'a, T>

impl<'a, T> UnwindSafe for RwLockMappedWriteGuard<'a, T>

impl<'a, T: ?Sized> Drop for RwLockMappedWriteGuard<'a, T>

fn drop(self: &mut Self)

impl<P, T> Receiver for RwLockMappedWriteGuard<'a, T>

impl<T> Any for RwLockMappedWriteGuard<'a, T>

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for RwLockMappedWriteGuard<'a, T>

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for RwLockMappedWriteGuard<'a, T>

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

impl<T> From for RwLockMappedWriteGuard<'a, T>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> Send for RwLockMappedWriteGuard<'_, T>

impl<T> Sync for RwLockMappedWriteGuard<'_, T>

impl<T> ToString for RwLockMappedWriteGuard<'a, T>

fn to_string(self: &Self) -> String

impl<T, U> Into for RwLockMappedWriteGuard<'a, T>

fn into(self: Self) -> U

Calls U::from(self).

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

impl<T, U> TryFrom for RwLockMappedWriteGuard<'a, T>

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

impl<T, U> TryInto for RwLockMappedWriteGuard<'a, T>

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

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

fn deref(self: &Self) -> &T

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

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