diff --git a/examples/concurrent-server.rs b/examples/concurrent-server.rs index 7a18446723..0fb4c38f59 100644 --- a/examples/concurrent-server.rs +++ b/examples/concurrent-server.rs @@ -8,11 +8,11 @@ use std::io::net::ip::Ipv4Addr; use std::sync::Arc; use hyper::{Get, Post}; -use hyper::server::{Server, Handler, Incoming, Request, Response}; +use hyper::server::{Server, Handler, Incoming, Request, Response, Fresh}; use hyper::header::common::ContentLength; trait ConcurrentHandler: Send + Sync { - fn handle(&self, req: Request, res: Response); + fn handle(&self, req: Request, res: Response); } struct Concurrent { handler: Arc } @@ -38,29 +38,31 @@ macro_rules! try_abort( struct Echo; impl ConcurrentHandler for Echo { - fn handle(&self, mut req: Request, mut res: Response) { + fn handle(&self, mut req: Request, mut res: Response) { match req.uri { hyper::uri::AbsolutePath(ref path) => match (&req.method, path.as_slice()) { (&Get, "/") | (&Get, "/echo") => { let out = b"Try POST /echo"; - res.headers.set(ContentLength(out.len())); + res.headers_mut().set(ContentLength(out.len())); + let mut res = try_abort!(res.start()); try_abort!(res.write(out)); try_abort!(res.end()); return; }, (&Post, "/echo") => (), // fall through, fighting mutable borrows _ => { - res.status = hyper::status::NotFound; - try_abort!(res.end()); + *res.status_mut() = hyper::status::NotFound; + try_abort!(res.start().and_then(|res| res.end())); return; } }, _ => { - try_abort!(res.end()); + try_abort!(res.start().and_then(|res| res.end())); return; } } + let mut res = try_abort!(res.start()); try_abort!(copy(&mut req, &mut res)); try_abort!(res.end()); }