pub struct ReadGuard<'rh, T: ?Sized> { /* private fields */ }Expand description
A guard wrapping a live reference into a left-right protected T.
As long as this guard lives, the T being read cannot change. If a writer attempts to call
WriteHandle::publish, that call will block until this guard is
dropped.
To scope the guard to a subset of the data in T, use map and
try_map.
Implementations§
Source§impl<'rh, T: ?Sized> ReadGuard<'rh, T>
impl<'rh, T: ?Sized> ReadGuard<'rh, T>
Sourcepub fn map<F, U: ?Sized>(orig: Self, f: F) -> ReadGuard<'rh, U>
pub fn map<F, U: ?Sized>(orig: Self, f: F) -> ReadGuard<'rh, U>
Makes a new ReadGuard for a component of the borrowed data.
This is an associated function that needs to be used as ReadGuard::map(...), since
a method would interfere with methods of the same name on the contents of a Readguard
used through Deref.
§Examples
use left_right::{ReadGuard, ReadHandle};
fn get_str(handle: &ReadHandle<Vec<(String, i32)>>, i: usize) -> Option<ReadGuard<'_, str>> {
handle.enter().map(|guard| {
ReadGuard::map(guard, |t| {
&*t[i].0
})
})
}Sourcepub fn try_map<F, U: ?Sized>(orig: Self, f: F) -> Option<ReadGuard<'rh, U>>
pub fn try_map<F, U: ?Sized>(orig: Self, f: F) -> Option<ReadGuard<'rh, U>>
Makes a new ReadGuard for a component of the borrowed data that may not exist.
This method differs from map in that it drops the guard if the closure maps
to None. This allows you to “lift” a ReadGuard<Option<T>> into an
Option<ReadGuard<T>>.
This is an associated function that needs to be used as ReadGuard::try_map(...), since
a method would interfere with methods of the same name on the contents of a Readguard
used through Deref.
§Examples
use left_right::{ReadGuard, ReadHandle};
fn try_get_str(handle: &ReadHandle<Vec<(String, i32)>>, i: usize) -> Option<ReadGuard<'_, str>> {
handle.enter().and_then(|guard| {
ReadGuard::try_map(guard, |t| {
t.get(i).map(|v| &*v.0)
})
})
}