feat(status): add StatusCode::try_from(u16).
				
					
				
			This is a temporary function until the `TryFrom` trait stabilizes. BREAKING CHANGE: Removes the undocumented `from_u16` function. Use `StatusCode::try_from` instead. Also makes the `status` module private. All imports of `hyper::status::StatusCode` should be `hyper::StatusCode`.
This commit is contained in:
		| @@ -160,7 +160,8 @@ impl Http1Transaction for ClientTransaction { | |||||||
|                 httparse::Status::Complete(len) => { |                 httparse::Status::Complete(len) => { | ||||||
|                     trace!("Response.try_parse Complete({})", len); |                     trace!("Response.try_parse Complete({})", len); | ||||||
|                     let code = res.code.unwrap(); |                     let code = res.code.unwrap(); | ||||||
|                     let reason = match StatusCode::from_u16(code).canonical_reason() { |                     let status = try!(StatusCode::try_from(code).map_err(|_| ::Error::Status)); | ||||||
|  |                     let reason = match status.canonical_reason() { | ||||||
|                         Some(reason) if reason == res.reason.unwrap() => Cow::Borrowed(reason), |                         Some(reason) if reason == res.reason.unwrap() => Cow::Borrowed(reason), | ||||||
|                         _ => Cow::Owned(res.reason.unwrap().to_owned()) |                         _ => Cow::Owned(res.reason.unwrap().to_owned()) | ||||||
|                     }; |                     }; | ||||||
|   | |||||||
| @@ -89,7 +89,7 @@ impl RawStatus { | |||||||
|     /// Converts this into a StatusCode. |     /// Converts this into a StatusCode. | ||||||
|     #[inline] |     #[inline] | ||||||
|     pub fn status(&self) -> StatusCode { |     pub fn status(&self) -> StatusCode { | ||||||
|         StatusCode::from_u16(self.0) |         StatusCode::try_from(self.0).unwrap() | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -57,6 +57,6 @@ mod method; | |||||||
| pub mod header; | pub mod header; | ||||||
| mod http; | mod http; | ||||||
| pub mod server; | pub mod server; | ||||||
| pub mod status; | mod status; | ||||||
| mod uri; | mod uri; | ||||||
| mod version; | mod version; | ||||||
|   | |||||||
| @@ -213,11 +213,35 @@ pub enum StatusCode { | |||||||
|     Unregistered(u16), |     Unregistered(u16), | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[derive(Debug)] | ||||||
|  | pub struct InvalidStatusCode { | ||||||
|  |     _inner: (), | ||||||
|  | } | ||||||
|  |  | ||||||
| impl StatusCode { | impl StatusCode { | ||||||
|  |  | ||||||
|     #[doc(hidden)] |     /// Try to convert a `u16` into a `StatusCode`. | ||||||
|     // Not part of public API or API contract. Could disappear. |     /// | ||||||
|     pub fn from_u16(n: u16) -> StatusCode { |     /// # Errors | ||||||
|  |     /// | ||||||
|  |     /// This will return an error if the provided argument is not within the | ||||||
|  |     /// range `100...599`. | ||||||
|  |     /// | ||||||
|  |     /// # Note | ||||||
|  |     /// | ||||||
|  |     /// This function is temporary. When the `TryFrom` trait becomes stable, | ||||||
|  |     /// this will be deprecated and replaced by `TryFrom<u16>`. | ||||||
|  |     pub fn try_from(n: u16) -> Result<StatusCode, InvalidStatusCode> { | ||||||
|  |         if n < 100 || n > 599 { | ||||||
|  |             Err(InvalidStatusCode { | ||||||
|  |                 _inner: (), | ||||||
|  |             }) | ||||||
|  |         } else { | ||||||
|  |             Ok(StatusCode::from_u16(n)) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fn from_u16(n: u16) -> StatusCode { | ||||||
|         match n { |         match n { | ||||||
|             100 => StatusCode::Continue, |             100 => StatusCode::Continue, | ||||||
|             101 => StatusCode::SwitchingProtocols, |             101 => StatusCode::SwitchingProtocols, | ||||||
| @@ -490,7 +514,7 @@ impl Copy for StatusCode {} | |||||||
| /// Formats the status code, *including* the canonical reason. | /// Formats the status code, *including* the canonical reason. | ||||||
| /// | /// | ||||||
| /// ```rust | /// ```rust | ||||||
| /// # use hyper::status::StatusCode::{ImATeapot, Unregistered}; | /// # use hyper::StatusCode::{ImATeapot, Unregistered}; | ||||||
| /// assert_eq!(format!("{}", ImATeapot), "418 I'm a teapot"); | /// assert_eq!(format!("{}", ImATeapot), "418 I'm a teapot"); | ||||||
| /// assert_eq!(format!("{}", Unregistered(123)), | /// assert_eq!(format!("{}", Unregistered(123)), | ||||||
| ///            "123 <unknown status code>"); | ///            "123 <unknown status code>"); | ||||||
| @@ -750,4 +774,16 @@ mod tests { | |||||||
|             Some("Network Authentication Required")); |             Some("Network Authentication Required")); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn try_from() { | ||||||
|  |         StatusCode::try_from(100).unwrap(); | ||||||
|  |         StatusCode::try_from(599).unwrap(); | ||||||
|  |         StatusCode::try_from(200).unwrap(); | ||||||
|  |  | ||||||
|  |         StatusCode::try_from(99).unwrap_err(); | ||||||
|  |         StatusCode::try_from(600).unwrap_err(); | ||||||
|  |         StatusCode::try_from(0).unwrap_err(); | ||||||
|  |         StatusCode::try_from(1000).unwrap_err(); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user