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