diff options
-rw-r--r-- | examples/server.rs | 31 | ||||
-rw-r--r-- | src/lib.rs | 25 |
2 files changed, 39 insertions, 17 deletions
diff --git a/examples/server.rs b/examples/server.rs index 7460f56..864c105 100644 --- a/examples/server.rs +++ b/examples/server.rs @@ -1,27 +1,26 @@ +extern crate conduit; extern crate http; +extern crate fastcgi_conduit; use std::fs::OpenOptions; use std::io::prelude::*; +use std::io; -use http::{Response, StatusCode}; +use conduit::{Body, RequestExt, Response}; +use conduit::header; -use fcgi; +use fastcgi_conduit::Server; fn main() { - fcgi::run(move |req| { - let mut file = OpenOptions::new() - .write(true) - .append(true) - .open("/tmp/fcgi-log.txt") - .unwrap(); - write!(file, "ยป {:?}\n", req).unwrap(); - - let resp = Response::builder() - .status(StatusCode::OK) - .body(()) - .unwrap(); + Server::start(handler); +} - return resp; - }); +fn handler(req: &mut dyn RequestExt) -> io::Result<Response<Body>> { + Ok( + Response::builder() + .header(header::CONTENT_TYPE, "text/html") + .body(Body::from_static(b"<h1>Test</h1>")) + .unwrap() + ) } @@ -241,10 +241,33 @@ impl<'a> conduit::RequestExt for FastCgiRequest<'a> { } -struct Server; +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(); + + 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(); + + match body { + conduit::Body::Static(slice) => stdout.write(slice).map(|_| ()).unwrap(), + conduit::Body::Owned(vec) => stdout.write(&vec).map(|_| ()).unwrap(), + conduit::Body::File(file) => (), + }; + }); + Ok(Server{}) } } |