From a613320c5f69089feba14ef36de58bdc21dd7e0b Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 28 Jun 2020 18:22:18 +0200 Subject: 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. --- src/lib.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src') 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(handler: H) -> io::Result { + 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{}) } } -- cgit v1.2.3