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