Skip to content

Instantly share code, notes, and snippets.

@kschiess
Created July 31, 2018 08:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kschiess/1f1e22d96c2264dd0946d0127797be53 to your computer and use it in GitHub Desktop.
Save kschiess/1f1e22d96c2264dd0946d0127797be53 to your computer and use it in GitHub Desktop.
#![deny(warnings)]
extern crate futures;
extern crate hyper;
extern crate pretty_env_logger;
extern crate serde_json;
use futures::{future, Future};
use hyper::{Body, Client, Request, Response, Server};
use hyper::client::HttpConnector;
use hyper::service::service_fn;
#[allow(unused, deprecated)]
use std::ascii::AsciiExt;
fn response_examples(req: Request<Body>, client: &Client<HttpConnector>)
-> Box<Future<Item=Response<Body>, Error=hyper::Error> + Send>
{
let (mut parts, body) = req.into_parts();
let uri: hyper::Uri = "http://127.0.0.1:8000/hello".parse().unwrap();
parts.uri = uri;
let backend_req = Request::from_parts(parts, body);
let fut_res = client.request(backend_req);
return Box::new(
fut_res.map( |backend_res| {
let (headers, body) = backend_res.into_parts();
Response::from_parts(headers, body)
})
)
}
fn main() {
pretty_env_logger::init();
let addr = "127.0.0.1:1337".parse().unwrap();
hyper::rt::run(future::lazy(move || {
// Share a `Client` with all `Service`s
let client = Client::new();
let new_service = move || {
// Move a clone of `client` into the `service_fn`.
let client = client.clone();
service_fn(move |req| {
response_examples(req, &client)
})
};
let server = Server::bind(&addr)
.serve(new_service)
.map_err(|e| eprintln!("server error: {}", e));
println!("Listening on http://{}", addr);
server
}));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment