Files
reqwest-impersonate/examples/async.rs
2017-08-31 18:10:45 -07:00

44 lines
1.0 KiB
Rust

#![allow(warnings)] // remove when error_chain is fixed
extern crate futures;
extern crate reqwest;
extern crate tokio_core;
#[macro_use]
extern crate error_chain;
use std::mem;
use std::io::{self, Cursor};
use futures::{Future, Stream};
use reqwest::unstable::async::{Client, Decoder};
error_chain! {
foreign_links {
ReqError(reqwest::Error);
IoError(io::Error);
}
}
fn run() -> Result<()> {
let mut core = tokio_core::reactor::Core::new()?;
let client = Client::new(&core.handle());
let work = client.get("https://hyper.rs")
.send()
.map_err(|e| Error::from(e))
.and_then(|mut res| {
println!("{}", res.status());
let body = mem::replace(res.body_mut(), Decoder::empty());
body.concat2().map_err(Into::into)
})
.and_then(|body| {
let mut body = Cursor::new(body);
io::copy(&mut body, &mut io::stdout()).map_err(Into::into)
});
core.run(work)?;
Ok(())
}
quick_main!(run);