feat(lib): redesign API to use Futures and Tokio

There are many changes involved with this, but let's just talk about
user-facing changes.

- Creating a `Client` and `Server` now needs a Tokio `Core` event loop
to attach to.
- `Request` and `Response` both no longer implement the
`std::io::{Read,Write}` traits, but instead represent their bodies as a
`futures::Stream` of items, where each item is a `Chunk`.
- The `Client.request` method now takes a `Request`, instead of being
used as a builder, and returns a `Future` that resolves to `Response`.
- The `Handler` trait for servers is no more, and instead the Tokio
`Service` trait is used. This allows interoperability with generic
middleware.

BREAKING CHANGE: A big sweeping set of breaking changes.
This commit is contained in:
Sean McArthur
2016-11-17 17:31:42 -08:00
parent e23689122a
commit 2d2d5574a6
43 changed files with 2775 additions and 5033 deletions

View File

@@ -7,49 +7,34 @@ readme = "README.md"
documentation = "http://hyperium.github.io/hyper"
repository = "https://github.com/hyperium/hyper"
license = "MIT"
authors = ["Sean McArthur <sean.monstar@gmail.com>",
"Jonathan Reem <jonathan.reem@gmail.com>"]
authors = ["Sean McArthur <sean.monstar@gmail.com>"]
keywords = ["http", "hyper", "hyperium"]
[dependencies]
futures = "0.1.7"
futures-cpupool = "0.1"
httparse = "1.0"
language-tags = "0.2"
log = "0.3"
mime = "0.2"
rotor = "0.6"
relay = "0.1"
rustc-serialize = "0.3"
spmc = "0.2"
time = "0.1"
tokio-core = "0.1"
tokio-proto = "0.1"
tokio-service = "0.1"
unicase = "1.0"
url = "1.0"
vecio = "0.1"
[dependencies.cookie]
version = "0.3"
default-features = false
[dependencies.openssl]
version = "0.7"
optional = true
[dependencies.openssl-verify]
version = "0.1"
optional = true
[dependencies.security-framework]
version = "0.1.4"
optional = true
[dependencies.serde]
version = "0.8"
optional = true
[dev-dependencies]
env_logger = "0.3"
num_cpus = "1.0"
pretty_env_logger = "0.1"
spmc = "0.2"
[features]
default = ["ssl"]
ssl = ["openssl", "openssl-verify"]
serde-serialization = ["serde", "mime/serde"]
default = []
nightly = []