| @@ -1,4 +1,4 @@ | ||||
| use url::{Url, ParseError}; | ||||
| use url::Url; | ||||
|  | ||||
| /// A trait to try to convert some type into a `Url`. | ||||
| /// | ||||
| @@ -12,27 +12,47 @@ impl<T: PolyfillTryInto> IntoUrl for T {} | ||||
| // pub(crate) | ||||
|  | ||||
| pub trait PolyfillTryInto { | ||||
|     fn into_url(self) -> Result<Url, ParseError>; | ||||
|     // Besides parsing as a valid `Url`, the `Url` must be a valid | ||||
|     // `http::Uri`, in that it makes sense to use in a network request. | ||||
|     fn into_url(self) -> ::Result<Url>; | ||||
| } | ||||
|  | ||||
| impl PolyfillTryInto for Url { | ||||
|     fn into_url(self) -> Result<Url, ParseError> { | ||||
|         Ok(self) | ||||
|     fn into_url(self) -> ::Result<Url> { | ||||
|         if self.has_host() { | ||||
|             Ok(self) | ||||
|         } else { | ||||
|             Err(::error::url_bad_scheme(self)) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl<'a> PolyfillTryInto for &'a str { | ||||
|     fn into_url(self) -> Result<Url, ParseError> { | ||||
|         Url::parse(self) | ||||
|     fn into_url(self) -> ::Result<Url> { | ||||
|         try_!(Url::parse(self)) | ||||
|             .into_url() | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl<'a> PolyfillTryInto for &'a String { | ||||
|     fn into_url(self) -> Result<Url, ParseError> { | ||||
|         Url::parse(self) | ||||
|     fn into_url(self) -> ::Result<Url> { | ||||
|         (&**self).into_url() | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub fn to_uri(url: &Url) -> ::hyper::Uri { | ||||
| pub(crate) fn to_uri(url: &Url) -> ::hyper::Uri { | ||||
|     url.as_str().parse().expect("a parsed Url should always be a valid Uri") | ||||
| } | ||||
|  | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     use super::*; | ||||
|  | ||||
|     #[test] | ||||
|     fn into_url_file_scheme() { | ||||
|         let err = "file:///etc/hosts" | ||||
|             .into_url() | ||||
|             .unwrap_err(); | ||||
|         assert_eq!(err.to_string(), "file:///etc/hosts: URL scheme is not allowed"); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user