concurrency_traits/rw_lock/impls/
std_rw_lock.rs

1use crate::rw_lock::*;
2use std::sync;
3use std::sync::{RwLockReadGuard, RwLockWriteGuard, TryLockError};
4
5impl<'a, T: ?Sized> TryRwLock<'a> for sync::RwLock<T>
6where
7    T: 'a,
8{
9    type Item = T;
10    type ReadGuard = RwLockReadGuard<'a, T>;
11    type WriteGuard = RwLockWriteGuard<'a, T>;
12
13    fn try_read(&'a self) -> Option<Self::ReadGuard>
14    where
15        T: 'a,
16    {
17        match self.try_read() {
18            Ok(guard) => Some(guard),
19            Err(TryLockError::WouldBlock) => None,
20            Err(TryLockError::Poisoned(error)) => panic!("Poison Error: {}", error),
21        }
22    }
23
24    fn try_write(&'a self) -> Option<Self::WriteGuard>
25    where
26        T: 'a,
27    {
28        match self.try_write() {
29            Ok(guard) => Some(guard),
30            Err(TryLockError::WouldBlock) => None,
31            Err(TryLockError::Poisoned(error)) => panic!("Poison Error: {}", error),
32        }
33    }
34}
35impl<'a, T> TryRwLockSized<'a> for sync::RwLock<T> where T: 'a {}
36impl<'a, T> RwLock<'a> for sync::RwLock<T>
37where
38    T: 'a,
39{
40    fn read(&'a self) -> Self::ReadGuard {
41        match self.read() {
42            Ok(guard) => guard,
43            Err(error) => panic!("Poison Error: {}", error),
44        }
45    }
46
47    fn write(&'a self) -> Self::WriteGuard {
48        match self.write() {
49            Ok(guard) => guard,
50            Err(error) => panic!("Poison Error: {}", error),
51        }
52    }
53}
54impl<'a, T> RwLockSized<'a> for sync::RwLock<T> where T: 'a {}