aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/server.rs31
-rw-r--r--src/lib.rs25
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()
+ )
}
diff --git a/src/lib.rs b/src/lib.rs
index 0da0f58..5d26a98 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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{})
}
}