aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/server.rs63
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(())
}