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.
77 lines
2.2 KiB
Rust
77 lines
2.2 KiB
Rust
use method::Method;
|
|
|
|
header! {
|
|
/// `Allow` header, defined in [RFC7231](http://tools.ietf.org/html/rfc7231#section-7.4.1)
|
|
///
|
|
/// The `Allow` header field lists the set of methods advertised as
|
|
/// supported by the target resource. The purpose of this field is
|
|
/// strictly to inform the recipient of valid request methods associated
|
|
/// with the resource.
|
|
///
|
|
/// # ABNF
|
|
/// ```plain
|
|
/// Allow = #method
|
|
/// ```
|
|
///
|
|
/// # Example values
|
|
/// * `GET, HEAD, PUT`
|
|
/// * `OPTIONS, GET, PUT, POST, DELETE, HEAD, TRACE, CONNECT, PATCH, fOObAr`
|
|
/// * ``
|
|
///
|
|
/// # Examples
|
|
/// ```
|
|
/// use hyper::header::{Headers, Allow};
|
|
/// use hyper::Method;
|
|
///
|
|
/// let mut headers = Headers::new();
|
|
/// headers.set(
|
|
/// Allow(vec![Method::Get])
|
|
/// );
|
|
/// ```
|
|
/// ```
|
|
/// use hyper::header::{Headers, Allow};
|
|
/// use hyper::Method;
|
|
///
|
|
/// let mut headers = Headers::new();
|
|
/// headers.set(
|
|
/// Allow(vec![
|
|
/// Method::Get,
|
|
/// Method::Post,
|
|
/// Method::Patch,
|
|
/// Method::Extension("COPY".to_owned()),
|
|
/// ])
|
|
/// );
|
|
/// ```
|
|
(Allow, "Allow") => (Method)*
|
|
|
|
test_allow {
|
|
// From the RFC
|
|
test_header!(
|
|
test1,
|
|
vec![b"GET, HEAD, PUT"],
|
|
Some(HeaderField(vec![Method::Get, Method::Head, Method::Put])));
|
|
// Own tests
|
|
test_header!(
|
|
test2,
|
|
vec![b"OPTIONS, GET, PUT, POST, DELETE, HEAD, TRACE, CONNECT, PATCH, fOObAr"],
|
|
Some(HeaderField(vec![
|
|
Method::Options,
|
|
Method::Get,
|
|
Method::Put,
|
|
Method::Post,
|
|
Method::Delete,
|
|
Method::Head,
|
|
Method::Trace,
|
|
Method::Connect,
|
|
Method::Patch,
|
|
Method::Extension("fOObAr".to_owned())])));
|
|
test_header!(
|
|
test3,
|
|
vec![b""],
|
|
Some(HeaderField(Vec::<Method>::new())));
|
|
}
|
|
}
|
|
|
|
bench_header!(bench,
|
|
Allow, { vec![b"OPTIONS,GET,PUT,POST,DELETE,HEAD,TRACE,CONNECT,PATCH,fOObAr".to_vec()] });
|