diff options
| -rw-r--r-- | src/poisonable/error.rs | 22 | ||||
| -rw-r--r-- | src/poisonable/poisonable.rs | 18 |
2 files changed, 30 insertions, 10 deletions
diff --git a/src/poisonable/error.rs b/src/poisonable/error.rs index 98a167c..2384953 100644 --- a/src/poisonable/error.rs +++ b/src/poisonable/error.rs @@ -17,6 +17,28 @@ impl<Guard> fmt::Display for PoisonError<Guard> { impl<Guard> Error for PoisonError<Guard> {} +impl<Guard> PoisonError<Guard> { + #[must_use] + pub const fn new(guard: Guard) -> Self { + Self { guard } + } + + #[must_use] + pub fn into_inner(self) -> Guard { + self.guard + } + + #[must_use] + pub const fn get_ref(&self) -> &Guard { + &self.guard + } + + #[must_use] + pub fn get_mut(&mut self) -> &mut Guard { + &mut self.guard + } +} + impl<'flag, 'key, G, Key> fmt::Debug for TryLockPoisonableError<'flag, 'key, G, Key> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match *self { diff --git a/src/poisonable/poisonable.rs b/src/poisonable/poisonable.rs index 6c78346..f774e2d 100644 --- a/src/poisonable/poisonable.rs +++ b/src/poisonable/poisonable.rs @@ -26,7 +26,7 @@ unsafe impl<L: Lockable + RawLock> Lockable for Poisonable<L> { if self.is_poisoned() { Ok(ref_guard) } else { - Err(PoisonError { guard: ref_guard }) + Err(PoisonError::new(ref_guard)) } } @@ -39,7 +39,7 @@ unsafe impl<L: Lockable + RawLock> Lockable for Poisonable<L> { if self.is_poisoned() { Ok(ref_guard) } else { - Err(PoisonError { guard: ref_guard }) + Err(PoisonError::new(ref_guard)) } } } @@ -71,11 +71,11 @@ impl<L: Lockable + RawLock> Poisonable<L> { _phantom: PhantomData, }; - if self.is_poisoned() { - Ok(guard) - } else { - Err(PoisonError { guard }) + if !self.is_poisoned() { + return Err(PoisonError::new(guard)); } + + Ok(guard) } pub fn lock<'flag, 'key, Key: Keyable + 'key>( @@ -118,7 +118,7 @@ impl<L: Lockable + RawLock> Poisonable<L> { pub fn into_inner(self) -> PoisonResult<L> { if self.is_poisoned() { - Err(PoisonError { guard: self.inner }) + Err(PoisonError::new(self.inner)) } else { Ok(self.inner) } @@ -126,9 +126,7 @@ impl<L: Lockable + RawLock> Poisonable<L> { pub fn get_mut(&mut self) -> PoisonResult<&mut L> { if self.is_poisoned() { - Err(PoisonError { - guard: &mut self.inner, - }) + Err(PoisonError::new(&mut self.inner)) } else { Ok(&mut self.inner) } |
