Implement the error trait for errors in std::sync.

This commit is contained in:
Michael Sproul 2015-01-17 11:31:55 -08:00
parent f4f10dba29
commit ffdf1118d5

View File

@ -11,7 +11,7 @@
use prelude::v1::*;
use cell::UnsafeCell;
use error::FromError;
use error::{Error, FromError};
use fmt;
use thread::Thread;
@ -92,7 +92,13 @@ pub enum TryLockError<T> {
impl<T> fmt::Show for PoisonError<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
"poisoned lock: another task failed inside".fmt(f)
self.description().fmt(f)
}
}
impl<T> Error for PoisonError<T> {
fn description(&self) -> &str {
"poisoned lock: another task failed inside"
}
}
@ -126,11 +132,22 @@ fn from_error(err: PoisonError<T>) -> TryLockError<T> {
impl<T> fmt::Show for TryLockError<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.description().fmt(f)
}
}
impl<T> Error for TryLockError<T> {
fn description(&self) -> &str {
match *self {
TryLockError::Poisoned(ref p) => p.fmt(f),
TryLockError::WouldBlock => {
"try_lock failed because the operation would block".fmt(f)
}
TryLockError::Poisoned(ref p) => p.description(),
TryLockError::WouldBlock => "try_lock failed because the operation would block"
}
}
fn cause(&self) -> Option<&Error> {
match *self {
TryLockError::Poisoned(ref p) => Some(p),
_ => None
}
}
}