From 397804a786d0a4e8167706b46a4bb08808bd17cd Mon Sep 17 00:00:00 2001 From: Ali Shirvani Date: Wed, 28 Nov 2018 09:15:08 +0330 Subject: [PATCH] echo example with `impl Future` --- examples/echo2.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 examples/echo2.rs diff --git a/examples/echo2.rs b/examples/echo2.rs new file mode 100644 index 000000000..7d8a428f9 --- /dev/null +++ b/examples/echo2.rs @@ -0,0 +1,47 @@ +#[macro_use] +extern crate log; +extern crate env_logger; + +extern crate actix_http; +extern crate actix_net; +extern crate futures; +extern crate http; +extern crate bytes; + +use actix_http::{h1, Response, Request, Error}; +use bytes::Bytes; +use actix_net::server::Server; +use actix_net::service::NewServiceExt; +use futures::Future; +use http::header::{HeaderValue}; +use actix_http::HttpMessage; +use std::env; + +fn handle_request(_req: Request) -> impl Future{ + _req.body() + .limit(512) + .from_err() + .and_then(|bytes: Bytes| { + info!("request body: {:?}", bytes); + let mut res = Response::Ok(); + res.header("x-head", HeaderValue::from_static("dummy value!")); + Ok(res.body(bytes)) + }) +} + +fn main() { + env::set_var("RUST_LOG", "echo=info"); + env_logger::init(); + + Server::new().bind("echo", "127.0.0.1:8080", || { + h1::H1Service::build() + .client_timeout(1000) + .client_disconnect(1000) + .server_hostname("localhost") + .finish(|_req: Request| { + handle_request(_req) + }) + .map(|_| ()) + }).unwrap().run(); +} +