diff --git a/src/error.rs b/src/error.rs index 0eb064f2ef..ab65e75523 100644 --- a/src/error.rs +++ b/src/error.rs @@ -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> { + self.inner.cause + } + pub(crate) fn new(kind: Kind, cause: Option) -> Error { Error { inner: Box::new(ErrorImpl {