add Error::get_ref method with 'static bound
This commit is contained in:
27
src/error.rs
27
src/error.rs
@@ -20,6 +20,21 @@ impl Error {
|
|||||||
self.url.as_ref()
|
self.url.as_ref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a reference to the internal error, if available.
|
||||||
|
///
|
||||||
|
/// The `'static` bounds allows using `downcast_ref` to check the
|
||||||
|
/// details of the error.
|
||||||
|
#[inline]
|
||||||
|
pub fn get_ref(&self) -> Option<&(StdError + 'static)> {
|
||||||
|
match self.kind {
|
||||||
|
Kind::Http(ref e) => Some(e),
|
||||||
|
Kind::UrlEncoded(ref e) => Some(e),
|
||||||
|
Kind::Json(ref e) => Some(e),
|
||||||
|
Kind::TooManyRedirects |
|
||||||
|
Kind::RedirectLoop => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns true if the error is related to HTTP.
|
/// Returns true if the error is related to HTTP.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn is_http(&self) -> bool {
|
pub fn is_http(&self) -> bool {
|
||||||
@@ -189,3 +204,15 @@ macro_rules! try_ {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_error_get_ref_downcasts() {
|
||||||
|
let err: Error = from(::hyper::Error::Status);
|
||||||
|
let cause = err.get_ref().unwrap()
|
||||||
|
.downcast_ref::<::hyper::Error>().unwrap();
|
||||||
|
|
||||||
|
match cause {
|
||||||
|
&::hyper::Error::Status => (),
|
||||||
|
_ => panic!("unexpected downcast: {:?}", cause)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user