Struct OwnedRwLockMappedWriteGuard
pub struct OwnedRwLockMappedWriteGuard<T: ?Sized, U: ?Sized = T> { /* private fields */ }
sync only.Owned RAII structure used to release the exclusive write access of a lock when dropped.
This structure is created by mapping an OwnedRwLockWriteGuard. It is a separate type from OwnedRwLockWriteGuard to disallow downgrading a mapped guard, since doing so can cause undefined behavior.
Implementations
impl<T: ?Sized, U: ?Sized> OwnedRwLockMappedWriteGuard<T, U>
pub fn map<F, V: ?Sized>(this: Self, f: F) -> OwnedRwLockMappedWriteGuard<T, V>
Makes a new OwnedRwLockMappedWriteGuard for a component of the locked data.
This operation cannot fail as the OwnedRwLockMappedWriteGuard passed in already locked the data.
This is an associated function that needs to be used as OwnedRwLockWriteGuard::map(..). A method would interfere with methods of the same name on the contents of the locked data.
Examples
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockWriteGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
{
let lock = Arc::clone(&lock);
let mut mapped = OwnedRwLockWriteGuard::map(lock.write_owned().await, |f| &mut f.0);
*mapped = 2;
}
assert_eq!(Foo(2), *lock.read().await);pub fn try_map<F, V: ?Sized>( this: Self, f: F, ) -> Result<OwnedRwLockMappedWriteGuard<T, V>, Self>
Attempts to make a new OwnedRwLockMappedWriteGuard for a component of the locked data. The original guard is returned if the closure returns None.
This operation cannot fail as the OwnedRwLockMappedWriteGuard passed in already locked the data.
This is an associated function that needs to be used as OwnedRwLockMappedWriteGuard::try_map(...). A method would interfere with methods of the same name on the contents of the locked data.
Examples
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockWriteGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
{
let guard = Arc::clone(&lock).write_owned().await;
let mut guard = OwnedRwLockWriteGuard::try_map(guard, |f| Some(&mut f.0)).expect("should not fail");
*guard = 2;
}
assert_eq!(Foo(2), *lock.read().await);pub fn rwlock(this: &Self) -> &Arc<RwLock<T>> ⓘ
Returns a reference to the original Arc<RwLock>.
Examples
use std::sync::Arc;
use tokio::sync::{
RwLock,
OwnedRwLockWriteGuard,
OwnedRwLockMappedWriteGuard,
};
let lock = Arc::new(RwLock::new(1));
let guard = lock.clone().write_owned().await;
let guard = OwnedRwLockWriteGuard::map(guard, |x| x);
assert!(Arc::ptr_eq(&lock, OwnedRwLockMappedWriteGuard::rwlock(&guard)));Trait Implementations
impl<T: ?Sized, U> Debug for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U: ?Sized> Deref for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U: ?Sized> DerefMut for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U> Display for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U: ?Sized> Drop for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Send for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Sync for OwnedRwLockMappedWriteGuard<T, U>
Auto Trait Implementations
impl<T, U = T> !RefUnwindSafe for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U = T> !UnwindSafe for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Freeze for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Unpin for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> UnsafeUnpin for OwnedRwLockMappedWriteGuard<T, U>
Blanket Implementations
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<P, T> Receiver for P
type Target = T
arbitrary_self_types)
impl<T> ToString for T
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/struct.OwnedRwLockMappedWriteGuard.html