docs(client): add module level docs for hyper::client
This commit is contained in:
		| @@ -1,4 +1,76 @@ | ||||
| //! HTTP Client | ||||
| //! | ||||
| //! There are two levels of APIs provided for construct HTTP clients: | ||||
| //! | ||||
| //! - The higher-level [`Client`](Client) type. | ||||
| //! - The lower-level [conn](conn) module. | ||||
| //! | ||||
| //! # Client | ||||
| //! | ||||
| //! The [`Client`](Client) is the main way to send HTTP requests to a server. | ||||
| //! The default `Client` provides these things on top of the lower-level API: | ||||
| //! | ||||
| //! - A default **connector**, able to resolve hostnames and connect to | ||||
| //!   destinations over plain-text TCP. | ||||
| //! - A **pool** of existing connections, allowing better performance when | ||||
| //!   making multiple requests to the same hostname. | ||||
| //! - Automatic setting of the `Host` header, based on the request `Uri`. | ||||
| //! - Automatic request **retries** when a pooled connection is closed by the | ||||
| //!   server before any bytes have been written. | ||||
| //! | ||||
| //! Many of these features can configured, by making use of | ||||
| //! [`Client::builder`](Client::builder). | ||||
| //! | ||||
| //! ## Example | ||||
| //! | ||||
| //! ```no_run | ||||
| //! extern crate hyper; | ||||
| //! | ||||
| //! use hyper::Client; | ||||
| //! # #[cfg(feature = "runtime")] | ||||
| //! use hyper::rt::{self, lazy, Future, Stream}; | ||||
| //! | ||||
| //! # #[cfg(feature = "runtime")] | ||||
| //! fn main() { | ||||
| //!     // A runtime is needed to execute our asynchronous code. | ||||
| //!     rt::run(lazy(|| { | ||||
| //!         let client = Client::new(); | ||||
| //! | ||||
| //!         client | ||||
| //!             // Make a GET /ip to 'http://httpbin.org' | ||||
| //!             .get("http://httpbin.org/ip".parse().unwrap()) | ||||
| //! | ||||
| //!             // And then, if the request gets a response... | ||||
| //!             .and_then(|res| { | ||||
| //!                 println!("status: {}", res.status()); | ||||
| //! | ||||
| //!                 // Concatenate the body stream into a single buffer... | ||||
| //!                 // This returns a new future, since we must stream body. | ||||
| //!                 res.into_body().concat2() | ||||
| //!             }) | ||||
| //! | ||||
| //!             // And then, if reading the full body succeeds... | ||||
| //!             .and_then(|body| { | ||||
| //!                 // The body is just bytes, but let's print a string... | ||||
| //!                 let s = ::std::str::from_utf8(&body) | ||||
| //!                     .expect("httpbin sends utf-8 JSON"); | ||||
| //! | ||||
| //!                 println!("body: {}", s); | ||||
| //! | ||||
| //!                 // and_then requires we return a new Future, and it turns | ||||
| //!                 // out that Result is a Future that is ready immediately. | ||||
| //!                 Ok(()) | ||||
| //!             }) | ||||
| //! | ||||
| //!             // Map any errors that might have happened... | ||||
| //!             .map_err(|err| { | ||||
| //!                 println!("error: {}", err); | ||||
| //!             }) | ||||
| //!     })); | ||||
| //! } | ||||
| //! # #[cfg(not(feature = "runtime"))] | ||||
| //! # fn main () {} | ||||
| //! ``` | ||||
|  | ||||
| use std::fmt; | ||||
| use std::io; | ||||
| @@ -14,13 +86,11 @@ use http::uri::Scheme; | ||||
|  | ||||
| use body::{Body, Payload}; | ||||
| use common::Exec; | ||||
| use self::connect::{Connect, Destination}; | ||||
| use self::pool::{Pool, Poolable, Reservation}; | ||||
|  | ||||
| pub use self::connect::Connect; | ||||
| #[cfg(feature = "runtime")] pub use self::connect::HttpConnector; | ||||
|  | ||||
| use self::connect::Destination; | ||||
|  | ||||
| pub mod conn; | ||||
| pub mod connect; | ||||
| pub(crate) mod dispatch; | ||||
| @@ -44,6 +114,11 @@ pub struct Client<C, B = Body> { | ||||
| #[cfg(feature = "runtime")] | ||||
| impl Client<HttpConnector, Body> { | ||||
|     /// Create a new Client with the default config. | ||||
|     /// | ||||
|     /// # Note | ||||
|     /// | ||||
|     /// The default connector does **not** handle TLS. Speaking to `https` | ||||
|     /// destinations will require configuring a connector that implements TLS. | ||||
|     #[inline] | ||||
|     pub fn new() -> Client<HttpConnector, Body> { | ||||
|         Builder::default().build_http() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user