1use std::sync::{LockResult, MutexGuard};
4
5pub trait Curable {
9 type Cure;
10 fn cure(self) -> Self::Cured;
11 fn cure_with(self, cure: Self::Cure) -> Self::Cured;
12 type Cured;
13}
14
15impl<'a, T> Curable for LockResult<MutexGuard<'a, T>> {
16 type Cured = MutexGuard<'a, T>;
17 type Cure = T;
18 fn cure(self) -> Self::Cured {
19 match self {
20 Ok(t) => t,
21 Err(poison) => poison.into_inner(),
22 }
23 }
24 fn cure_with(self, cure: Self::Cure) -> Self::Cured {
25 match self {
26 Ok(t) => t,
27 Err(poison) => {
28 let mut guard = poison.into_inner();
29 *guard = cure;
30 guard
31 }
32 }
33 }
34}