cc #2223 BREAKING CHANGE: The HTTP client of hyper is now an optional feature. To enable the client, add `features = ["client"]` to the dependency in your `Cargo.toml`.
59 lines
2.2 KiB
Rust
59 lines
2.2 KiB
Rust
//! Asynchronous Services
|
|
//!
|
|
//! A [`Service`](Service) is a trait representing an asynchronous
|
|
//! function of a request to a response. It's similar to
|
|
//! `async fn(Request) -> Result<Response, Error>`.
|
|
//!
|
|
//! The argument and return value isn't strictly required to be for HTTP.
|
|
//! Therefore, hyper uses several "trait aliases" to reduce clutter around
|
|
//! bounds. These are:
|
|
//!
|
|
//! - `HttpService`: This is blanketly implemented for all types that
|
|
//! implement `Service<http::Request<B1>, Response = http::Response<B2>>`.
|
|
//! - `MakeService`: When a `Service` returns a new `Service` as its "response",
|
|
//! we consider it a `MakeService`. Again, blanketly implemented in those cases.
|
|
//! - `MakeConnection`: A `Service` that returns a "connection", a type that
|
|
//! implements `AsyncRead` and `AsyncWrite`.
|
|
//!
|
|
//! # HttpService
|
|
//!
|
|
//! In hyper, especially in the server setting, a `Service` is usually bound
|
|
//! to a single connection. It defines how to respond to **all** requests that
|
|
//! connection will receive.
|
|
//!
|
|
//! The helper [`service_fn`](service_fn) should be sufficient for most cases, but
|
|
//! if you need to implement `Service` for a type manually, you can follow the example
|
|
//! in `service_struct_impl.rs`.
|
|
//!
|
|
//! # MakeService
|
|
//!
|
|
//! Since a `Service` is bound to a single connection, a [`Server`](crate::Server)
|
|
//! needs a way to make them as it accepts connections. This is what a
|
|
//! `MakeService` does.
|
|
//!
|
|
//! Resources that need to be shared by all `Service`s can be put into a
|
|
//! `MakeService`, and then passed to individual `Service`s when `call`
|
|
//! is called.
|
|
|
|
pub use tower_service::Service;
|
|
|
|
mod http;
|
|
mod make;
|
|
#[cfg(any(feature = "http1", feature = "http2"))]
|
|
#[cfg(feature = "client")]
|
|
mod oneshot;
|
|
mod util;
|
|
|
|
pub(crate) use self::http::HttpService;
|
|
#[cfg(any(feature = "http1", feature = "http2"))]
|
|
#[cfg(feature = "client")]
|
|
pub(crate) use self::make::MakeConnection;
|
|
#[cfg(any(feature = "http1", feature = "http2"))]
|
|
pub(crate) use self::make::MakeServiceRef;
|
|
#[cfg(any(feature = "http1", feature = "http2"))]
|
|
#[cfg(feature = "client")]
|
|
pub(crate) use self::oneshot::{oneshot, Oneshot};
|
|
|
|
pub use self::make::make_service_fn;
|
|
pub use self::util::service_fn;
|