dextrose/
lib.rs

1//! a random collection of helper traits, as a sweet treat for Rust programmers
2
3use std::sync::{LockResult, MutexGuard};
4
5/// don't let your guards die!
6/// they served you well o7
7/// here's the antidote :)
8pub 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}