Spec-Zone.ru › Tokio

Структура OwnedRwLockReadGuard

pub struct OwnedRwLockReadGuard<T: ?Sized, U: ?Sized = T> { /* private fields */ }
Доступно только при включённой функции crate sync.

Владеющая RAII-структура, освобождающая общий доступ для чтения блокировки при удалении.

Эта структура создаётся методом read_owned у RwLock.

Реализации

impl<T: ?Sized, U: ?Sized> OwnedRwLockReadGuard<T, U>

pub fn map<F, V: ?Sized>(this: Self, f: F) -> OwnedRwLockReadGuard<T, V>
where F: FnOnce(&U) -> &V,

Создаёт новый OwnedRwLockReadGuard для компонента заблокированных данных. Эта операция не может завершиться ошибкой, поскольку переданный OwnedRwLockReadGuard уже заблокировал данные.

Это ассоциированная функция, которую нужно вызывать как OwnedRwLockReadGuard::map(...). Метод конфликтовал бы с методами с таким же именем у содержимого заблокированных данных.

Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockReadGuard};

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

let lock = Arc::new(RwLock::new(Foo(1)));

let guard = lock.read_owned().await;
let guard = OwnedRwLockReadGuard::map(guard, |f| &f.0);

assert_eq!(1, *guard);

pub fn try_map<F, V: ?Sized>( this: Self, f: F, ) -> Result<OwnedRwLockReadGuard<T, V>, Self>
where F: FnOnce(&U) -> Option<&V>,

Пытается создать новый OwnedRwLockReadGuard для компонента заблокированных данных. Исходный guard возвращается, если замыкание возвращает None.

Эта операция не может завершиться ошибкой, поскольку переданный OwnedRwLockReadGuard уже заблокировал данные.

Это ассоциированная функция, которую нужно вызывать как OwnedRwLockReadGuard::try_map(..). Метод конфликтовал бы с методами с таким же именем у содержимого заблокированных данных.

Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockReadGuard};

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

let lock = Arc::new(RwLock::new(Foo(1)));

let guard = lock.read_owned().await;
let guard = OwnedRwLockReadGuard::try_map(guard, |f| Some(&f.0)).expect("should not fail");

assert_eq!(1, *guard);

pub fn rwlock(this: &Self) -> &Arc<RwLock<T>> ⓘ

Возвращает ссылку на исходный Arc<RwLock>.

Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockReadGuard};

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

let lock = Arc::new(RwLock::new(Foo(1)));

let guard = lock.clone().read_owned().await;
assert!(Arc::ptr_eq(&lock, OwnedRwLockReadGuard::rwlock(&guard)));

let guard = OwnedRwLockReadGuard::map(guard, |f| &f.0);
assert!(Arc::ptr_eq(&lock, OwnedRwLockReadGuard::rwlock(&guard)));

Реализации трейтов

impl<T: ?Sized, U> Debug for OwnedRwLockReadGuard<T, U>
where U: Debug + ?Sized,

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

Форматирует значение с помощью указанного форматтера. Подробнее

impl<T: ?Sized, U: ?Sized> Deref for OwnedRwLockReadGuard<T, U>

type Target = U

Тип, получаемый после разыменования.

fn deref(&self) -> &U

Разыменовывает значение.

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

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

Форматирует значение с помощью указанного форматтера. Подробнее

impl<T: ?Sized, U: ?Sized> Drop for OwnedRwLockReadGuard<T, U>

fn drop(&mut self)

Выполняет деструктор этого типа. Подробнее

fn pin_drop(self: Pin<&mut Self>)

🔬Это экспериментальный API, доступный только в nightly-версии. (pin_ergonomics)
Выполняет деструктор этого типа, но, в отличие от Drop::drop, требует, чтобы self был закреплён. Подробнее

impl<T, U> Send for OwnedRwLockReadGuard<T, U>
where T: ?Sized + Send + Sync, U: ?Sized + Sync,

impl<T, U> Sync for OwnedRwLockReadGuard<T, U>
where T: ?Sized + Send + Sync, U: ?Sized + Send + Sync,

Автоматические реализации трейтов

impl<T, U = T> !RefUnwindSafe for OwnedRwLockReadGuard<T, U>

impl<T, U = T> !UnwindSafe for OwnedRwLockReadGuard<T, U>

impl<T, U> Freeze for OwnedRwLockReadGuard<T, U>
where T: ?Sized, U: ?Sized,

impl<T, U> Unpin for OwnedRwLockReadGuard<T, U>
where T: Unpin + ?Sized, U: ?Sized,

impl<T, U> UnsafeUnpin for OwnedRwLockReadGuard<T, U>
where T: ?Sized, U: ?Sized,

Обобщённые реализации

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

fn type_id(&self) -> TypeId

Получает TypeId self. Подробнее

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

fn borrow(&self) -> &T

Неизменяемо заимствует из принадлежащего значения. Подробнее

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

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

Изменяемо заимствует из принадлежащего значения. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

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

Инструментирует этот тип с помощью предоставленного Span и возвращает обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span и возвращает обёртку Instrumented. Подробнее

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

fn into(self) -> U

Вызывает U::from(self).

То есть результат этого преобразования определяется реализацией From<T> for U.

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

type Target = T

🔬Это экспериментальный API, доступный только в nightly. (arbitrary_self_types)
Целевой тип, для которого можно вызвать метод.

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

fn to_string(&self) -> String

Преобразует заданное значение в String. Подробнее

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

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

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

Выполняет преобразование.

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

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

Тип, возвращаемый в случае ошибки преобразования.

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

Выполняет преобразование.

impl<T> WithSubscriber for T

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

Присоединяет указанный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/struct.OwnedRwLockReadGuard.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API