diff options
author | Teddy Wing | 2020-06-29 01:15:00 +0200 |
---|---|---|
committer | Teddy Wing | 2020-06-29 01:15:00 +0200 |
commit | 7b4e04adbcc2a7892a45ce537871a2efcb826dd4 (patch) | |
tree | 8d5610767335d327b586250495aaab9700af820f | |
parent | d0066b2e10c9c23650253b8a47db4da2ea9573f6 (diff) | |
download | fastcgi-conduit-7b4e04adbcc2a7892a45ce537871a2efcb826dd4.tar.bz2 |
Server::start: Extract `fastcgi::run` request handler to function
Make a separate function that can return a result to make it easier to
handle errors from the handler.
-rw-r--r-- | src/server.rs | 63 |
1 files changed, 37 insertions, 26 deletions
diff --git a/src/server.rs b/src/server.rs index dad6813..297e555 100644 --- a/src/server.rs +++ b/src/server.rs @@ -11,35 +11,46 @@ pub struct Server; impl Server { pub fn start<H: Handler + 'static + Sync>(handler: H) -> io::Result<Server> { fastcgi::run(move |mut raw_request| { - let mut request = FastCgiRequest::new(&mut raw_request).unwrap(); - let response = handler.call(&mut request); - - let mut stdout = raw_request.stdout(); - - let (head, body) = response.unwrap().into_parts(); + handle_request(&mut raw_request, &handler); + }); - write!( - &mut stdout, - "HTTP/1.1 {} {}\r\n", - head.status.as_str(), - head.status.canonical_reason().unwrap_or("UNKNOWN"), - ); + Ok(Server{}) + } +} - for (name, value) in head.headers.iter() { - write!(&mut stdout, "{}: ", name).unwrap(); - stdout.write(value.as_bytes()).unwrap(); - stdout.write(b"\r\n").unwrap(); - } +fn handle_request<H>( + mut raw_request: &mut fastcgi::Request, + handler: &H, +) -> Result<(), ()> +where H: Handler + 'static + Sync +{ + let mut request = FastCgiRequest::new(&mut raw_request).unwrap(); + let response = handler.call(&mut request); + + let mut stdout = raw_request.stdout(); + + let (head, body) = response.unwrap().into_parts(); + + write!( + &mut stdout, + "HTTP/1.1 {} {}\r\n", + head.status.as_str(), + head.status.canonical_reason().unwrap_or("UNKNOWN"), + ); + + for (name, value) in head.headers.iter() { + write!(&mut stdout, "{}: ", name).unwrap(); + stdout.write(value.as_bytes()).unwrap(); + stdout.write(b"\r\n").unwrap(); + } - stdout.write(b"\r\n").unwrap(); + stdout.write(b"\r\n").unwrap(); - match body { - conduit::Body::Static(slice) => stdout.write(slice).map(|_| ()).unwrap(), - conduit::Body::Owned(vec) => stdout.write(&vec).map(|_| ()).unwrap(), - conduit::Body::File(mut file) => io::copy(&mut file, &mut stdout).map(|_| ()).unwrap(), - }; - }); + match body { + conduit::Body::Static(slice) => stdout.write(slice).map(|_| ()).unwrap(), + conduit::Body::Owned(vec) => stdout.write(&vec).map(|_| ()).unwrap(), + conduit::Body::File(mut file) => io::copy(&mut file, &mut stdout).map(|_| ()).unwrap(), + }; - Ok(Server{}) - } + Ok(()) } |