concurrency_traits/rw_lock/impls/
std_rw_lock.rs1use 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 {}