aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2020-06-28 18:22:18 +0200
committerTeddy Wing2020-06-28 18:22:18 +0200
commita613320c5f69089feba14ef36de58bdc21dd7e0b (patch)
treedebae65c668eefe26a9aa9dcd4bff133dfaea97a /src
parent0529b3763ca263f6c45fb632f24cf5d3c5ea0271 (diff)
downloadfastcgi-conduit-a613320c5f69089feba14ef36de58bdc21dd7e0b.tar.bz2
Server: Working `start()` implementation
Got a draft version of the server working. Change the example to use the new Conduit server. Got a working HTML fragment response. Need to handle `conduit::Body::File` as well as unwrapped errors.
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs25
1 files changed, 24 insertions, 1 deletions
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{})
}
}