Merge pull request #1011 from ethcore/url-update
Switching to rust-url@1.0.0
This commit is contained in:
commit
aed9c79237
14
Cargo.lock
generated
14
Cargo.lock
generated
@ -364,7 +364,7 @@ dependencies = [
|
|||||||
"parity-status 0.2.2 (git+https://github.com/tomusdrw/parity-status.git)",
|
"parity-status 0.2.2 (git+https://github.com/tomusdrw/parity-status.git)",
|
||||||
"parity-wallet 0.1.1 (git+https://github.com/tomusdrw/parity-wallet.git)",
|
"parity-wallet 0.1.1 (git+https://github.com/tomusdrw/parity-wallet.git)",
|
||||||
"parity-webapp 0.1.0 (git+https://github.com/tomusdrw/parity-webapp.git)",
|
"parity-webapp 0.1.0 (git+https://github.com/tomusdrw/parity-webapp.git)",
|
||||||
"url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -494,21 +494,22 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper"
|
name = "hyper"
|
||||||
version = "0.9.0-mio"
|
version = "0.9.0-mio"
|
||||||
source = "git+https://github.com/hyperium/hyper?branch=mio#55c7d7a1d88001e529b3d3b3a6783548ce8c3d06"
|
source = "git+https://github.com/hyperium/hyper?branch=mio#fab6c4173063a10f2aacfe3872150537da3dcfdd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"mime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"mime 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"mio 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"mio 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rotor 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rotor 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"spmc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"url 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"vecio 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"vecio 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1061,6 +1062,11 @@ dependencies = [
|
|||||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "spmc"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
@ -12,7 +12,7 @@ log = "0.3"
|
|||||||
jsonrpc-core = "2.0"
|
jsonrpc-core = "2.0"
|
||||||
jsonrpc-http-server = { git = "https://github.com/debris/jsonrpc-http-server.git", version = "5.1.0" }
|
jsonrpc-http-server = { git = "https://github.com/debris/jsonrpc-http-server.git", version = "5.1.0" }
|
||||||
hyper = { default-features = false, git = "https://github.com/hyperium/hyper", branch = "mio" }
|
hyper = { default-features = false, git = "https://github.com/hyperium/hyper", branch = "mio" }
|
||||||
url = "0.5"
|
url = "1.0"
|
||||||
ethcore-rpc = { path = "../rpc" }
|
ethcore-rpc = { path = "../rpc" }
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
parity-webapp = { git = "https://github.com/tomusdrw/parity-webapp.git" }
|
parity-webapp = { git = "https://github.com/tomusdrw/parity-webapp.git" }
|
||||||
|
@ -17,14 +17,13 @@
|
|||||||
//! HTTP/HTTPS URL type. Based on URL type from Iron library.
|
//! HTTP/HTTPS URL type. Based on URL type from Iron library.
|
||||||
|
|
||||||
use url::Host;
|
use url::Host;
|
||||||
use url::{whatwg_scheme_type_mapper};
|
use url::{self};
|
||||||
use url::{self, SchemeData, SchemeType};
|
|
||||||
|
|
||||||
/// HTTP/HTTPS URL type for Iron.
|
/// HTTP/HTTPS URL type for Iron.
|
||||||
#[derive(PartialEq, Eq, Clone, Debug)]
|
#[derive(PartialEq, Eq, Clone, Debug)]
|
||||||
pub struct Url {
|
pub struct Url {
|
||||||
/// The lower-cased scheme of the URL, typically "http" or "https".
|
/// Raw url of url
|
||||||
pub scheme: String,
|
pub raw: url::Url,
|
||||||
|
|
||||||
/// The host field of the URL, probably a domain.
|
/// The host field of the URL, probably a domain.
|
||||||
pub host: Host,
|
pub host: Host,
|
||||||
@ -51,18 +50,6 @@ pub struct Url {
|
|||||||
/// if a blank password was provided.
|
/// if a blank password was provided.
|
||||||
/// Otherwise, a non-empty string.
|
/// Otherwise, a non-empty string.
|
||||||
pub password: Option<String>,
|
pub password: Option<String>,
|
||||||
|
|
||||||
/// The URL query string.
|
|
||||||
///
|
|
||||||
/// `None` if the `?` character was not part of the input.
|
|
||||||
/// Otherwise, a possibly empty, percent encoded string.
|
|
||||||
pub query: Option<String>,
|
|
||||||
|
|
||||||
/// The URL fragment.
|
|
||||||
///
|
|
||||||
/// `None` if the `#` character was not part of the input.
|
|
||||||
/// Otherwise, a possibly empty, percent encoded string.
|
|
||||||
pub fragment: Option<String>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Url {
|
impl Url {
|
||||||
@ -83,50 +70,31 @@ impl Url {
|
|||||||
|
|
||||||
/// Create a `Url` from a `rust-url` `Url`.
|
/// Create a `Url` from a `rust-url` `Url`.
|
||||||
pub fn from_generic_url(raw_url: url::Url) -> Result<Url, String> {
|
pub fn from_generic_url(raw_url: url::Url) -> Result<Url, String> {
|
||||||
// Create an Iron URL by extracting the special scheme data.
|
// Map empty usernames to None.
|
||||||
match raw_url.scheme_data {
|
let username = match raw_url.username() {
|
||||||
SchemeData::Relative(data) => {
|
"" => None,
|
||||||
// Extract the port as a 16-bit unsigned integer.
|
username => Some(username.to_owned())
|
||||||
let port: u16 = match data.port {
|
};
|
||||||
// If explicitly defined, unwrap it.
|
|
||||||
Some(port) => port,
|
|
||||||
|
|
||||||
// Otherwise, use the scheme's default port.
|
// Map empty passwords to None.
|
||||||
None => {
|
let password = match raw_url.password() {
|
||||||
match whatwg_scheme_type_mapper(&raw_url.scheme) {
|
Some(password) if !password.is_empty() => Some(password.to_owned()),
|
||||||
SchemeType::Relative(port) => port,
|
_ => None,
|
||||||
_ => return Err(format!("Invalid special scheme: `{}`",
|
};
|
||||||
raw_url.scheme))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Map empty usernames to None.
|
let port = try!(raw_url.port_or_known_default().ok_or_else(|| format!("Unknown port for scheme: `{}`", raw_url.scheme())));
|
||||||
let username = match &*data.username {
|
let host = try!(raw_url.host().ok_or_else(|| "Valid host, because only data:, mailto: protocols does not have host.".to_owned())).to_owned();
|
||||||
"" => None,
|
let path = try!(raw_url.path_segments().ok_or_else(|| "Valid path segments. In HTTP we won't get cannot-be-a-base URLs".to_owned()))
|
||||||
_ => Some(data.username)
|
.map(|part| part.to_owned()).collect();
|
||||||
};
|
|
||||||
|
|
||||||
// Map empty passwords to None.
|
Ok(Url {
|
||||||
let password = match data.password {
|
port: port,
|
||||||
None => None,
|
host: host,
|
||||||
Some(ref x) if x.is_empty() => None,
|
path: path,
|
||||||
Some(password) => Some(password)
|
raw: raw_url,
|
||||||
};
|
username: username,
|
||||||
|
password: password,
|
||||||
Ok(Url {
|
})
|
||||||
scheme: raw_url.scheme,
|
|
||||||
host: data.host,
|
|
||||||
port: port,
|
|
||||||
path: data.path,
|
|
||||||
username: username,
|
|
||||||
password: password,
|
|
||||||
query: raw_url.query,
|
|
||||||
fragment: raw_url.fragment
|
|
||||||
})
|
|
||||||
},
|
|
||||||
_ => Err(format!("Not a special scheme: `{}`", raw_url.scheme))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user