docs(examples): update echo example with functionality from the guide
Update the echo example based on the functionality explained in the Hyper guide: https://hyper.rs/guides/server/echo Closes #1528
This commit is contained in:
		
				
					committed by
					
						 Sean McArthur
						Sean McArthur
					
				
			
			
				
	
			
			
			
						parent
						
							e5118d7eea
						
					
				
				
					commit
					924c6da25b
				
			| @@ -1,41 +1,57 @@ | |||||||
| #![deny(warnings)] | extern crate futures; | ||||||
| extern crate hyper; | extern crate hyper; | ||||||
| extern crate pretty_env_logger; |  | ||||||
|  |  | ||||||
|  | use futures::future; | ||||||
|  | use hyper::rt::{Future, Stream}; | ||||||
|  | use hyper::service::service_fn; | ||||||
| use hyper::{Body, Method, Request, Response, Server, StatusCode}; | use hyper::{Body, Method, Request, Response, Server, StatusCode}; | ||||||
| use hyper::service::service_fn_ok; |  | ||||||
| use hyper::rt::Future; |  | ||||||
|  |  | ||||||
| static INDEX: &'static [u8] = b"Try POST /echo"; | type BoxFut = Box<Future<Item = Response<Body>, Error = hyper::Error> + Send>; | ||||||
|  |  | ||||||
|  | fn echo(req: Request<Body>) -> BoxFut { | ||||||
|  |     let mut response = Response::new(Body::empty()); | ||||||
|  |  | ||||||
| // Using service_fn_ok, we can convert this function into a `Service`. |  | ||||||
| fn echo(req: Request<Body>) -> Response<Body> { |  | ||||||
|     match (req.method(), req.uri().path()) { |     match (req.method(), req.uri().path()) { | ||||||
|         (&Method::GET, "/") | (&Method::POST, "/") => { |         (&Method::GET, "/") => { | ||||||
|             Response::new(INDEX.into()) |             *response.body_mut() = Body::from("Try POSTing data to /echo"); | ||||||
|         }, |         } | ||||||
|         (&Method::POST, "/echo") => { |         (&Method::POST, "/echo") => { | ||||||
|             Response::new(req.into_body()) |             *response.body_mut() = req.into_body(); | ||||||
|         }, |  | ||||||
|         _ => { |  | ||||||
|             let mut res = Response::new(Body::empty()); |  | ||||||
|             *res.status_mut() = StatusCode::NOT_FOUND; |  | ||||||
|             res |  | ||||||
|         } |         } | ||||||
|     } |         (&Method::POST, "/echo/uppercase") => { | ||||||
| } |             let mapping = req.into_body().map(|chunk| { | ||||||
|  |                 chunk | ||||||
|  |                     .iter() | ||||||
|  |                     .map(|byte| byte.to_ascii_uppercase()) | ||||||
|  |                     .collect::<Vec<u8>>() | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             *response.body_mut() = Body::wrap_stream(mapping); | ||||||
|  |         } | ||||||
|  |         (&Method::POST, "/echo/reversed") => { | ||||||
|  |             let reversed = req.into_body().concat2().map(move |chunk| { | ||||||
|  |                 let body = chunk.iter().rev().cloned().collect::<Vec<u8>>(); | ||||||
|  |                 *response.body_mut() = Body::from(body); | ||||||
|  |                 response | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             return Box::new(reversed); | ||||||
|  |         } | ||||||
|  |         _ => { | ||||||
|  |             *response.status_mut() = StatusCode::NOT_FOUND; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     Box::new(future::ok(response)) | ||||||
|  | } | ||||||
|  |  | ||||||
| fn main() { | fn main() { | ||||||
|     pretty_env_logger::init(); |     let addr = ([127, 0, 0, 1], 3000).into(); | ||||||
|  |  | ||||||
|     let addr = ([127, 0, 0, 1], 1337).into(); |  | ||||||
|  |  | ||||||
|     let server = Server::bind(&addr) |     let server = Server::bind(&addr) | ||||||
|         .serve(|| service_fn_ok(echo)) |         .serve(|| service_fn(echo)) | ||||||
|         .map_err(|e| eprintln!("server error: {}", e)); |         .map_err(|e| eprintln!("server error: {}", e)); | ||||||
|  |  | ||||||
|     println!("Listening on http://{}", addr); |     println!("The magic happens on port {}", addr.port()); | ||||||
|  |  | ||||||
|     hyper::rt::run(server); |     hyper::rt::run(server); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user