feat(error): add Error::cause2 and Error::into_cause

- The `cause2` method adds a `'static` bound, allowing to downcast the error type.
- The `into_cause` method converts an `Error` into its optional cause.

Closes #1542
This commit is contained in:
Steven Fackler
2018-06-06 13:40:07 -07:00
committed by Sean McArthur
parent b7a0c2d596
commit bc5e22f580

View File

@@ -125,6 +125,19 @@ impl Error {
self.inner.kind == Kind::Closed
}
/// Returns the error's cause.
///
/// This is identical to `Error::cause` except that it provides extra
/// bounds required to be able to downcast the error.
pub fn cause2(&self) -> Option<&(StdError + 'static + Sync + Send)> {
self.inner.cause.as_ref().map(|e| &**e)
}
/// Consumes the error, returning its cause.
pub fn into_cause(self) -> Option<Box<StdError + Sync + Send>> {
self.inner.cause
}
pub(crate) fn new(kind: Kind, cause: Option<Cause>) -> Error {
Error {
inner: Box::new(ErrorImpl {