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(())  } | 
