From af78fd36721cfa612294872628afd6abe0763d33 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Mon, 15 Jul 2019 00:51:09 +0800 Subject: [PATCH] docs(examples): update proxy example to async/await --- examples/proxy.rs | 48 ++++++++++++++++++++++++++++++++++++++ examples_disabled/proxy.rs | 44 ---------------------------------- 2 files changed, 48 insertions(+), 44 deletions(-) create mode 100644 examples/proxy.rs delete mode 100644 examples_disabled/proxy.rs diff --git a/examples/proxy.rs b/examples/proxy.rs new file mode 100644 index 00000000..36f5e823 --- /dev/null +++ b/examples/proxy.rs @@ -0,0 +1,48 @@ +#![feature(async_await)] +#![deny(warnings)] + +use hyper::{Client, Error, Server}; +use hyper::service::{make_service_fn, service_fn}; +use std::net::SocketAddr; + +#[hyper::rt::main] +async fn main() { + pretty_env_logger::init(); + + let in_addr = ([127, 0, 0, 1], 3001).into(); + let out_addr: SocketAddr = ([127, 0, 0, 1], 3000).into(); + + let client_main = Client::new(); + + let out_addr_clone = out_addr.clone(); + + // The closure inside `make_service_fn` is run for each connection, + // creating a 'service' to handle requests for that specific connection. + let make_service = make_service_fn(move |_| { + let client = client_main.clone(); + + async move { + // This is the `Service` that will handle the connection. + // `service_fn` is a helper to convert a function that + // returns a Response into a `Service`. + Ok::<_, Error>(service_fn(move |mut req| { + let uri_string = format!("http://{}/{}", + out_addr_clone, + req.uri().path_and_query().map(|x| x.as_str()).unwrap_or("")); + let uri = uri_string.parse().unwrap(); + *req.uri_mut() = uri; + client.request(req) + })) + } + }); + + let server = Server::bind(&in_addr) + .serve(make_service); + + println!("Listening on http://{}", in_addr); + println!("Proxying on http://{}", out_addr); + + if let Err(e) = server.await { + eprintln!("server error: {}", e); + } +} diff --git a/examples_disabled/proxy.rs b/examples_disabled/proxy.rs deleted file mode 100644 index 49b7cf3e..00000000 --- a/examples_disabled/proxy.rs +++ /dev/null @@ -1,44 +0,0 @@ -#![deny(warnings)] -extern crate hyper; -extern crate pretty_env_logger; - -use hyper::{Client, Server}; -use hyper::service::service_fn; -use hyper::rt::{self, Future}; -use std::net::SocketAddr; - -fn main() { - pretty_env_logger::init(); - - let in_addr = ([127, 0, 0, 1], 3001).into(); - let out_addr: SocketAddr = ([127, 0, 0, 1], 3000).into(); - - let client_main = Client::new(); - - let out_addr_clone = out_addr.clone(); - // new_service is run for each connection, creating a 'service' - // to handle requests for that specific connection. - let new_service = move || { - let client = client_main.clone(); - // This is the `Service` that will handle the connection. - // `service_fn_ok` is a helper to convert a function that - // returns a Response into a `Service`. - service_fn(move |mut req| { - let uri_string = format!("http://{}/{}", - out_addr_clone, - req.uri().path_and_query().map(|x| x.as_str()).unwrap_or("")); - let uri = uri_string.parse().unwrap(); - *req.uri_mut() = uri; - client.request(req) - }) - }; - - let server = Server::bind(&in_addr) - .serve(new_service) - .map_err(|e| eprintln!("server error: {}", e)); - - println!("Listening on http://{}", in_addr); - println!("Proxying on http://{}", out_addr); - - rt::run(server); -}