Struct tokio::sync::RwLockWriteGuard
source · [−]pub struct RwLockWriteGuard<'a, T: ?Sized> { /* private fields */ }
Expand description
Implementations
sourceimpl<'a, T: ?Sized> RwLockWriteGuard<'a, T>
impl<'a, T: ?Sized> RwLockWriteGuard<'a, T>
sourcepub fn map<F, U: ?Sized>(this: Self, f: F) -> RwLockWriteGuard<'a, U> where
F: FnOnce(&mut T) -> &mut U,
pub fn map<F, U: ?Sized>(this: Self, f: F) -> RwLockWriteGuard<'a, U> where
F: FnOnce(&mut T) -> &mut U,
Make a new RwLockWriteGuard
for a component of the locked data.
This operation cannot fail as the RwLockWriteGuard
passed in already
locked the data.
This is an associated function that needs to be used as
RwLockWriteGuard::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);
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);
sourcepub fn try_map<F, U: ?Sized>(
this: Self,
f: F
) -> Result<RwLockWriteGuard<'a, U>, Self> where
F: FnOnce(&mut T) -> Option<&mut U>,
pub fn try_map<F, U: ?Sized>(
this: Self,
f: F
) -> Result<RwLockWriteGuard<'a, U>, Self> where
F: FnOnce(&mut T) -> Option<&mut U>,
Attempts to make a new RwLockWriteGuard
for a component of
the locked data. The original guard is returned if the closure returns
None
.
This operation cannot fail as the RwLockWriteGuard
passed in already
locked the data.
This is an associated function that needs to be
used as RwLockWriteGuard::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);
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);
Trait Implementations
sourceimpl<'a, T: ?Sized> Debug for RwLockWriteGuard<'a, T> where
T: Debug,
impl<'a, T: ?Sized> Debug for RwLockWriteGuard<'a, T> where
T: Debug,
sourceimpl<T: ?Sized> Deref for RwLockWriteGuard<'_, T>
impl<T: ?Sized> Deref for RwLockWriteGuard<'_, T>
sourceimpl<T: ?Sized> DerefMut for RwLockWriteGuard<'_, T>
impl<T: ?Sized> DerefMut for RwLockWriteGuard<'_, T>
sourceimpl<'a, T: ?Sized> Display for RwLockWriteGuard<'a, T> where
T: Display,
impl<'a, T: ?Sized> Display for RwLockWriteGuard<'a, T> where
T: Display,
sourceimpl<'a, T: ?Sized> Drop for RwLockWriteGuard<'a, T>
impl<'a, T: ?Sized> Drop for RwLockWriteGuard<'a, T>
impl<T> Send for RwLockWriteGuard<'_, T> where
T: ?Sized + Send + Sync,
impl<T> Sync for RwLockWriteGuard<'_, T> where
T: ?Sized + Send + Sync,
Auto Trait Implementations
impl<'a, T> !RefUnwindSafe for RwLockWriteGuard<'a, T>
impl<'a, T: ?Sized> Unpin for RwLockWriteGuard<'a, T>
impl<'a, T> !UnwindSafe for RwLockWriteGuard<'a, T>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more