docs(client): Add client_json example

Closes #1581
This commit is contained in:
ozgurakkurt
2018-07-03 23:41:50 +02:00
committed by Sean McArthur
parent d42c983e3b
commit e06dc52ef6
3 changed files with 61 additions and 0 deletions

View File

@@ -6,6 +6,9 @@ Run examples with `cargo run --example example_name`.
* [`client`](client.rs) - A simple CLI http client that request the url passed in parameters and outputs the response content and details to the stdout, reading content chunk-by-chunk.
* [`client_json`](client_json.rs) - A simple program that GETs some json, reads the body asynchronously,
parses it with serde and outputs the result.
* [`echo`](echo.rs) - An echo server that copies POST request's content to the response content.
* [`hello`](hello.rs) - A simple server that returns "Hello World!" using a closure wrapped to provide a [`Service`](../src/service/service.rs).

50
examples/client_json.rs Normal file
View File

@@ -0,0 +1,50 @@
#![deny(warnings)]
extern crate hyper;
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
use hyper::Client;
use hyper::rt::{self, Future, Stream};
fn main() {
let url = "http://jsonplaceholder.typicode.com/users".parse().unwrap();
// Run the runtime with the future trying to fetch, parse and print json.
//
// Note that in more complicated use cases, the runtime should probably
// run on its own, and futures should just be spawned into it.
rt::run(fetch_json(url));
}
fn fetch_json(url: hyper::Uri) -> impl Future<Item=(), Error=()> {
let client = Client::new();
client
// Fetch the url...
.get(url)
// And then, if we get a response back...
.and_then(|res| {
// asynchronously concatenate chunks of the body
res.into_body().concat2()
})
// use the body after concatenation
.map(|body| {
// try to parse as json with serde_json
let users: Vec<User> = serde_json::from_slice(&body).expect("parse json");
// pretty print result
println!("{:#?}", users);
})
// If there was an error, let the user know...
.map_err(|err| {
eprintln!("Error {}", err);
})
}
#[derive(Deserialize, Debug)]
struct User {
id: i32,
name: String,
}